![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
文章平均质量分 73
ZinanJau
这个作者很懒,什么都没留下…
展开
-
堆积排序(HeapSort) - 改良的选择排序
说明选择排序法的概念简单,每次从未排序部份选一最小值,插入已排序部份的后端,其时间主要花费于在整个未排序部份寻找最小值,如果能让搜寻最小值的方式加 快,选择排序法的速率也就可以加快,Heap排序法让搜寻的路径由树根至最后一个树叶,而不是整个未排序部份,因而称之为改良的选择排序法。方法Heap排序法使用Heap Tree(堆积树),树是一种数据结构,而堆积树是一个二元树,也就是每一个转载 2011-08-12 17:19:59 · 1308 阅读 · 0 评论 -
利用栈将 (中缀表达式) 转换成 (后缀表达式)
目的:将中缀表达式(即标准形式的表达式)转换为后缀式。例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+ 转换原则:1.当读到一个操作数时,立即将它放到输出中。操作符则不立即输出,放入栈中。遇到左圆括号也推入栈中。2.如果遇到一个右括号,那么就将栈元素弹出,将符号写出直到遇到一个对应的左括号。但是这个左括号只被弹出,并不输出。转载 2012-09-03 18:54:28 · 5797 阅读 · 0 评论 -
算法导论 Exercises 22.5
Exercises 22.5 (22.5-1, 22.5-2, 22.5-3, 22.5-4, 22.5-5, 22.5-6, 22.5-7) - 算法导论.英文第3版 最近看书的同时, 感觉某些练习缺少参考, 所以按部分总结了自己的解答, 也能够强化学习过程. 如有不足或疑问, 欢迎指正. Exercises 22.5-1How can the nu原创 2013-08-06 14:41:09 · 5684 阅读 · 0 评论 -
算法导论 Exercises 23.1
Exercises 23.1 - 算法导论.英文第3版 如有不足或疑问, 欢迎指正. Exercises 23.1-1Let (u, v) be a minimum-weight edge in a connected graph G. Show that (u, v) belongs to some minimum spanning tree of G.原创 2013-09-27 13:56:41 · 12437 阅读 · 0 评论 -
欧拉路径, 欧拉回路 USACO Riding the Fences
概念欧拉回路:从图的某一个顶点出发,图中每条边走且仅走一次,最后回到出发点。如果这样的回路存在,则称之为欧拉回路。欧拉路径:从图的某一个顶点出发,图中每条边走且仅走一次,最后到达某一个点。如果这样的路径存在,则称之为欧拉路径。无向图, 欧拉回路存在条件:所有顶点的度数均为偶数。无向图, 欧拉路径存在条件:至多有两个顶点的度数为奇数,其他顶点的度数均为偶数。有向图, 欧拉回路转载 2013-08-29 18:35:22 · 1795 阅读 · 0 评论 -
选择、插入、冒泡排序(Selection,Insertion,Bubble)
说明选择排序(Selection sort)、插入排序(Insertion sort)与冒泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用(平均与最快的时间复杂度都是O(n2)),然而它们排序的方式确是值得观察与探讨的。方法选择排序将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份转载 2011-11-08 20:33:26 · 2354 阅读 · 0 评论 -
查找有向图中 Universal Sink
问题算法导论 (英文第三版) 22.1-6 看到该问题:"以邻接矩阵表示的图的多数算法, 时间需求都是O(V2),但有一些例外,查找有向图中是否存在 Universal Sink(顶点入度|V|-1, 出度0), 时间需求是O(V)."int i = 1;int j = 1;while (j <= n){ if (G(i, j)) i++; else j++原创 2013-04-03 17:58:39 · 1932 阅读 · 0 评论 -
有向无环图中, 两点间的简单路径数
问题算法导论 (英文第三版) 22.4-2已知有向无环图 G = (V, E) 和两点 s, t. 给出一个线性时间的算法, 返回在 G 中 s 到 t 的简单路径数. 例如下图 (算法导论 Figure 22.8), 该有向无环图存在4条简单路径从点 p 到 点 v : po, pory, posry 和 psry.分析可以考虑深度优先遍历, 从原创 2013-05-23 17:19:20 · 9942 阅读 · 2 评论 -
无向图判断是否存在环
问题算法导论 (英文第三版) 22.4-3 给出算法判断已知无向图 G = (V, E) 是否存在环. 算法运行时间要求为 O(V), 独立于 |E|.此题关键是算法时间, 判断是否存在环相对简单.分析当DFS(深度优先遍历)时, 如果没有向后边(Back Edge), 则无向图无环.(1) 如果含有向后边, 则无向图存在环.转载 2013-05-28 17:57:22 · 3688 阅读 · 0 评论 -
图论之拓扑排序
邻接表邻接矩阵用二维数组即可存取,比较简单,但除完全图外,一般的图不是任意两个顶点都相邻接,因此邻接矩阵也有很多零元素,特别是当n 较大而边数相对完全图的边(n-1)又少得多时,邻接矩阵仍是很稀疏,这样浪费存储空间。邻接表(Adjacency List)是图的一种顺序存储与链式存储结合的存储方法,类似于树的孩子链表表示法。由于它只考虑非零元素,因而节省了零元素所占的存储空间。它对于转载 2013-03-14 14:27:20 · 1501 阅读 · 0 评论 -
Bezier曲线原理
原理:贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由 Paul de Casteljau 于1959年运用de Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线。线性贝塞尔曲线给定点 P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出:且其等转载 2013-02-22 18:07:56 · 2234 阅读 · 0 评论 -
C/C++带括号四则运算
(1).首先从string读入表达式,取出每一个字符后装入deque容器coll1中(源码在后面)。(2).从该容器取出每一个元素,利用栈将中缀表达式转换成后缀表达式(可参考:http://blog.csdn.net/anye3000/article/details/7939203),将后缀表达式装入容器coll3中。(3).最后从coll3中取出元素逐一处理,既使用逆波兰式求值(如下图)转载 2012-09-04 11:26:06 · 20073 阅读 · 2 评论 -
斐波那契查找(FibonacciSearch)
说明二分搜寻法每次搜寻时,都会将搜寻区间分为一半,所以其搜寻时间为O(log(2)n),log(2)表示以2为底的log值,这边要介绍的费氏搜寻,其利用费氏数列作为间隔来搜寻下一个数,所以区间收敛的速度更快,搜寻时间为O(logn)。方法该方法稍有些繁琐,对照代码更容易理解。费氏搜寻使用费氏数列来决定下一个数的搜寻位置,所以必须先制作费氏数列,这在之前有提过;费氏搜寻会先透过公式计转载 2011-11-07 19:04:13 · 936 阅读 · 0 评论 -
基数排序(RadixSort)
说明在之前所介绍过的排序方法,都是属于「比较性」的排序法,也就是每次排序时 ,都是比较整个键值的大小以进行排序。这边所要介绍的「基数排序法」(radix sort)则是属于「分配式排序」(distribution sort),基数排序法会使用到「桶子」(bucket),顾名思义,它是透过键值的部份信息,将要排序的元素分配至某些「桶」中,藉以达到排序的作用,基数排序法是属于稳定性的排转载 2011-11-07 15:31:01 · 823 阅读 · 0 评论 -
插补法查找(InterpolationSearch)
说明如果待查找的数据分布平均的话,可以使用插补(Interpolation)法查找,在搜寻的对象大于500时,插补法查找会比二分法查找来的快速。方法插补法查找是以数据分布的近似直线来作比例运算,以求出中间的索引并进行数据比对,如果取出的值小于要寻找的值,则提高下界,如果取出的值大于要寻找的值,则降低下界,如此不断的减少搜寻的范围,所以其本原则与二分法查找是相同的,至于中间值的寻转载 2011-11-07 16:34:10 · 3162 阅读 · 0 评论 -
合并排序(MergeSort)
说明之前所介绍的排序法都是在同一个数组中的排序,考虑今日有两组或两组以上的数据,它可能是不同数组中的数据,或是不同档案中的数据,如何为它们进行排序?解法可以使用合并排序法,合并排序法基本是将两组已排序的数据合并,并进行排序,如果所读入的数据尚未排序,可以先利用其它的排序方式来处理这两组数据,然后再将排序好的这两组数据合并。有人问道,如果两组数据本身就无排序顺序,何不将所转载 2011-11-03 20:46:05 · 888 阅读 · 0 评论 -
顺序查找(LinearSearch)
说明搜寻的目的,是在数据中寻找指定的数据,而当中顺序搜索是最基本的搜寻法,只要从数据开头寻找到最后,看看是否找到数据即可。(这里跟原文有所区别,顺序查找不需要[已排序数据])方法初学者看到顺序搜索,多数都会使用以下的方式来进行搜寻:while(i if(number[i] == k) {printf("找到指定值");break;}i++;}转载 2011-11-03 20:15:05 · 4061 阅读 · 0 评论 -
快速排序(QuickSort)
快速排序法(一)说明快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。这边所介绍的第一个快速排序法版本,是在多数的教科书转载 2011-08-16 18:35:21 · 1089 阅读 · 0 评论 -
二分法查找(BinarySearch)
说明如果搜寻的数列已经有排序,应该尽量利用它们已排序的特性,以减少搜寻比对的次数,这是搜寻的基本原则,二分搜寻法是这个基本原则的代表。方法在二分搜寻法中,从数列的中间开始搜寻,如果这个数小于我们所搜寻的数,由于数列已排序,则该数左边的数一定都小于要搜寻的对象,所以无需浪费时间在左边的数;如果搜寻的数大于所搜寻的对象,则右边的数无需再搜寻,直接搜寻左边的数。所以在二分搜寻转载 2011-11-03 19:38:29 · 863 阅读 · 0 评论