随笔分类 - Algorithms
摘要:外部排序针对排序文件的大小大于可用内存的情况。如对4GB文件进行排序,可用内存1G,显然没法直接装入内存进行排序。所以我们将这4GB的文件分割为4个1GB的文件进行排序。外部排序的一般步骤为:1. 对分割后的小文件进行内部排序,将排好序的数据写入到4个不同文件中。2. 使用4路归并排序的方法对4个小文件进行排序。(这里仅仅使用长度为4的最小优先级队列)3. 每次读入4个文件中的一个数放入最小优先级队列中,则这个最小优先级队列中的起始元素就为4GB文件中最小的一个。4. 每次从优先级队列中取出起始元素,写入到输出文件中,然后从一个关联的文件中读取下一个元素插入到最小优先级队列中。5. 重复第..
阅读全文
posted @ 2013-08-13 23:27
Let it be!
摘要:使用链表计算两个大整数的和一道有意思的编程练习题:两个单链表(singly linked list),每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list长度相等。 要求是:1. 不用递归。2. 要求算法在最好的情况下,只遍历两个list一次 ,最差的情况下两遍。下面是我的解法:#include #include #include #define MAX 32 // 列表长度struct Node { char num; struct Node *next;};void list_build(struct Node *...
阅读全文
posted @ 2013-06-30 22:43
Let it be!
摘要:数论,数学中的皇冠,最纯粹的数学。早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的思维游戏中。直到计算机诞生之后,几千年来的数论研究成果突然有了实际的应用,这个过程可以说是最为激动人心的数学话题之一。最近我在《程序员》杂志上连载了《跨越千年的 RSA 算法》,但受篇幅限制,只有一万字左右的内容。其实,从数论到 RSA 算法,里面的数学之美哪里是一万字能扯完的?在写作的过程中,我查了很多资料,找到了很多漂亮的例子,也积累了很多个人的思考,但最终都因为篇幅原因没有加进《程序员》的文章中。今天,我想重新梳理一下线索,把所有值得分享的内容一次性地呈现在这篇长文中,希望大家..
阅读全文
posted @ 2013-02-26 22:36
Let it be!
摘要:原文:维基百科链接There are at least three differentalgorithmsthat decide if and how a given regular expression matches a string.至少有三种算法可以用来确定给定的正则表达式是否匹配一个字符串。(1) 自动机The oldest and fastest rely on a result in formal language theory that allows everynondeterministic(不确定) finite automaton(NFA) to be transform
阅读全文
posted @ 2012-07-25 13:59
Let it be!
摘要:[注:本文章是一篇书评。书名:algorithm 中文书名:算法概论] 这是本很新的书,06年末发行,07年才慢慢出现于人们的视野。我在08年初得知这本书,那会我还很奇怪:都什么年月了,怎么还有人写算法教材——这么“经典”的工作,不是上个世纪就被人做完了吗。 读了这本Algorithms,我才知道:这才是我心中的算法书,我等待这样一本书已经很多年了。它的确当得起这个名字。 书的三位作者:Sanjoy Dasgupta, Papadimitriou, Umesh Vazirani。 其中,Umesh堪称计算机理论界的第二名师(第一名师是他自己的导师Manuel Blum),他带过的学生...
阅读全文
posted @ 2012-06-26 22:57
Let it be!
摘要:temp\research Do We Teach the Right Algorithm Design Techniques ? Anany Levitin Villanova University levitin@vill.edu Abstract Algorithms have come to be recognized as the cornerstone of computing.Surprisingly, there has been little research or discussion of general techniquesfor designin...
阅读全文
posted @ 2012-06-26 22:15
Let it be!
摘要:算法思路:1. 给出先序,中序序列(两个序列中的值不应该有重复)2. 先序序列的第一个符号就是树的根3. 根据先序序列中根的值在中序序列中找到根所在节点的下标4. 根据下标将先序序列和中序序列分别都分解成两个子序列(这里要注意分解的方式,下面的实现中用了值传递的方式)5. 根据上面分得的子序列分别用递归的方式构造左右子树(这里就包含了分治的思想)算法实现(Python):# encoding:utf-8'''python 3.3 Created on 2012-6-8'''#====================================
阅读全文
posted @ 2012-06-09 00:24
Let it be!
摘要:1. 最大共因子(gcd)2. 亲密数对的定义3. 亲密数对的实现(Python)1. gcd递归定理及证明 gcd递归定理是指gcd(a,b)=gcd(b,a%b),其中%表示取余数。 证明: 我们只需证明gcd(a,b)和gcd(b,a%b)可以互相整除即可。 对于gcd(a,b),它是a和b的线性组合中的最小正元素,gcd(b,a%b) 是b与a%b的一个线性组合,而a%b是a与b的一个线性组合,因而gcd(b,a%b)是一个a与b的线性组合,因为a,b都能被gcd(a,b)整除,因而任何一个a与b的线性组合都能被gcd(a,b)整除,所以gcd(b,a%b)能被gcd(a,b)...
阅读全文
posted @ 2012-06-06 13:23
Let it be!
摘要:BY刘未鹏–JULY 7, 2008POSTED IN:学习方法,算法Updated(2008-7-24):更新见正文部分,有标注。其实下文的绝大部分内容对所有学习都是同理的【注释:确实如此。】。只不过最近在正儿巴经地学算法,而后者又不是好啃的骨头,所以平时思考总结得就自然要比学其它东西要多一些。问题:目前几乎所有的算法书的讲解方式都是欧几里德式的、瀑布式的、自上而下的、每一个推导步骤都是精准制导直接面向目标的。由因到果,定义、引理、定理、证明一样不少,井井有条一丝不乱毫无赘肉。而实际上,这完全把人类大脑创造发明的步骤给反过来了【注释:与人的思维恰好相反,这种方式其实是给别人演绎而不是呈现思维
阅读全文
posted @ 2012-06-04 19:36
Let it be!
摘要:思路来自 《算法导论》 1 /* 2 * 3 * 1. 创建最小优先级队列 4 * 2. 用最小优先级队列创建Huffman树 5 * 3. 得到Huffman编码 6 * 7 */ 8 9 using System; 10 using System.Collections.Generic; 11 using System.Collections; 12 using System.Linq; 13 using System.Text; 14 using System.IO; 15 16 namespace HuffmanTree 17 { 18 19 ...
阅读全文
posted @ 2012-04-30 10:54
Let it be!
摘要:# 判断两棵二叉树是否同构:即就是判断两棵树的结构是否一样,长得是否一样。# 判断两棵二叉树是否相同:即就是在同构的基础上再判断两棵树中对应的元素数据是否相同。# 解决思路:(用类似于递归遍历二叉树的方式)# 1. 建立二叉树 # 2. 递归判断是否同构# 3. 在递归的基础上判读元素是否相同 1 # encoding:utf-8 2 3 class Node: 4 def __init__(self, data): 5 self.data = data 6 self.left = None 7 self.right = None 8 ...
阅读全文
posted @ 2012-04-01 18:30
Let it be!
摘要:1. 步骤:(CountSort) 1) 求得min, max 2) 开辟空间 a[0, max-min] = {-1} 3) if min < 0: data[i] += |min| else: data[i] –= min 4) for i = 0 to n: a[data[i]] = 1 5) index = 0 for i = 0 to max-min: if a[i] = 1...
阅读全文
posted @ 2011-10-23 23:54
Let it be!
浙公网安备 33010602011771号