数据结构
mengrennwpu
这个作者很懒,什么都没留下…
展开
-
算法导论之二归并排序法
分治法的思想是将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。归并排序算法完全遵循分治模式,操作步骤如下:分解:将待排序的n个元素的序列分解为分别具有n/2个元素的两个子序列。解决:使用归并排序递归地排序两个子序列。合并:合并两个已排序的子序列以产生已排序的原序列。“合并”操作中通过调用一个辅助过程MERGE(A原创 2014-09-01 22:27:28 · 558 阅读 · 0 评论 -
算法导论之六栈与队列
1.在栈中,被删除的是最近插入的元素,其实现的是后进先出(LIFO)策略,在队列中,删除的是在集合中存在时间最长的那个元素,其实现的是先进先出(FIFO)策略。2.可用一个数组来实现最多容纳个元素的栈,其中有一个属性,指向最新插入的元素,如果试图对一个空栈执行弹出操作,则称栈下溢,如果超过了,则称栈上溢。3.几种栈操作的伪代码: STACK_EMPTY(S)原创 2014-09-01 22:34:17 · 522 阅读 · 0 评论 -
算法导论之七快速排序
1. 快速排序也采用了分治思想,下面是对子数组A[p..r]进行快速排序的三步分治过程:分解:数组A[p..r]被划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中的每一个元素。其中,计算下标q也是划分过程的一部分。解决:通过递归调用快速排序,对子数组A[原创 2014-09-01 22:37:47 · 579 阅读 · 0 评论 -
算法导论之八计数排序
1. 定理1:在最坏情况下,任何比较排序算法都需要做 定理2:堆排序和归并排序都是渐近最优的比较排序算法。2. 计数排序的思想是:对每一个输入元素x,确定小于x的个数,前提条件时假设n个输入元素中的每一个都是在0到k区间内的一个整数。3. 计数排序算法的输入是数组A[1..n],Alength=n,数组B[1..n]存放排序的输出,C[0..k原创 2014-09-01 22:39:14 · 564 阅读 · 0 评论 -
算法导论之九链表
1. 与数组不同,链表的顺序是由各个对象里的指针决定的。双向链表L的每一个元素都是一个对象,每个对象有一个关键字key和两个指针next和prev。设x为链表的一个元素,x.next指向的它在链表中的后继元素,x.prev指向它的前驱元素。如果x.prev=NIL,则元素x是链表的头,若x.next=NIL,则x是链表的尾。若L.head=NIL,则链表为空。2. 循环链表原创 2014-09-01 22:40:02 · 566 阅读 · 0 评论 -
算法导论之三最大子数组问题
最大子数组是数组A的和最大的非空连续子数组。只有当数组中包含负数时,最大子数组问题才有意义。注意将实际问题转化为数学问题!使用分治策略的求解方法:为寻找A[low..high]的最大子数组,其中央位置记为mid,然后考虑求解两个子数组A[low..mid]和A[mid+1..high]。A[low..high]的任何子数组A[i..j]所处的位置必然是以下三种情况之一:1. 完全位于子原创 2014-09-01 22:30:46 · 653 阅读 · 0 评论 -
算法导论之四矩阵乘法的Strassen算法
实现Strassen矩阵相乘的C++代码如下:#include using namespace std;const int N=4; //常量N用来定义矩阵的大小void main(){ //函数声明部分 voidstrassen(int n,float A[][N],float B[][N],float C[][N]);原创 2014-09-01 22:31:56 · 1257 阅读 · 0 评论 -
算法导论之五堆排序
堆排序的时间复杂度是,与插入排序相似,堆也具有空间原址性,即任何时候都只需要常数个额外的元素空间存储临时数据。1. 堆简介:(1)堆是一个数组,表示堆的数组A包括两个属性:A.length表示数组元素的个数,A.heap-size表示有多少个堆元素存储在该数组中。给定一结点的下标i,可以得到其父结点、左孩子和右孩子的下标:PARENT(i)return原创 2014-09-01 22:34:58 · 651 阅读 · 0 评论 -
算法导论之一插入排序
插入排序,对于少量元素的排序,是一个有效的算法。将其伪代码过程命名为INSERTION-SORT,其中的参数是一个数组A[1..n],包含长度为n的要排序的一个序列。伪代码如下:INSERTION-SORT(A)for j = 2 to A.length key = A[j] // Insert A[j] into thesorted sequence A[1..j -原创 2014-09-01 22:28:45 · 547 阅读 · 0 评论