
算法
文章平均质量分 95
pakko
这个作者很懒,什么都没留下…
展开
-
全排列算法
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、原创 2011-10-18 10:09:17 · 1356 阅读 · 0 评论 -
二分图匹配 - 原理
上一篇文章讲了二分图匹配的缘起,这篇文章就讲讲二分图匹配的算法详解二分图的概念二分图又称作二部图,是图论中的一种特殊模型。 设G=(V, E)是一个无向图。如果顶点集V可分割为两个互不相交的子集X和Y,并且图中每条边连接的两个顶点一个在X中,另一个在Y中,则称图G为二分图。图1二分图的性质定理:当且仅当无向图G的每一个回路的次数均是偶数时,G才是一个二分图。如果无回路,相当...原创 2018-07-30 18:45:32 · 1217 阅读 · 2 评论 -
二分图匹配 - 缘起
出于对二分图匹配问题的兴趣,接下来会从缘起、原理、打车匹配、外卖匹配来深入了解二分图匹配算法。先从吴军老师在《得到》专栏里的一篇文章“打车软件匹配人和车是否比下围棋还复杂?”说起。滴滴的人说打车调度比下围棋的算法还难围棋只有19*19个=361个格子 把滴滴的车作为棋盘的行序列,打车的人比作纵序列,那交叉点比361要多很多 如果按公布的数字,车辆在千万级别,打车的人在亿级别,那组合...原创 2018-07-28 13:59:37 · 578 阅读 · 0 评论 -
海量数据处理
海量:1)无法在较短时间内迅速解决2)无法一次性装入内存针对时间,搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树针对空间,大而化小:分而治之/hash映射分而治之/hash映射 + hash统计 + 堆/快速/归并排序;双层桶划分Bloom filter/Bitmap;Trie树/数原创 2014-06-19 12:04:49 · 1398 阅读 · 0 评论 -
a的n次方的快速算法及大数相乘
对于a的n次幂求解这个问题,不少人看到后都觉得没有什么内容吧!我第一次想到这个问题也觉得没有什么内容,但是后来仔细想想,里面还真是有学问哦!想想看如果我们求 a8 ,有以下两种方法:1)a8 = a * a * a * a * a * a * a * a 需要计算 7次乘法2)a 8 = (a * a) * A * A (其中A = a * a) 需要计算3次乘法对于这么简单...原创 2011-10-20 14:17:12 · 12732 阅读 · 5 评论 -
二叉排序树
树型结构一直是一种很重要的数据结构,我们知道二叉查找树BST提供了一种快速查找,插入的数据结构。相比散列表来说BST占用空间更小,对于数据量较大和空间要求较高的场合,BST就显得大有用处了。BST的大部分操作平均运行时间为O(logN),但是如果树是含N个结点的线性链,则最坏情况运行时间会变为O(N)。为了避免出现最坏情况我们给它增加一些平衡条件, 使它的高度最多为2log(N+1),最坏情况原创 2011-10-19 15:31:04 · 903 阅读 · 0 评论 -
汉诺塔算法
汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。为了更清楚地描述算法,可以定义一个函数move(n,a,b,c)。该函数的功能是:将N个盘子从A杆上借助C杆移动到B杆上。这样移动原创 2011-10-18 10:29:37 · 2758 阅读 · 0 评论 -
快速排序
(1) 分治法的基本思想分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题,然后递归地解这些子问题,最后将这些子问题的解组合为原问题的解。(2)快速排序的基本思想设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:1)分解: 在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为原创 2011-10-20 17:03:14 · 1077 阅读 · 0 评论 -
折半查找算法及变形
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。【基本思想】将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解。第一个二分搜索算法早在1946 年就出原创 2011-10-18 11:10:50 · 1032 阅读 · 0 评论