算法导论
文章平均质量分 67
排序、堆栈、队列、二叉查找树、链表、散列表、动态规划、贪心算法、KMP、BMP、广度优先搜索、深度优先搜索、最小生成数、单源最短路径、每对顶点最短路径、最大流...
JJDiaries
JJ diaries-still-always-forever
展开
-
(十一)二叉查找树
一颗二叉查找树/*******************************************二叉查找树,支持的操作包括:SERACH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR、INSERT、DELETE。定理:对于一个高度为h的二叉查找树,操作SERACH、MINIMUM、MAXIMUM、PREDECESSOR、SUCCESSOR的运行时间均为原创 2013-11-20 08:28:59 · 1778 阅读 · 0 评论 -
(十)哈希表
利用链表法解决冲突的构建的一个hash表,最终的示意图如下图所示。下面的代码实现的功能为:将一个网址进行hash,并存放于hash表中。链表节点包含三个元素:1)存放指向存放网址的指针。2)该网址出现的次数。3)指向下一个节点的指针。/*******************************************=================JJ日记=========原创 2013-11-17 20:40:50 · 1376 阅读 · 0 评论 -
(九)双链表
/*******************************************双链表操作:list_serach list_insert list_delete 相关伪代码://在链表L中查找具有关键字k的元素xlist_search(L,k) x=head[L] while x != NIL and key[x]!=k do x <—— next[x] retur原创 2013-11-16 16:42:45 · 968 阅读 · 0 评论 -
(八)循环队列
/****************************************循环队列操作:用数组Q[0,n-1]来实现一个至多有n-1个元素的队列。队列的两个属性:head[Q] and tail[Q]head[Q]指向队列的头tail[Q]指向新元素将要被插入的地方。队列中各个元素的位置为:head[Q],head[Q]+1,...,tail[Q]-1.在最后一个位置要进行“原创 2013-11-16 14:31:50 · 1276 阅读 · 0 评论 -
(七)线性堆栈
/****************************************堆栈操作:用数组S[0,n-1]来实现一个至多有n个元素的栈。STACK_EMPYT(S) //判断栈是否为空 if top[S]=-1 then return ture else return falsePUSH(S,x) //将元素x压入栈中 if to原创 2013-11-16 14:31:15 · 1268 阅读 · 0 评论 -
(六)线性选择
/************************************************以期望线性时间做选择:返回数组A[p,r]中第i小的数算法通过分治递归划分,像快排那样,将数组划分成两边,然后根据情况,处理划分后的某一边,算法伪代码如下:select(A,p,r,i) if p=r then return A[p] q<——partion(A原创 2013-11-16 14:30:40 · 1311 阅读 · 0 评论 -
(五)使用最大堆实现优先级队列
/*******************************************利用最大堆实现最大优先级队列最大优先级支持的操作:1.insert(S,x) //将元素x插入集合S中2.maximum(S) //返回S中最大关键字的元素3.extract(S) //去掉并返回S中最大关键字的元素4.increase_key(S,x,k) //将元素x的关键字的值增加到k,原创 2013-11-16 14:29:58 · 1203 阅读 · 0 评论 -
(四)快速排序
/*****************************************快速排序伪代码:QUICK_SORT(A,p,r) if(p<r) then q <—— PARTITION(A,p,r) QUICK_SORT(A,p,q-1) QUICK_SORT(A,q+1,r)//核心函数,对数组A[p,原创 2013-11-16 14:29:18 · 1096 阅读 · 0 评论 -
(三)堆排序
/*******************************************堆排序,时间复杂度O(nlgn)伪代码:1.下标计算[为与程序对应,下标从0开始]Parent(i): return i/2Left(i): return 2*i+1Right(i): return 2*i+22.使下标i元素为根的的子树成为最大堆MAX_HEAPIFY(原创 2013-11-16 14:28:40 · 1016 阅读 · 0 评论 -
(二)合并排序
/*************************************分治策略:将原问题划分成n个规模较小而结构与原问题相似的子问题; 递归地解决这些子问题,然后再合并其结果,得到原问题的解。分治模式三部曲:分解、解决、合并。合并排序伪代码(使用哨兵):merge(A,p,q,r): n1 <—— q-p+1 n2 <—— r-q cre原创 2013-11-16 14:27:50 · 1075 阅读 · 0 评论 -
(一)插入排序
/*******************************************算法一:插入排序算法伪代码:insert_sort(A): for j <—— 1 to length[A]-1 do key <—— A[j] //insert A[j] into the sorted sequence A[1...j-1]原创 2013-11-16 14:27:02 · 1257 阅读 · 0 评论