数据结构与算法
舒大飞
南朝四百八十寺,多少楼台烟雨中
展开
-
字符串匹配算法--KMP算法
前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲。今天我在这里讲一讲我的一些理解,希望大家多多指教,如果有不清楚的或错误的请给转载 2016-05-28 11:55:23 · 291 阅读 · 0 评论 -
交换排序之--冒泡排序,快速排序
冒泡排序是一种很经典的排序方式了,当然他也是最简单的一种交换式排序,冒泡排序的思想很简单,从前面开始,每每两个数相比,如果前面的大于后面的则交换位置,知道最后一个数,这样一轮排序下来,最大的数就跑到了最后面,如此往复,知道全部有序。 当然上面是最简单的冒泡排序,他显然有一个很大的缺点,就是做了很多的重复劳动,当我们开始排序的时候,实际上整个数列就可以分成有序区和无序区,而根据冒泡排原创 2016-05-17 18:57:22 · 782 阅读 · 0 评论 -
插入排序之--直接插入排序,希尔排序
直接插入排序是插入排序里最简单的一种,他的排序方式十分直接,就是从拿无序区的第一个数开始与有序区的最后一个数往前开始比,如果比他大,则直接插入在他后面,如果比他小,则继续往前比,直到找到合适的地方插入。如此往复,最终实现全部有序。 虽然直接插入排序是一种比较简单直接的排序,但是他仍然有可以优化的地方,我们可以把数组的第一个位置让出,固定用来放待排序的那个数,这样r[0]的位置相当于原创 2016-05-17 14:05:45 · 338 阅读 · 0 评论 -
选择排序之--简单选择排序,堆排序
简单选择排序的思想很简单:每次从无序区里选出一个最小的的数,然后把他放进有序区的末尾,如此往复,直到全部有序。 堆排序,堆排序是对简单选择排序的一种改进,显然简单选择排序,要经过大量的比较的出最小的数,而堆排序的着眼点就在于减少比较的次数,那么如何来实现减少比较次数呢,是的,很自然的想到二叉树,下面说一下堆排序的基本思想。 堆排序的基本思想: 先说一下堆的概念:即一完全原创 2016-05-17 20:36:31 · 463 阅读 · 0 评论 -
分配排序之--桶排序,基数排序
桶排序的思想:其实就是先分配在收集的这个一个过程。比如开一个数组,然后把待排序数列里比如1就放到数组位置1,3就放到数组位置3,然后把这个数组里按顺序输出,则这个数列就变成有序了。 基数排序,上面的桶排序是对单关键码进行排序,显然当排序的数大了以后,比如出现数字10000,不可能给他开个10000的数组,对内存资源浪费也十分严重,那么基数排序就是优化了这一问题,即他是对多关键码进行原创 2016-05-17 20:49:18 · 530 阅读 · 0 评论