付之东流

程序是衣,算法为魂

2006年09月

原创 0/1背包问题(动态规划)--算法导论示例

背包问题:有n种物品x(1),x(2), ...x(n), 其价值与重量各为v(i)与w(i) (i=1,2,...n), 其中所有的 w(i) 均为整数。 如何搭配选取这 n 种物品, 使得选出的物品价值最高, 但总重量不超过负重限制 m?阅读全文>

发表于 @ 2006年09月30日 17:32:00|评论(loading...)|编辑

原创 逆波兰式计算器

  逆波兰记号是最简单的一种中间代码表示形式,早在编译程序出现之前,它就用于表示算术表达式,是波兰逻辑学家卢卡西维奇发明的。   这种表示法将运算对象写在前面,把运算符号写在后面,比如把a+b写成ab+,把a*b写成ab*,用这种表示法表示的表达式也称做后缀式。阅读全文>

发表于 @ 2006年09月29日 20:28:00|评论(loading...)|编辑

原创 任务调度(贪婪算法)--算法导论示例

在贪婪算法(greedymethod)中采用逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。决策一旦作出,就不可再更改。作出贪婪决策的依据称为贪婪准则(greedycriterion)。阅读全文>

发表于 @ 2006年09月28日 13:14:00|评论(loading...)|编辑

原创 最长公共子序列(动态规划)--算法导论示例

最长公共子序列的定义是,一个数列S,如果分别是已知数列的子序列(子序列不一定是连续序列),且是所有符合此条件序列中最长的,则S成为最长公共子序列。 动态规划计算最长公共子序列的方法:以两个序列为例子: f[i][j]表示第一个序列的1..i前缀合第二个序列的1..j前缀的最长公共子序列, 则有 f[i][j] = max{f[i - 1][j - 1] + same(i,j), f[i - 1][j], f[i][j - 1]} 其中,same(a, b)当第一个序列的第a位与第二个序列的第b位完全相同时为“1”,否则为“0”。阅读全文>

发表于 @ 2006年09月25日 17:14:00|评论(loading...)|编辑

原创 矩阵链相乘算法(动态规划)--算法导论示例

作为经典的动态规划算法举例,矩阵连乘问题很好地展现了动态规划的特点和实用价值。给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,i=1,2,...n-1。现在要计算这n个矩阵的连乘积。由于矩阵的乘法满足结合律,所以通过加括号可以使得计算矩阵的连乘积有许多不同的计算次序。然而采用不同的加扩号方式,所需要的总计算量是不一样的。若A是一个p*q矩阵,B是一个q*r矩阵,则其乘积C=AB是一个p*r矩阵。如果用标准算法计算C,总共需要pqr次数乘。阅读全文>

发表于 @ 2006年09月22日 20:25:00|评论(loading...)|编辑

转载 李开复:Google倡导的就是超女精神

从微软来到Google,在世界IT巨头之间从容转身,李开复留给我们的是华丽的姿态,“我是一个务实的理想主义者”,当即便是大如微软公司不能最大理想化他的目标时,他也会决然对比尔·盖茨说:“I need to follow my heart.(追随我心的选择)”。——这是真正的超级男生。 阅读全文>

发表于 @ 2006年09月21日 17:13:00|评论(loading...)|编辑

原创 装配线调度算法(动态规划)--算法导论示例

动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。 为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存.阅读全文>

发表于 @ 2006年09月21日 08:44:00|评论(loading...)|编辑

原创 KMP字符串匹配算法--算法导论示例

算法导论926页阅读全文>

发表于 @ 2006年09月19日 20:50:00|评论(loading...)|编辑

原创 Rabin Karp的字符串匹配算法--算法导论示例

算法导论911页阅读全文>

发表于 @ 2006年09月16日 15:33:00|评论(loading...)|编辑

原创 朴素字符串匹配算法(Naive String-Matching)--算法导论示例

作为最原始的字符串匹配算法,它的时间复杂度是O((n-m+1)m)阅读全文>

发表于 @ 2006年09月15日 11:27:00|评论(loading...)|编辑

转载 丘成桐对大陆学术的忧思──数学大师访谈录

近两年来,世界著名数学大师、哈佛大学讲座教授丘成桐先生针对中国大陆学术界出现的严重腐败现象,发出一系列尖锐的批评。阅读全文>

发表于 @ 2006年09月12日 18:30:00|评论(loading...)|编辑

原创 二叉查找树(binary search tree (BST))--算法导论示例

二叉查找树又叫二叉排序树,属于二叉树的一种特例。它的左子树上所有节点的值均小于根节点的值,它的右子树上的所有节点的值均大于根节点的值,并且其左右子树也都是二叉查找树。搜索,插入,删除的复杂度等于树高,O(log(n)). 阅读全文>

发表于 @ 2006年09月12日 09:44:00|评论(loading...)|编辑

原创 统计输入的行数、单词数与字母数

在我的另一篇文章里,讲解了一个统计输入单词个数的程序。不过这个过于复杂,用到了结构体、指针和二叉查找树,下面是一个轻量级的,很简单哟!阅读全文>

发表于 @ 2006年09月10日 15:51:00|评论(loading...)|编辑

原创 开放地址(Open Addressing)哈希表--算法导论示例

开放地址法是常用的一种处理哈希表冲突的方法,它又分为1、线形探测再散列。2、二次探测再散列。3、随机探测再散列法。等几种哈希映射方法。本文采用二次探测再散列法。算法导论240页。阅读全文>

发表于 @ 2006年09月10日 13:13:00|评论(loading...)|编辑

转载 “导师”李开复

李开复说:“影响力是我一生的价值,我要更多地帮助中国的青年,做最有影响力的事,这就是我的选择。”阅读全文>

发表于 @ 2006年09月10日 10:57:00|评论(loading...)|编辑

原创 链式哈希表(Hash Table)--算法导论示例

散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把 关键码值映射 ... 称这个对应关系f为哈希(Hash)函数,按这个思想建立的表为哈希表。阅读全文>

发表于 @ 2006年09月08日 16:21:00|评论(loading...)|编辑

原创 随机选择(Randomized Select)--算法导论示例

对一个没有排序的序列,我们常常需要找到排序后第几个元素是什么。可是排序会花费不少时间,下面介绍的随机选择算法可以高效的得到结果阅读全文>

发表于 @ 2006年09月05日 18:52:00|评论(loading...)|编辑

原创 求序列的最大值和最小值-算法导论示例

这种算法简单易懂,可是如果有n个记录的话,我们需要比较n-1次。如果同时求最大值和最小值,那就需要比较2n-2次。 下面介绍的算法,每次处理一对数据,那么2个数据我们只需要进行3次比较就可以找到最大值和最小值。当数据的个数为奇数时,需要3n/2次比较。为偶数时,需要3n/2-2次比较。详细的讲解见算法导论第184页。 阅读全文>

发表于 @ 2006年09月04日 19:25:00|评论(loading...)|编辑

原创 计数排序(Counting Sort)--算法导论示例

Counting sort is a sorting algorithm which (like bucket sort) takes advantage of knowing the range of the numbers in the array to be sorted (array A). It uses this range to create an array C of this length. Each index i in array C is then used to count how many elements in A that have a value less than i. The counts stored in C can then be used to put the elements in A into their right position in the resulting sorted array. 阅读全文>

发表于 @ 2006年09月03日 20:14:00|评论(loading...)|编辑

原创 快速排序--算法导论示例

算法导论英文版146页阅读全文>

发表于 @ 2006年09月01日 19:24:00|评论(loading...)|编辑

Csdn Blog version 3.1a
Copyright © 何东付