
Algorithm & Data Structure
文章平均质量分 69
Bai_Yuanyong
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Perl KMP 算法
了解了一下KMP 算法,自己尝试实现,也比较简单,具体原理参考google baidu,不再重复,这里只作为一个学习的纪录。 use Data::Dumper; my $from = 'abababd ababc'; my $find = 'ababc'; # 分隔字符串为array my @from = split '', $from; my @find = split '', $fi原创 2012-07-11 14:55:43 · 1084 阅读 · 0 评论 -
字符串循环移位
看到一个练习,判断两个相同长度字符串其中一个是否是另外一个循环移位的结果,思路是把其中一个字符串连接自身,用KMP算法判断另外一个是否是这个字符串的字串。 示例: a: “this testing” b: ”ingthis test“ 判断a 是否是“ingthis testing this test” 的子串即可。 由此反向想到另外一个需求,字符串循环移位。思路是把此字符串连接原创 2012-07-24 21:47:46 · 1754 阅读 · 1 评论 -
Perl 前缀树实现
前缀树,用来处理大量字符串的查找、排序,也称为字典树,可以代替hash table。 http://en.wikipedia.org/wiki/Trie 以下翻译自Wikipedia: The following are the main advantages of tries over binary search trees (BSTs): Looking up keys原创 2012-07-22 02:17:15 · 2686 阅读 · 1 评论 -
Python 快排
上一篇文章用Perl 实现了快排,这里用Python 实现。 不同点: Perl 传递列表slice 实际上还指向父列表相同的元素,这是由Perl 本身的数据结构所决定的。而Python 传递slice 则是一个新的列表,所以参数传递稍有不同。 一个例子说明Perl传参的不同: sub test{ $_[2] = 'testing'; } @x = (1..10); t原创 2012-07-18 15:30:22 · 2188 阅读 · 0 评论 -
Perl 快排
看了下算法导论中的快排,实现方法不太一样,重新练习一下。 如图为比较过程中的移动: 代码: # 递归 sub qsort2 { return () unless @_; ( qsort( grep { $_ < $_[0] } @_[ 1 .. $#_ ] ), $_[0], qsort( grep { $_ >= $_[原创 2012-07-18 12:51:03 · 1096 阅读 · 0 评论 -
Perl 判断一个字符串中所有字符是否在另外一个字符串中出现
在酷壳 – CoolShell.cn 中看到一个文章,判断一个字符串中的所有字符是否在另外一个字符串中出现,如果用循环的话时间复杂度是O(mxn),如果使用先排序后判断时间复杂度是O(mlgm)+O(nlgn)+O(m),作者面试的时候考官给出的一个思路是每个字符给一个素数,所有的树相乘,再用这个数去除另外一个字串中字符对应的数,余数为0的话则包含在第一个字串中,时间复杂度为O(m+n),思考了以原创 2012-07-15 15:44:03 · 4969 阅读 · 0 评论 -
Perl implement Tree data structure (1)
用perl实现了Tree的数据结构,使用Class::Struct来实现,以下为代码: use Data::Dumper; use Class::Struct; struct Node =>{ left => 'Node', value => '$', right => 'Node', }; $root = Node->new; add($r原创 2010-12-18 03:14:00 · 1018 阅读 · 0 评论 -
Perl 二叉搜索树
用Perl 的一般方式实现了一个完整的二叉搜索树,有如下功能: 1. 插入,删除,搜索 2. 最大,最小值 3. 某节点的前序节点,后序节点 整个过程中更改了好几次: 1. 增加了parent 属性,可以方便的找到父节点,有利于前序后序节点的查找。 2. 最初节点不是都有left right 属性,只有在有子节点的情况下才出现,后来为了统一所有节点都加上这些属性,没有子节点的情原创 2012-07-04 23:54:54 · 1227 阅读 · 0 评论 -
Perl 堆排序
看了算法导论堆排序,用Perl 实现一下,具体原理不解释,做个记录。 代码: @a = map {int(rand 100)} 1..20; sub build_heap{ my $length = $#_; for(my $i = $length>>1; $i >= 0; $i--){ heapnify(\@_, $length, $i);原创 2012-07-15 20:38:53 · 1407 阅读 · 1 评论 -
Perl implement Tree data structure (2)
之前用struct实现的Tree不够灵活,重新使用hash来实现,更加灵活而且可以更改节点,进而实现平衡二叉树。 以下为程序代码: use Data::Dumper; my $tree = {}; add($tree,$_) for (5,7,1,4,9,6,0,9,100,20,30,21,60); print Dumper $tree; LMR($tree,$tre原创 2010-12-18 04:23:00 · 1492 阅读 · 0 评论 -
Perl 闭包模拟类实现二叉树
在上一篇文章中用函数方式实现了一个二叉树,本篇用闭包模拟类的方式来重新实现,不同于传统意义的Perl 类,否则也不用去费力重新实现,本篇用闭包来模拟类的一些行为,以消息传递的方式调用方法。 功能同上一个版本的基本一样,是用闭包的好处: 1。 模拟类行为,开放类方法 2。 内部变量不可直接修改,只能通过方法调用获取或修改值 3。 消息类型多样,自己可以随便控制 特点: 1原创 2012-07-05 15:39:14 · 1683 阅读 · 0 评论 -
Perl 前缀树实现(2)
在前一篇 Perl 前缀树实现 中用hash table的方法实现了前缀树,算法导论中用数组来实现,方法基本相同,下边用链表的方法来实现,遍历算法可以用到其他树结构遍历。 代码: use Data::Dumper; # 默认只支持字符串的输入 sub trie_tree{ my $root = { char=>undef, next=>undef,原创 2012-07-26 22:39:51 · 1341 阅读 · 0 评论