目录 1、分治求x的n次方思路 2、c++代码实现内容 1、分治求x的n次方思路T(n)=Θ(lgn) 为了计算乘方数a^n,传统的做法(所谓的Naive algorithm)就是循环相乘n次,算法效率为Θ(n)。但是如果采用分治法的思想,算法效率可以提高到Θ(lgn),如...
原创博客,转载请注明:http://www.cnblogs.com/wuwenyan/p/4982713.html 当算法的输入n非常大的时候,对于算法复杂度的分析就显得尤为重要,虽然有时我们能通过一定的方法得到较为精确的运行时间,但是很多时候,或者说绝大多数时候,我们并不值得去花精力求得多余的精度,因为精确运行时间中的倍增常量和低阶项已经被输入规模本身的影响所支配。我们需要关心的是输入规模无限增加,在极限中,运行时间是如何随着输入规模增大...
用的最多的排序 平均性能:O(nlogn){随机化nlogn}原地址排序稳定性:不稳定思想:分治 (切分左右)学习方式:自己在纸上走一遍 def PARTITION(A,p,r):x = A[r] # 锚点 主元{大于它放一边,小于的放另一边}i = p - 1for j in range(p,r):if A[j] <= x:i += 1A[i],A[j] = A[j],A[i]A[i+1],A[r] = A[r],A[i+1]return i + 1def QUICKSORT(A,p,r):if p < r: #分治q = PARTITION(A,p,r)QUICKSORT(A,p,q-1)QUICKSORT(A,q+1,r)if__name__ ...
《算法导论》第二版中在讨论斐波那契堆之前还讨论了二项堆,但是第三版中已经把这块的内容放到思考题中,究极原因我想大概是二项堆只是个引子,目的是为了引出斐波那契堆,便于理解,而且许多经典的算法实现都是基于斐波那契堆,譬如计算最小生成树问题和寻找单源最短路径问题等,此时再把二项堆单独作为一章来讲显然没有必要。类似的堆结构还有很多,如左倾堆,斜堆,二项堆等,下次我打算开一篇博客来记录下它们的异同点。一、摊...
哈希表,又名散列表,hashtable。。。云云,看似很高大上,其实不过是直接寻址的延伸而已。直接寻址为何物,看一个数组:a[10],那么取其中一个元素a[1],这就是直接寻址,直接去这个a+1的地址上,就找到了这个数值,时间复杂度为O(1)。而哈希表的目的就是要让查找的时间复杂度尽量往O(1)上靠。 一、哈希表的最简单形式假如有10000个数,比如0~9999,是可能出现的数字的集合,我们现在要将一段时间内,出现的数字,全部保存...
package org.loda.graph;import java.math.BigDecimal;
import java.math.RoundingMode;import org.loda.util.In;/*** * @ClassName: FloydWarshall* @Description: 求一个图中任意两点之间的最短路径* * FloydWarshall算法是通过动态规划来计算任意两点之间的最短路径* * 如果普通求最短路径,可以对图进行V次(顶点数)BellmanFord算法。 这样的话时间复杂度为EV^2* 如果是稀疏图,则...
本文的基础是红黑树 算法导论–红黑树通过在基础的数据结构中添加一些附加信息,来扩张一种标准的数据结构,然后编写新的操作来支持所需要的应用。下面是介绍在红黑树的基础上扩张的数据结构。1.动态顺序统计动态顺序统计可以在O(lgn)时间内确定任何的顺序统计量(即在n个元素的集合中,能在O(lgn)的时间内确定第i小的元素),同时也可以在O(lgn)的时间内计算一个元素的秩(即它在中序遍历下的位置顺序)。1 添加附加信息结点x中加入...
第六章 堆排序最小堆和最大堆:近似的完全二叉树A[parent(i)]<=A[i]或者A[parent(i)]>=A[i]建堆复杂度O(n)排序O(nlgn)实际应用中,快速排序一般优于堆排序。可用于优先队列等。在一个包含n个元素的堆中,所有优先队列的操作均可在O(lgn)时间内完成。 第七章 快速排序与归并排序一样用分治思想主元pivot可随机生成 原文:http://www.cnblogs.com/justinh/p/6518639.html
1.算法在计算中的作用 1.1算法 算法解决哪些问题 数据结构 技术,算法设计分析技术 难题,PE完全问题 并行性 1.2作为一种技术的算法 效率 算法与其他技术2.算法基础 2.1插入排序 代码publicstaticvoid main(String[] args) {int[] array = {5, 2, 4, 6, 1, 3};for (int j = 1; j < array.length; j++) {int key = array[j];//从第2个元素开始和前一个元素进行比...
本章的重点是循环不变式。也就是在一个循环中存在着某些不变的量。它类似于数学归纳法的归纳步骤:初始化:在循环第一轮迭代开始之前,应该是正确的。保持:如果在循环的某一次迭代开始之前它是正确的,那么在下一次迭代开始之前,它也应该保持正确。终止:当循环结束时,不变式给了我们一个有用的性质,它有助于说明算法是正确的。我们在设计一个算法、分析一个算法的时候,要适当应用循环不变式来简化分析工作、证明算法的正确性...
目录 1、堆排序介绍 2、堆排序实例 3、c++ 完整代码 4、参考资料内容 1、堆排序介绍 1.1 、堆是什么 堆是一颗完全二叉树,(设某一个节点为i,根节...
今天学习了算法导论上的归并排序算法,并且完成了在纸上写出伪代码,以前就学过归并但是理解的不够透彻,以前还一直困惑:为什么明明归并排序比快排的时间复杂度更稳定,为什么库函数不用归并而用快排,现在知道原因了,因为归并排序必须开额外的空间,而且空间开销还比较大,下面介绍算法:首先,归并排序用到了分治的思想,把大数据分成若干个小数据,然后再分别对小数据进行处理,最后把小数据合并成大数据。其次,归并排序用到...
本节课介绍了一种全新的数据结构——跳跃表跳跃表是一种简单又有趣的动态搜索数据结构,其主要优点在于其易于实现,而且很好的保证了其具有高效的性能,即2*O(lgn)的搜索性能在此之前我想首先谈谈链表,链表的优点在于其插入和删除只需要常数项的时间(加上查找该元素需要额外的O(n)时间),但是其查找效率只有O(n),这里顺带补充一下链表类的问题,以下先给出两个BAT公司面试时热衷于考的两个链表经典问题:1.如何快速查找单...
许久,你要我写的东西对非技术类没少依赖于博客。来自0学习技术的开始。你会遇到很多类似的问题,我把他们失望。它会给人帮。但是,非技术性的东西,他还写信给自己看的,在不存在的“我想小”转换成“我想为大”之前(看了刘未鹏的博客后的感触),我不须要别人的理解和同情。再者,即使面对面交流,也不能保证使一个人全然理解还有一个人。更何况活的思考变成死的文字。然而今天。我仅仅是想把憋在心里的话写出来。人的层次并不同样...
没办法就是这么没原则,又开了个坑。每天看点书,不管什么书。1. 需求: 输入:n个数的一个序列(a1, a2, a3……an) 输出: 输出序列的一个排列(a1‘, a2‘, a3‘ ……an‘),满足a1‘ <= a2‘ <= a3‘ ……<= an‘2. 图示:3. 伪代码 INSERTION-SORT(A)for j=2 to A.lengthkey = A[j]i = j-1//把A[j]插入到有序数组 A[1...j-1].while i > 0 and A[i] > keyA[i+1] = A[i]i = i -1A[i + 1] = key 4. 理解 算法导论不愧是...