随笔分类 -  算法思想

二分图最大匹配之匈牙利算法
摘要:转自http://blog.csdn.net/china8848/article/details/2287769二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y。给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是一个匹配。图中包含边数最多的匹配称为图的最大匹配。二分图的最大匹配有两种求法,第一种是最大流;第二种就是我现在要讲的匈牙利算法。这个算法说白了就是最大流的算法,但是它跟据二分图匹配这个问题的特点,把最大流算法做了简化,提高了效率。最大流算法的核心问题就是找增广路径(augme 阅读全文

posted @ 2011-10-04 12:06 lonelycatcher 阅读(898) 评论(0) 推荐(0)

Hash
摘要:转自:http://www.cnblogs.com/qianxun/archive/2011/07/03/2096773.html1.Hash介绍 Hash这个在实现某些功能的经常会用到的数据结构,在java和c++ 里面都有相应的封装好的数据结构:C++ STL Map java 有HashMap TreeMap。计算理论中,没有Hash函数的说法,只有单向函数的说法。所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数据。用“人 类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来;而当给定结果的时候,很难计算出输入来,这就是单项函数。各种加密 阅读全文

posted @ 2011-08-24 19:50 lonelycatcher 阅读(2332) 评论(0) 推荐(0)

字符串Hash函数的比较
摘要:常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字符串哈希函数有 BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函数,我对其进行了一个小小的评测。Hash函数数据1数据2数据3数据4数据1得分数据2得分数据3得分数据4得分平均分BKDRHash20477448196.5510090.9582.0592.64APHash2347 阅读全文

posted @ 2011-08-23 15:17 lonelycatcher 阅读(1424) 评论(0) 推荐(0)

母函数
摘要:转自:http://www.wutianqi.com/?p=596最近更新:2011.4.31.鉴于文章图片和排版的问题,对文章进行了重新编辑。2.看见网上很多朋友在转载时不尊重别人的劳动成果,任意删除文章里关于作者的信息,希望大家在转载时保留文章所有信息,遵守版权规定。前段时间写了一篇《背包之01背包、完全背包、多重背包详解》,看到支持的人很多,我不是大牛,只是一个和大家一样学习的人,写这些文章的目的只是为了一是希望让大家学的轻松,二是让自己复习起来更方便。(以下内容部分引至杭电ACM课件和维基百科)在数学中,某个序列的母函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母 阅读全文

posted @ 2011-07-30 16:01 lonelycatcher 阅读(562) 评论(0) 推荐(0)

动态规划之最长递增子序列问题
摘要:以下文章转载自CSDN,我收藏一下。因为找不到原作作者,敬请原谅,如果您是作者请告知我。最长递增子序列问题的求解最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能够锻炼设计较复杂算法的思维,我对这个问题进行了较深入的分析思考,得出了几种复杂度不同算法,并给出了分析和证明。一,最长递增子序列问题的描述设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其 阅读全文

posted @ 2011-07-28 09:10 lonelycatcher 阅读(30363) 评论(5) 推荐(12)

平面最近点对的分治算法
摘要:上一页 | 返回目录 | 下一页最接近点对问题 转自参考解答 这个问题很容易理解,似乎也不难解决。我们只要将每一点与其他n-1个点的距离算出,找出达到最小距离的两个点即可。然而,这样做效率太低,需要O(n2)的计算时间。在问题的计算复杂性中我们可以看到,该问题的计算时间下界为Ω(nlogn)。这个下界引导我们去找问题的一个θ(nlogn)算法。 这个问题显然满足分治法的第一个和第二个适用条件,我们考虑将所给的平面上n个点的集合S分成2个子集S1和S2,每个子集中约有n/2个点,·然后在每个子集中递归地求其最接近的点对。在这里,一个关键的问题是如何实现分治法中的合并步骤,即由S1和S2 阅读全文

posted @ 2011-07-18 09:07 lonelycatcher 阅读(7005) 评论(0) 推荐(0)

快速幂取余
摘要:快速幂取模算法,留着以后慢慢研究long long modExp(long long a,long long b,long long n){ long long t,y; t = 1; y = a; while(b){ if(b % 2) t = t * y % n; y = y * y % n; b >>= 1; } return t;} 阅读全文

posted @ 2011-05-27 14:07 lonelycatcher 阅读(684) 评论(0) 推荐(0)

线性素数打表
摘要:转自:http://blog.sina.com.cn/s/blog_787c1f7b0100s0yx.html参考链接:http://leonbule.blogbus.com/logs/5342169.htmlhttp://kmplayer.javaeye.com/blog/606352原理:1. 任何一个合数都可以表示成一个质数和一个数的乘积2. 假设A是一个合数,且A = x * y,这里x也是一个合数,那么有:A = x * y; (假设y质数,x合数)x = a * b; (假设a是质数,且a < x)-> A = a * b * y = a * Z (Z = b * y) 阅读全文

posted @ 2011-05-25 20:05 lonelycatcher 阅读(589) 评论(0) 推荐(0)

导航