代码改变世界

随笔分类 - 算法研究

每周一算法之六——KMP字符串匹配算法

2012-06-11 20:23 by 贼寇在何方, 2247 阅读, 收藏, 编辑
摘要:KMP是一种著名的字符串模式匹配算法,它的名称来自三个发明人的名字。这个算法的一个特点就是,在匹配时,主串的指针不用回溯,整个匹配过程中,只需要对主串扫描一遍就可以了。因此适合对大字符串进行匹配。搜了网上很多KMP的代码下来调试,发现不是下标越界,就是死循环的,相当诡异...最后重新拿起严老师那本《数据结构》来翻,各种费解,有个地方用下标值和字符串下标0的元素做判断,更是诡异了...过了一天,忽然觉悟了。网上这些代码都是来自《数据结构》或者和他同源的版本的,而它使用的是以下标1为起始的字符串!对这种字符串组织格式,下标0存放的是字符串的长度。可是如今主流的语言,几乎都是用的下标0作为起始,书本 阅读全文

每周一算法之五——选择排序

2011-12-14 23:09 by 贼寇在何方, 151 阅读, 收藏, 编辑
摘要:选择排序,也是我最早学会的排序方法,原理相当简单:每次循环把最小的挑出来放到最前面 从前,一般在写代码的时候,没有现成的排序函数可用时,就用它了 选择排序时间复杂度O(n2),一般也就比冒泡快一点 阅读全文

每周一算法之四——归并排序

2011-12-13 23:20 by 贼寇在何方, 113 阅读, 收藏, 编辑
摘要:归并排序,就是把两个有序序列合并成一个新的有序序列的算法。 也不复杂,用两个指针从前往后遍历两个序列,每次把小的那个元素取出来放到新的序列当中,取完了就Ok啦。 纠结的是临界条件的判断,得想想明白,哈哈。 阅读全文

每周一算法之三——插入排序

2011-12-12 23:20 by 贼寇在何方, 162 阅读, 收藏, 编辑
摘要:插入排序是这么回事儿:构建有序序列,把未排序的元素插入到有序序列的合适位置。 原理也很简单啦,步骤一般是这样的(摘自维基百科) 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 阅读全文

每周一算法之二——鸡尾酒排序

2011-12-11 23:10 by 贼寇在何方, 194 阅读, 收藏, 编辑
摘要:今儿兴致好,再上一个排序。 鸡尾酒排序,又称定向冒泡排序。冒泡排序的每一次冒泡都是从前往后,而鸡尾酒排序是从前往后与从后往前交替进行的。鸡尾酒排序效率稍好与冒泡排序。 时间复杂O(n2),与冒泡排序一样,适用于基本有序的序列。 阅读全文

每周一算法之一——冒泡排序算法

2011-12-11 22:30 by 贼寇在何方, 180 阅读, 收藏, 编辑
摘要:今儿刚把Notepad++与Visual C++ Compiler的环境配好(其实也就是几个命令的事儿),随便写了个算法,编译通过啦! 打算以后每周至少练习一个算法。 冒泡排序就是一个相当普通的排序算法,写这儿的象征意义大于实际意义。 不用多解释了,直接贴代码: 阅读全文