![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithms
happylife1527
这个作者很懒,什么都没留下…
展开
-
随机化算法(1) — 随机数
最近在看王晓东的《计算机算法设计与分析(第3版) 》,感觉讲的挺不错的。这里先推荐下。接下来的几章(包括本章),我准备以连载的方式讲出来,主要用到的资料是上面推荐的那本书以及《算法导论》和网上的资源,内容是概率分析与随机算法。文章内大部分内容出自书中,我仅以汇总形式以及个人理解加以补充。如有纰漏,欢迎指出。概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次可能得到完全不同转载 2012-09-22 09:37:42 · 395 阅读 · 0 评论 -
各种字符串Hash函数比较
http://blog.csdn.net/xinghongduo/article/details/6910734 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。 常用字符串哈希函数有 BKDRHash,A转载 2012-09-06 21:35:32 · 351 阅读 · 0 评论 -
约瑟夫环问题
问题描述:有n个人围成一个环,然后给从某个人开始顺时针从1开始报数,每报到m时,将此人出环杀死(当然不杀死也可以啊),然后从下一个人继续从1报数,直到最后只剩下一个人,求这个唯一剩下的存活的人是谁? 分析:首先,我们要标示这n个人,别小看这一步,其实蛮重要的。第一种标示方法是从0开始,将n个人标示为0~n-1,第二种方法是从1开始标示,将这n个人标示为1~n。当然会有人说了,那我从转载 2012-08-28 10:31:50 · 804 阅读 · 0 评论 -
跳表SkipList
跳表SkipList1.聊一聊跳表作者的其人其事2. 言归正传,跳表简介3. 跳表数据存储模型4. 跳表的代码实现分析5. 论文,代码下载及参考资料 . 聊一聊作者的其人其事 跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lis转载 2012-08-25 17:17:18 · 473 阅读 · 0 评论 -
递归算法的时间复杂度终结篇
开篇前言:为什么写这篇文章?笔者目前在学习各种各样的算法,在这个过程中,频繁地碰到到递归思想和分治思想,惊讶于这两种的思想的伟大与奇妙的同时,经常要面对的一个问题就是,对于一个给定的递归算法或者用分治思想缩小问题规模的算法,如何求解这个算法的时间复杂度呢?在google过很多的博文后,感觉这些博文总结的方法,有很好优秀的地方,但是都不够全面,有感于此,笔者决定总结各家之长,作此博文,总结各种方法于转载 2012-08-27 15:12:59 · 755 阅读 · 0 评论 -
算法时间复杂度分析基础
摘要 本文论述了在算法分析领域一个重要问题——时间复杂度分析的基础内容。本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导。从而帮助大家从本质上认清这个概念。前言 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的转载 2012-08-27 10:45:00 · 362 阅读 · 0 评论 -
散列法及哈希表
七、哈希表(Hash Table)及散列法(Hashing)数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图:左边很明显是个数组,数组转载 2012-09-04 22:52:51 · 775 阅读 · 0 评论 -
ACM算法相关资料
http://www.cnblogs.com/pengyingh/articles/2383358.html 一:知识点数据结构:1,单,双链表及循环链表2,树的表示与存储,二叉树(概念,遍历)二叉树的应用(二叉排序树,判定树,博弈树,解答树等)3,文件操作(从文本文件中读入数据并输出到文本文件中)4,图(基本概念,存储结构,图的运算)数学知识1,离散数转载 2012-09-03 22:18:15 · 967 阅读 · 0 评论 -
一致性hash算法 - consistent hashing
一致性hash算法 - consistent hashingconsistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N转载 2012-09-03 22:25:30 · 324 阅读 · 0 评论 -
学习算法之路
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd、Dijkstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内)转载 2012-08-25 17:34:33 · 374 阅读 · 0 评论 -
快速的字符串查找算法(Boyer-Moore)
在CodeProject,Efficient Boyer-Moore Search in Unicode Strings,作者leseul展示了Boyer-Moore算法的威力,代码这里下载:Download source - 10.2 Kb Download demo project - 5.18 Kb我写了一个性能测试:public static void Main()转载 2012-08-24 11:41:34 · 530 阅读 · 0 评论 -
从头到尾彻底解析Hash表算法
http://blog.csdn.net/v_JULY_v/article/details/6256463 十一、从头到尾彻底解析Hash 表算法作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Has转载 2012-09-06 21:39:54 · 292 阅读 · 0 评论 -
单链表
http://www.cnblogs.com/titer1/archive/2012/04/13/2445445.html声明,本文所有13道算法题目,覆盖了基本上所有常见的单链表问题,全都用C#实现,并测试通过,代码下载:TestLink.zip 1.单链表反转2.找出单链表的倒数第4个元素3.找出单链表的中间元素4.删除无头单链表的一个节点转载 2012-09-07 22:42:49 · 395 阅读 · 0 评论 -
kmp 领悟代码
http://www.cnblogs.com/titer1/archive/2012/04/01/2429418.html66不是为背代码而来 代码 注释尽在不言中 希望:过acmKMP算法的练习题(poj 3461、poj 2752转载 2012-09-07 22:47:36 · 276 阅读 · 0 评论 -
随机化算法(2) — 数值概率算法
http://www.cnblogs.com/tanky_woo/archive/2010/12/11/1902921.html 接着上一篇: 随机化算法(1) — 随机数在这章开篇推荐下chinazhangjie总结的随机算法,因为咱两看的是同一本书,所以大家也可以去参考下他的,总结的很不错。http://www.cnblogs.com/chinazhangjie/a转载 2012-09-22 10:10:18 · 504 阅读 · 0 评论 -
随机化算法(5) — 蒙特卡罗(Monte Carlo)算法
http://www.cnblogs.com/tanky_woo/archive/2010/12/15/1906708.html已出连载: 1.《随机化算法(1) — 随机数》2.《随机化算法(2) — 数值概率算法》3.《随机化算法(3) — 舍伍德(Sherwood)算法》 4.《随机化算法(4) — 拉斯维加斯(Las转载 2012-09-21 17:11:55 · 1759 阅读 · 0 评论 -
随机化算法(4) — 拉斯维加斯(Las Vegas)算法
http://www.cnblogs.com/tanky_woo/archive/2010/12/13/1904146.html已出连载:1.《随机化算法(1) — 随机数》2.《随机化算法(2) — 数值概率算法》3.《随机化算法(3) — 舍伍德(Sherwood)算法》正文:悟性不够,这一章看代码看了快一个上午,才理解。上一章讲过《转载 2012-09-21 17:05:22 · 1789 阅读 · 0 评论 -
哈希表的C实现
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。具体的介绍网上有很详细的描述,如闲聊哈希表 ,这里就不再累述了;哈希表在像Java、C#等语言中是与生俱来的。可是在C的世界中,似乎只有自己动手,丰衣足食;在网上google了一把,大致有几个版本,我会一一来分析转载 2012-09-14 21:35:55 · 1841 阅读 · 0 评论 -
双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。/* 线性表的双向链表存储结构 */typedef struct DuLNode{ ElemType data; struct DuLNode *prior,*next;转载 2012-09-14 21:18:14 · 335 阅读 · 0 评论 -
一些有意思的算法代码
http://www.csdn.net/article/2011-11-29/308265Keith Schwarz是一个斯坦福大学计算机科学系的硕士研究生。他对编程充满了热情。他的主页上他自己正在实现各种各样的有意思的算法和数据结构,http://www.keithschwarz.com/interesting/, 目前这个网页上有88个(见下面的列表),但这位大哥要干135个,你可转载 2012-09-11 22:17:28 · 468 阅读 · 0 评论 -
关于栈、堆、静态存储区最大可分配大小的探讨 --海量之一
http://www.cnblogs.com/titer1/archive/2011/12/31/2308848.html关于栈、堆、静态存储区最大可分配大小的探讨引:2011-12-31 15:57:31 主要是测试方法 **环境 ,**环境 九21,050 views | C++中午看《编程之美》的第2.5节中有这么一小段程序:float array[100 00转载 2012-09-07 22:52:45 · 1183 阅读 · 0 评论 -
kmp 为一个图 而深入认识 ,用输出来说话
http://www.cnblogs.com/titer1/archive/2012/04/01/2429413.html 图 来自v_july_v 博客图 2012年4月1日21:46 pattern_index: 0debug luky target_index: 1对应 july图中 index =0转载 2012-09-07 22:46:40 · 400 阅读 · 0 评论 -
各排序算法的C++实现与性能测试
http://www.cnblogs.com/bizhu/archive/2012/08/12/2634340.html 排序是计算机算法中非常重要的一项,而排序算法又有不少实现方法,那么哪些排序算法比较有效率,哪些算法在特定场合比较有效,下面将用C++实现各种算法,并且比较他们的效率,让我们对各种排序有个更深入的了解。minheap.h 用于堆排序: 1 //转载 2012-09-08 21:10:25 · 688 阅读 · 0 评论 -
一致性 hash 算法( consistent hashing )
http://www.cnblogs.com/madonion/articles/2271888.htmlconsistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),转载 2012-09-07 23:10:11 · 365 阅读 · 0 评论 -
并查集--学习详解
文章作者:yx_th000 文章来源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 转载请注明,谢谢合作。 [本文新址:http://www.ahathinking.com/archives/10.html ] 昨天和今天学习了并查集和trie树,并练习了三道入门题目,理解更为深刻,觉得有必要总结一下,转载 2012-08-24 15:55:30 · 628 阅读 · 0 评论 -
KMP算法二
浴火重生大侠的文章我认为是最适合我的理解方式的,不过里面也有个小错。原文链接 http://swisel.blog.sohu.com/18840597.html以下红色部分为个人修改: 其实KMP算法还是比较容易理解的,关键在于next(j)函数容易让人糊涂,只要把这个函数弄明白了,KMP算也就可以说是真正掌握了。(说得太对了,next(j)的意思其实就是S在i不回溯的前提下转载 2012-08-24 15:07:52 · 726 阅读 · 0 评论 -
求二进制中1的个数
在《编程之美》一书中有一节提到如何求一个字节的无符号整型变量二进制表示中中1的个数,主要提到了四种方法。下面简单介绍一下:1.求余法 在将十进制数转换为二进制数时,采用除2取余法。将每次除2得到的余数保存起来逆序输出便是该十进制整数的二进制表示。因此可以采用这种方法去统计1的个数。int count(unsigned char n){ int sum=0;转载 2012-08-24 14:47:35 · 392 阅读 · 0 评论 -
堆排序算法
1.概述 1991年计算机先驱将获得者、斯坦福大学计算机科学系教授Robert W.Floyd和J. Williams在1964年共同发明了著名的Heap Sort算法。 堆排血实质上就是将要进行排序的序列Arr[1..n]看做是一棵完全二叉树的存储结构,堆则是满足如下性质的完全二叉树:树中任一非 叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。(如果按照数组转载 2012-08-16 15:03:42 · 475 阅读 · 0 评论 -
算法之道—形而之上谓之道
文 / 邹恒明1966年3月的一天,美国加州大学洛杉矶分校的Andrew J. Viterbi教授在给研究生讲解缠绕编码的时序译码算法SDCD。但不管他如何讲解,学生就是听不明白。思来想去,Viterbi觉得学生不能理解的原因是该算法的证明过于复杂。于是他开始考虑如何简化这个证明。在经历了持久的烦躁和困惑后,他灵感顿现:需要简化的不是算法的证明,而是算法本身。于是Viterbi对SDCD算法进转载 2012-08-27 12:48:42 · 394 阅读 · 0 评论 -
队列
队列 顺序队列生产者消费者模型 链式队列 队列(queue)跟上一章中介绍的栈数据结构一样,也是一种操作受限的线性表。栈的操作受限表现在插入和删除只能对栈顶元素进行,删除的元素永远是最新插入的,即操作遵循后入先出(LIFO)原则。这一章将讨论的队列中的操作原则与栈的相反。删除的元素是最早插入到队列中的,就像排队一样,排在最前面的人将最先从队伍中出列。这样的操作原则转载 2012-08-29 22:07:43 · 455 阅读 · 0 评论 -
程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结
作者:July--结构之法算法之道blog之博主。 时间:2010年10月-2011年6月。 出处:http://blog.csdn.net/v_JULY_v。 声明:版权所有,侵犯必究。前言 开博已过8个月,回首这8个月,发现自己在本blog上着实花费了巨大的时间与精力,写的东西可能也够几本书的内容了。希望我真真正正的为读者提供了实实在在的价值与帮助。无私分享,造福天转载 2012-08-20 14:55:38 · 3185 阅读 · 0 评论 -
栈
栈 顺序栈链表栈 利用栈实现递归(递推求组合数) 在上一章中我们讨论了线性表数据结构,重点探讨了线性表的几种实现方法。可以发现对线性表的操作,没有特别的限制:可以在表中任意当前位置插入或删除元素,而且可以重置当前节点指向。这一章我们将详细介绍一种操作受限的线性表——栈。栈是一种只支持两种主要的操作的受限线性表。可以将栈想像成一个“黑盒”,我们只能看到黑盒中转载 2012-08-29 22:11:16 · 679 阅读 · 0 评论 -
“算法与计算数学”之四书五经
“算法与计算数学”之四书五经选择自 myali88 的 Blog 倘若你去问一个木匠学徒:你需要什么样的工具进行工作,他可能会回答你:“我只要一把锤子和一个锯”。但是如果你去问一个老木工或者是大师级的建筑师,他会告诉你“我需要一些精确的工具”。由于计算机所解决的问题都是从生活中抽象出来的问题,其复杂性不言而喻,所以我们需要这样精确有效的工具去解决现实生转载 2012-08-28 12:41:22 · 747 阅读 · 0 评论 -
线性表
顺序线性表单练式线性表双链式顺序表循环链表及其应用 线性表(Linear List)是一种最常见也很重要的数据结构。类似于代数学中的向量的概念,线性表是由一组有序的数据组成。一般采用的描述方式为:(a0, a2, …, an-1)其中n表示线性表的有效长度,其中元素序号为0—n-1。这里所说的“有效长度”指的是线性表中实际使用的元素的个数,相对于线性表的最大允转载 2012-08-29 22:12:51 · 874 阅读 · 0 评论 -
迭代法 详解 ,最大公约数和最小公倍数
迭代法(iteration)也称辗转法,是一种不断用变量的旧值递推出新值的解决问题的方法,迭代算法一般用于数值计算。累加,累乘都是迭代算法的基础应用。利用迭代法解题的步骤:1)确定迭代模型 根据问题描述,分析出前一个(或几个)值与下一个值的迭代关系数学模型。2)建立迭代关系式 递推数学模型一般是带下标的字母,算法设计中要将其转化为“循环不变式”----迭代关系式,迭代关系转载 2012-08-30 00:14:23 · 3167 阅读 · 0 评论 -
选择排序之堆排序
http://www.jcc.jx.cn/xinwen3/news/kj/flash/2004/0426/1297.htm (动画演示效果) 此精通排序算法系列,前一节,已讲过了一、快速排序算法,其中,快速排序每一趟比较用时O(n),要进行lgn次比较,才最终完成整个排序。所以快排的复杂度才为O(n*lgn)。而本节,我们要讲的是堆排序算法。据我所知,要真正彻底认识一个算法,最好是去查转载 2012-08-18 23:00:07 · 355 阅读 · 0 评论 -
基数排序
今天学了基数排序,据说他的时间复杂度也是O(n),他的思路就是:没有计数排序那么理想,我们的数据都比较集中,都比较大,一般是4,5位。基本没有小的数据。那我们的处理很简单,你不是没有小的数据嘛。我给一个基数,例如个位,个位都是[0-10)范围内的。先对他进行归类,把小的放上面,大的放下面,然后个位排好了,在来看10位,我们也这样把小的放上面,大的放下面,依次内推,直到最高位排好。那么不就排转载 2012-08-18 08:32:08 · 303 阅读 · 0 评论 -
内部排序代码
编写程序实现下述五种算法,并用以下无序序列加以验证: 49,38,65,97,76,13,27,49 1.简单插入排序2.冒泡排序3.快速排序4.归并排序5.堆排序 //www.shuax.com// 2009.12.01#include #include typedef struct{ int *r; int转载 2012-08-16 23:04:07 · 623 阅读 · 0 评论 -
各种排序算法
这可能是最有趣的一节。排序的考题,在各大公司的笔试里最喜欢出了,但我看多数考得都很简单,通常懂得冒泡排序就差不多了,确实,我在刚学数据机构时候,觉得冒泡排序真的很“精妙”,我怎么就想不出呢?呵呵,其实冒泡通常是效率最差的排序算法,差多少?请看本文,你一定不会后悔的。1、冒泡排序(Bubbler Sort)前面刚说了冒泡排序的坏话,但冒泡排序也有其优点,那就是好理解,稳定,再就是空间复杂度低转载 2012-08-16 23:05:17 · 566 阅读 · 0 评论 -
堆排序(Heap Sort)
堆排序1、 堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或转载 2012-08-16 15:04:45 · 515 阅读 · 0 评论