随笔分类 -  数据结构

摘要:KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来把这个算法的一些细节梳理清楚,也算是考验一下自己有真正理解这个算法。什么是KMP算法:KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!!KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问 阅读全文
posted @ 2013-08-17 08:49 孤~影 阅读(351744) 评论(88) 推荐(194) 编辑
摘要:堆排序(Heap):要讲堆排序之前先要来复习一下完全二叉树的知识。定义:对一棵具有n个结点的二叉树按层序编号,如果编号为i(0 = 0; i--) { adjust(array, i, array.length); }} private static void adjust(int[] array, int n, int size) { int temp = array[n]; // 先拿出数据 int child = n * 2 + 1; // 这个是左孩子 while (child array[child]) { child++; ... 阅读全文
posted @ 2013-08-15 08:42 孤~影 阅读(3494) 评论(6) 推荐(5) 编辑
摘要:归并排序(Merge Sort):归并排序是一个相当“稳定”的算法对于其它排序算法,比如希尔排序,快速排序和堆排序而言,这些算法有所谓的最好与最坏情况。而归并排序的时间复杂度是固定的,它是怎么做到的?两个有序数组的合并:首先来看归并排序要解决的第一个问题:两个有序的数组怎样合成一个新的有序数组:比如数组1{ 3,5,7,8 }数组2为{ 1,4,9,10 }:首先那肯定是创建一个长度为8的新数组咯,然后就是分别从左到右比较两个数组中哪一个值比较小,然后复制进新的数组中:比如我们这个例子:{ 3,5,7,8 } { 1,4,9,10 } { }一开始新数组是空的。然后两个指针分别指向第一个元素, 阅读全文
posted @ 2013-08-14 10:56 孤~影 阅读(2955) 评论(5) 推荐(4) 编辑
摘要:今天花了点时间把七个常见的内部排序重新复习了一遍,总结一下,也算是验证一下自己有没有真正理解。冒泡排序(Bubble Sort):很多人听到排序第一个想到的应该就是冒泡排序了。也确实,冒泡排序的想法非常的简单:大的东西沉底,汽泡上升。基于这种思想,我们可以获得第一个版本的冒泡:public static void sort1(int[] array) { for (int i = 0; i array[j]) { // 进行两元素之间的位置交换 int temp = array[j - 1]; array[j... 阅读全文
posted @ 2013-08-13 22:07 孤~影 阅读(2320) 评论(6) 推荐(5) 编辑
摘要:线性表(List):零个或多个数据元素的有限序列。关键字有两个: “零个”也就是说线性表是可以为空的; “有限序列”不管多长的线性表,总要有一个最大长度,并且元素与元素之间是一对一的关系,也即有一定的顺序。在Java中有一个很“神奇的”类,就是ArrayList。它神奇的地方在于它使用起来和数组一样简单,但却提供了更多更方便的方法。感觉上ArrayList是可以无限添加元素的!这一点太方便了,它是怎么做到的呢?其实,ArrayList是底层就是用数组来实现的!但是上次不是才说数组的长度是不能变的吗?实际上,它可以实现“无限的”添加元素只是因为它的底层有一个机制,在数组空元素用完的时候会生成.. 阅读全文
posted @ 2013-07-09 08:39 孤~影 阅读(2380) 评论(0) 推荐(0) 编辑
摘要:不知不觉大学过了三年,最遗憾的就是在大二没把《数据结构》和《算法》这两门课程学好~~~现在每天花一点时间把这两个内容回顾一下,算是给自己的一点目标吧!数组(Array):数组算是最简单的也是最基本的结构之一。在Java中,我们声明一个数组有两种形式:int[] array = { 1, 2, 3 };或int array[] = { 1, 2, 3 };这两种形式都是可以的,但推荐第一种,为什么呢?首先,int[]和int是两种完全不同的类型!int是原生数据类型(Primitive Data Type)而int[]是引用数据类型(Reference Type)。比如像上面的array,它是有 阅读全文
posted @ 2013-07-08 13:15 孤~影 阅读(1641) 评论(1) 推荐(3) 编辑
摘要:计算机解决问题的步骤:从具体问题抽象出数学模型设计一个求解此数学模型的算法编写程序,进行测试、调度,直到解决问题数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。数据(Data):是客观事物的符号表示,是所有能输入到计算机并被计算机程序处理的符号的总称。数据元素(Data Element):是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。(有时也被称为元素、结点、记录等)数据项(Data Item):是组成数据元素的、有独立含义的、不可分割的最小单位。数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。数 阅读全文
posted @ 2013-05-20 15:15 孤~影 阅读(615) 评论(0) 推荐(0) 编辑