Algorithm
文章平均质量分 65
轩辕逍遥Moon
www.weibo.com/guyulonglife
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Trie树|字典树的简介及实现(转)
Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.其基本性质可以归纳为:1. 根节点不包含字符,除根节点外每一个节点都转载 2015-11-15 16:37:30 · 422 阅读 · 0 评论 -
Rabin-Karp算法
Rabin-Karp算法在字符串匹配中其实也不算是很常用,但它的实用性还是不错的,除非你的运气特别差,最坏情况下可能会需要O((n-m)*m)的运行时间(关于n,m的意义请看上篇)。平均情况下,还是比较好的。朴素的字符串匹配算法为什么慢? 因为它太健忘了,前一次匹配的信息其实可以有部分可以应用到后一次匹配中的,而朴素的字符串匹配算法只是简单的把这个信息扔掉,从头再来,因此,浪费了时间。好好的利原创 2015-11-15 16:54:13 · 572 阅读 · 0 评论 -
判断链表相交、环
编程判断俩个链表是否相交给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?以下是算法实现部分:如何判断一个单链原创 2015-11-15 16:52:17 · 569 阅读 · 0 评论 -
回溯算法
回溯法其实也是一种搜索算法,它可以方便的搜索解空间。 回溯法解题通常可以从以下三步入手: 1、针对问题,定义解空间 2、确定易于搜索的解空间结构 3、以深度优先的方式搜索解空间,并在搜索的过程中进行剪枝 回溯法通常在解空间树上进行搜索,而解空间树通常有子集树和排列树。 针对这两个问题,算法的框架基本如下: 用回溯法搜索子集合树的一般框架:Cpp代码void原创 2015-11-15 16:41:44 · 464 阅读 · 0 评论 -
老鼠毒药问题
大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药? 这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数。让第一只老鼠喝掉所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝掉所有二原创 2015-11-15 16:50:54 · 758 阅读 · 0 评论 -
平面最近点对
求点集中的最近点对有以下两种方法:设p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对。1、蛮力法(适用于点的数目比较小的情况下)1)算法描述:已知集合S中有n个点,一共可以组成n(n-1)/2对点对,蛮力法就是对这n(n-1)/2对点对逐对进行距离计算,通过循环求得点集中的最近点对:原创 2015-11-15 16:39:18 · 732 阅读 · 0 评论 -
猴子搬香蕉问题
一只猴子旁边有100跟香蕉 猴子距离家50米 猴子一次顶多搬50跟香蕉 但猴子每走一米就要吃掉一根香蕉 问猴子最多能拿多少根香蕉回家?16根。应注意往回走时,也吃香蕉。先拿50根,走一米放下,拿一根往回走,再取剩下的50根,与原来的放在一起,拿 50根走一米,放下,拿一根往回走,再取剩下的47根,与原来的放在一起,拿50根走一米,放下,拿一根往回走,再取剩下的44根,与..原创 2015-11-15 16:50:20 · 1261 阅读 · 0 评论 -
10^n个整数(亿级)的排序
输入:一个最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数)的文件,其中每个数都小于等于n,且n=10^7。输出:得到按从小到大升序排列的包含所有输入的整数的列表。《编程珠玑》中提出的问题,有三种解法:(1)磁盘合并排序先将所有数据分成多个小文件,多个小文件采用内部排序后,再用多路合并排序完成排序输出。 总数据为n, 内存中采用内部排序最多m。先分原创 2015-11-15 16:48:00 · 665 阅读 · 0 评论 -
排序算法
给出含有n个元素的数组array[n],对其进行排序(排列成从小到大)。对于每一个算法,需要给出 代码、算法复杂度、空间复杂度、是否稳定。1.插入排序void insert_sort(int *array, int n){for(int j=1;jint i=j-1;int key=a[j];while(i>=0 && a[i]>key){a[i+1]=a[原创 2015-11-15 16:43:24 · 453 阅读 · 0 评论 -
ACM题目分类总结及pku题目分类
主流算法:? 1.搜索 //回溯? 2.DP(动态规划) ? 3.贪心 ? 4.图论 //Dijkstra、最小生成树、网络流? 5.数论 //解模线性方程? 6.计算几何 //凸壳、同等安置矩形的并的面积与周长? 7.组合数学 //Polya定理? 8.模拟 ? 9.数据结构 //并查集、原创 2015-11-15 16:44:28 · 501 阅读 · 0 评论 -
生成N个随机数,和为1
算法如下:先随机生成N-1个随机0-1小数 (x1,x2,x3......), 从小到大排序然后 结果1=x1结果2=x2-x1......以此类推结果n = 1 - x(n-1)这个问题可以理解为 长度为1 的钢筋, 要求随机分成n-1份随机生成分割点即可.原创 2015-11-15 16:31:27 · 3248 阅读 · 2 评论 -
BM算法
1977年,Robert S.Boyer和J Strother Moore提出了另一种在O(n)时间复杂度内,完成字符串匹配的算法,其在绝大多数场合的性能表现,比KMP算法还要出色,下面我们就来详细了解一下这一出色的单模式匹配算法,在此之前推荐读者读一下我的另一篇文章《KMP算法详解》,对于透彻理解BM算法大有裨益。在讲解Boyer-Moore算法之前,我们还是要提一提KMP算法的老例子,当模原创 2015-11-15 16:53:50 · 414 阅读 · 0 评论 -
KMP算法
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳转表next过程中进行了多个层面的优化和抽象,使得KMP算法进行模式匹配的原理显得不那么直白。本文希望能够原创 2015-11-15 16:54:55 · 356 阅读 · 0 评论
分享