数据结构与算法(27): 图- 理论基础 发表于 2016-11-06 | 分类于 数据结构与算法 定义 一个图(graph)G=(V, E)由顶点(vertex)的集V和边(edge)的的集E组成。 无向图无向图所有的边都是不区分方向的。 有向图有向图所有的边都是有方向的。 邻接:顶点w和顶点v邻接当且仅当$(v, w) \in E$。 度:在无向图中,顶点的度是邻接到该顶点的边的数 ... 阅读全文 »
数据结构与算法(26): 散列 发表于 2016-11-04 | 分类于 数据结构与算法 散列是一种用于以常数平均时间执行插入、删除和查找的技术。 散列表(Hash Table)就是一种以键-值存储数据的结构。 使用哈希查找有两个步骤: 1. 使用散列函数将被查找的键转换为存储单元的索引。在理想的情况下,不同的键会被转换为不同的索引值,但是在有些情况下多个键被散 ... 阅读全文 »
数据结构与算法(25): 排序- 外部排序 发表于 2016-11-04 | 分类于 数据结构与算法 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然 ... 阅读全文 »
数据结构与算法(24): 排序- 桶排序 发表于 2016-11-04 | 分类于 数据结构与算法 桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。 假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的 ... 阅读全文 »
数据结构与算法(23): 排序- 快速排序 发表于 2016-11-04 | 分类于 数据结构与算法 快速排序的基本思想:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,以达到有序序列。 快速排序的每一轮处理其实就是将一轮的基准数归位。 ... 阅读全文 »
数据结构与算法(22): 排序- 归并排序 发表于 2016-11-03 | 分类于 数据结构与算法 归并排序的基本思想:将两个有序数列合并成一个有序数列,具体实现包括“从上往下”和“从下往上”2种方式。 时间复杂度:O($N\log{N}$)。 空间复杂度:O($N$)。(临时数组) 归并排序是稳定的。 从 ... 阅读全文 »
数据结构与算法(21): 排序- 堆排序 发表于 2016-11-03 | 分类于 数据结构与算法 堆排序是指利用堆这种数据结构所涉及的一种排序算法。最大堆通常被用来进行”升序”排序,而最小堆通常被用来进行”降序”排序。 最小堆进行降序的基本思想: 1. 初始化堆:将数据构造成最小堆。 2. 交换数据:将a[ ... 阅读全文 »
数据结构与算法(20): 排序- 希尔排序 发表于 2016-11-03 | 分类于 数据结构与算法 希尔排序是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩减增量排序,因DL.Shell于1959年提出而得名。 希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列 ... 阅读全文 »
数据结构与算法(19): 排序- 插入排序 发表于 2016-11-03 | 分类于 数据结构与算法 插入排序的基本思想:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。 时间复杂 ... 阅读全文 »
数据结构与算法(18): 排序- 选择排序 发表于 2016-11-03 | 分类于 数据结构与算法 选择排序的基本思想:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 时间复杂度:O($N^{2}$)。&e ... 阅读全文 »