Chen Yuanshen的专栏

上善若水,水滴穿石。

排序:
默认
按更新时间
按访问量

红黑树

介绍另一种平衡二叉树:红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas 和Robert Sedgewick改成一个比较摩登的名字:红...

2016-06-08 09:31:30

阅读数:325

评论数:0

快速排序

1. 快速排序概述 1)  分而治之(就想到递归) 快速排序也是一种交换排序的一种,但和冒泡排序不同的是,冒泡排序只比较相邻两个记录的顺序,而快速排序的原理是:冒泡排序只比较相邻两个记录的顺序,而快速排序的原理:将未排序元素根据基准分为两个子序列,其中一个子序列的记录均大于基准,而另一个子序列均小...

2016-04-23 16:16:04

阅读数:304

评论数:0

归并排序非递归实现

1. 归并排序非递归概述: 2. 算法 void Merge_pass(ElementType A[], ElementType TmpA[], int N, int length)/*length = 当前有序子列的长度*/ { for( i = 0; i <= N - 2 ...

2016-04-23 10:54:19

阅读数:329

评论数:0

归并排序(递归)

1. 归并排序 归并排序核心:有序子列的归并 归并排序是建立在归并操作基础上的一种排序。归并操作,是指将两个已排序的子序列合并成一个有序序列的过程。 归并排序的基本原理:将大小为N的序列看成N个长度为的子序列,姐下来将相邻子序列两两进行归并操作,形成[N/2]个长度为2(或1)的有序子序列,然后在...

2016-04-23 09:39:42

阅读数:279

评论数:0

堆及其操作

1. 背景: 队列,他的一个基本特征是“先进先出”或者说是“先来先服务”,队列中的任何原始都没特权,前面的元素未被处理完,后面的元素只能等待。 但在现实世界中,许多情况需要有特权。例如:有许多客户在一个打印店排队等待打印资料,某一个客户需要打印数百张的一本书,而排在他后面的客户只需打印两页的一份简...

2016-04-22 18:08:20

阅读数:234

评论数:0

堆排序

1.概述: 堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆是一种特殊的二叉树,每个子结点的值总是小于(或大于)它的父结点,相应地分为最大堆和最小堆。由于对是一棵完全二叉树,一般情况下堆排序都是用数组方式来实现。 堆排序的核心思想:利用最大堆(或者最小堆)输出堆顶元素,即最大值(或最小值),...

2016-04-22 12:01:28

阅读数:1138

评论数:0

选择排序

1. 概述 简单选择排序:是一种直观的排序算法,其思想是:在未排序的序列中选出最小的元素和序列的首位元素交换,接下来在剩下的未排序序列中在选出最小元素与序列的第二位元素交换,以此类推,最后形成从小到大的已排序序列。 2. 代码: void SelectionSort(ElementType A[]...

2016-04-22 11:06:45

阅读数:229

评论数:0

希尔排序

1. 概述 简单插入排序效率不高的一个重要原因是每次只交换相邻的两个元素,这样只能消去一对错位的元素。希尔排序对插入排序进行改进,试图通过每次交换相隔一定距离的元素,达到排序效率上的提升。 希尔排序的基本原理是,将待排序的一组元素按一定间隔分为若干个序列,分别进行插入排序。开始时设置的“间隔”...

2016-04-22 10:46:38

阅读数:577

评论数:0

插入排序和时间复杂度下界

1. 核心思想: 将待排序的一组序列分为已排好序的和未排序的两部分;初始状态时,已排序序列仅包含第一个元素,未排序序列中的元素为除第一个元素以外的N - 1个元素,伺候将未排序序列中的元素逐一插入到已排序的序列中。如此往复,经过N - 1次插入后,未排序列中元素个数为0,则排序完成。 2. 性能:...

2016-04-21 15:29:26

阅读数:596

评论数:0

冒泡排序

1. 冒泡排序的概述(从小到大依次排序): 从上到下依次比较两个相邻的泡泡,如果小的在上,大的在下,则不动,如果打的在上,小的在下,就把这两个泡泡的顺序换一下,接着往下走,直到底部。这样就完成一趟排序。完成一趟排序,最大的泡泡一定在最下面。接下来的排序,只要对N - 1个数据进行排序。 2. 性...

2016-04-21 14:41:49

阅读数:199

评论数:0

拓扑排序

1. 例:计算机专业排课: 2. 概况 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足次条件的顶点序列成为一个拓扑序。 获得一个拓扑序的过程就是拓扑排序 AOV如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph, DAG)

2016-04-06 11:48:22

阅读数:250

评论数:0

集合及运算(并查集)

1. 集合表示: 集合运算:交、并、补、差,判定一个元素是否属于某一集合 并查集:集合并、查某元素属于什么集合 并查集问题中集合存储如何实现? 可以用树结构表示集合,树的每个节点代表一个集合元素 例子:有10台电脑{1, 2, 3,...,9, 10},已知下列电脑之间已经实现了连接: 1和2、...

2016-04-06 10:32:17

阅读数:816

评论数:0

经典背包问题 01背包+完全背包+多重背包

01 背包 有n 种不同的物品,每个物品有两个属性,size 体积,value 价值,现在给一个容量为 w 的背包,问最多可带走多少价值的物品。   [cpp] view plain copy   int f[w+1];   //f[x]...

2016-04-06 09:55:57

阅读数:297

评论数:0

STL之set集合容器

set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键值,而小于右子树所有节点的键值;另外,还得确保根节点的左子树的高度与有字数的高度相等,这样,二叉树...

2016-04-06 09:29:09

阅读数:252

评论数:0

最小生成树(Minimum Spanning Tree)(Kruskal算法)

1. Kruskal算法-将森林合并成树: 2. Kruskal伪码: void Kruskal(Graph G) { MST = {}; while(MST中不到|V| - 1条边 && E中还有边) { 从E中取一条权重最小的边E(v,w); /*最小堆*/ ...

2016-04-05 12:01:35

阅读数:485

评论数:0

最小生成树(Minimum Spanning Tree)(Prim算法)

1. 什么是最小生成树(Minimum Spanning Tree) 2. 贪心算法: 1) 什么是“贪”:每一步都要最好的 2) 什么是“好”:权重最小的边 3) 需要约束:      a) 只能用图里有的边      b) 只能正好用掉|v| - 1条边      c)  不能有回路 3....

2016-04-05 11:21:30

阅读数:1176

评论数:0

多源最短路算法

1. 方法: 2. Floyd算法: void Floyd() { for(i = 0; i < N; i++) { for(j = 0; j <N; j++) { D[i][j] = G[i][j]; path[i][j] = -1; ...

2016-04-05 10:05:51

阅读数:1604

评论数:0

遍历二叉树的应用

1. 输出二叉树中的叶子结点: 在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”。 v

2016-04-02 16:54:49

阅读数:1026

评论数:0

树的层次遍历

1. 概述: 二叉树遍历的核心问题:二维结构的线性化 2. 层次遍历: 1) 队列实现:遍历从根节点开始, 首先将根结点入队,然后开始执行循环:结点出队、访问该结点、其左右儿子入队。 3. 层序基本过程:先根结点入队,然后: 1) 从队列中取出一个元素; 2) 访问该元素所指结...

2016-04-02 11:47:07

阅读数:340

评论数:0

树的非递归遍历

1. 概述: 1) 线序、中序和后序遍历过程:遍历过程中经过结点的路线一样,只是访问各结点的时机不同。 2) 非递归算法实现的基本思路:使用堆栈 3) 如图: 2. 中序遍历非递归遍历算法: 1) 遇到一个结点,就把他压栈,病区遍历他的左子树; 2) 当左子树遍历结束后,从栈顶...

2016-04-02 11:12:24

阅读数:330

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭