Algorithm
文章平均质量分 80
hhygcy
这个作者很懒,什么都没留下…
展开
-
红黑树的C++实现
在实现之前网上浏览了一下,看到很多人都有自己的实现.主要的实现方式都是受了Introduction to Algorithm的影响.代码的结构和书中给出的伪码如出一辙,但是问题大都是1,没有深刻的理解FixUp和到底哪个节点需要. 2,忽略了Sentinel也就是哨兵节点的存在的意义.C/C++实现中的NULL在指代上还是出现了一点偏差.这里我们比较关心插入和删除操作(查询和普通的BST没有差别,原创 2009-01-04 23:05:00 · 2202 阅读 · 0 评论 -
贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
克鲁斯卡尔算法(Kruskals algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。 首先第一步,我们有一张图,有若干点和边如下图所示:第一步我们要做的事情就是将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心原创 2009-04-10 12:06:00 · 22827 阅读 · 1 评论 -
贪心算法(Greedy Algorithm)之霍夫曼编码(Huffman codes)
其实这个霍夫曼编码本身不是一个很难的技巧(也是霍夫曼在期末考试的过程中想出来的方案:)),因为中间用到了贪心的思想,所以也在这里列举了出来。这个问题本身在计算机系的很多教材上都出现过。这里权且记录下来。霍夫曼的编码是这样的。假设我有一组带压缩的文本,里面各个字符出现的频率不同,现在需要对他们进行压缩。比如 假设我们有100,000个字符的文本.最直观的压缩办法就是原来每个字符要8个原创 2009-03-19 13:41:00 · 4534 阅读 · 1 评论 -
贪心算法(Greedy Algorithm)之活动选择问题(Activity-Selection Problem)
活动选择问题是《算法导论》里面关于贪心算法的第一个问题。这个问题是这样的。我们有一组活动,每个活动都有一个开始时间Si和结束时间Fi。如下图:每个活动都共享同一个公共的资源(比如教室等)所以同一时间只能有一个活动。现在的问题就是要在指定的时间内让举办的活动数量做大。这个问题是贪心算法一个典型的应用。说到贪心,贪心基本解决问题的方案就是 #1.尽可能在局部找到一个最优的解 #2然原创 2009-03-18 13:39:00 · 15860 阅读 · 1 评论 -
动态规划 (Dynamic Programming) 之 背包问题合辑 (Knapsack, Subset Sum, Partition and change making problem )
背包问题一直是动态规划中的经典问题。这个问题又分成01背包,完全背包,多重背包,分组背包等等。。我在这里只记录下01背包(0-1knapsack)和完全背包(unbounded knapsack)。背包问题的简单描述就是有一个背包和一堆物品。每个物品有自己的大小和价值。我们希望在一个特定容量的背包中放入价值尽可能大的物品。01背包呢就是每个物品最多只能放一次,也就是要么放要么不放,所以被称为01背原创 2009-03-04 11:02:00 · 17958 阅读 · 9 评论 -
动态规划 (Dynamic Programming) 之 最长递增子序列(Longest Increase Subsequence)
既然已经说到了最长公共子序列,就把这个递增子序列也说了。同样的,这里subsequence表明了这样的子序列不要求是连续的。比如说有子序列{1, 9, 3, 8, 11, 4, 5, 6, 4, 19, 7, 1, 7 }这样一个字符串的的最长递增子序列就是{1,3,4,5,6,7}或者{1,3,4,5,6,19}。其实这个问题和前面的最长公共子序列问题还是有一定的关联的。假设我们的初始的序列原创 2009-03-02 16:43:00 · 15073 阅读 · 5 评论 -
动态规划 (Dynamic Programming) 之 最长公共子序列(Longest Common Subsequence)
这个问题也是算法导论上提过的问题。注意这个问题是Subsequence不是Substring。substring的话就是子串,子串的要求的连续相等的字符序列,而subsequence不要求连续。比如说ABCD和ABD。他们的longest common subsequence就是ABD。而Longest common substring就是AB。这个问题和Edit Distance是同样的一类原创 2009-03-02 11:20:00 · 13572 阅读 · 3 评论 -
动态规划 (Dynamic Programming) 之 矩阵链乘法(Matrix Chain Multiplication)
这个问题是动态规划的基础的问题,也是算法导论中讨论过的问题。在这里先简单描述一下。假定有一组矩阵需要做乘法操作。但是我们知道首先矩阵乘法满足了结合律。所以可以按照不同的顺序做乘法。而且不同顺序做乘法最后的乘法次数是不同的。比如〈A1, A2, A3〉分别是10 × 100, 100 × 5, 和 5 × 50。如果按照((A1 A2) A3)的顺序来计算,就是7500次,但是如果(A1 (A2原创 2009-02-27 15:36:00 · 14545 阅读 · 0 评论 -
AVL树的实现
在做排序汇总的时候顺带做了一下AVL树的实现,毕竟这个实现了之后的也可以用作排序的用处(中序遍历)。下面就简单的说说这个实现。其实AVL树较之不平衡的二叉查找树的区别或者说困难就在于插入和删除的操作,这里需要的平衡化过程相对比较复杂。首先,我们先来看看一些图例来理解一下旋转,这是一个简单的右旋。注意这一类的图中的Pivot都是旋转的枢纽。简单的说, 假定我们这里的ABCD都是空,那当我们插入2这个原创 2008-12-04 12:47:00 · 4897 阅读 · 0 评论 -
Binary Index Tree And Segment Tree for PKU #3378 Crazy Thairs
Crazy ThairsTime Limit: 3000MSMemory Limit: 65536KTotal Submissions: 3111Accepted: 699DescriptionThese days, Sempr is crazed on one problem named Crazy Thair. G原创 2009-01-18 23:55:00 · 1600 阅读 · 0 评论 -
一些排序算法的汇总
Normal 0 false false false MicrosoftInternetExplorer4 <!-- /* Font Definitions */ @font-face {font-family:Wingdi原创 2008-11-19 16:11:00 · 2136 阅读 · 1 评论