自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

转载 摊还分析---算法导论第十七章

摊还分析是用来评价程序中的一个操作序列的平均代价,有时可能某个操作的代价特别高,但总体上来看也并非那么糟糕,可以形象的理解为把高代价的操作“分摊”到其他操作上去了,要求的就是均匀分摊后的平均代价。摊还分析有三种常用的技术:聚合分析,核算法,势能法。首先看个例子,现在有三种操作,push(s),pop(s),mutlipop(s,k),push(s),统称为栈操作。 push(s)每次只能压一个数据,

2015-06-26 17:36:37 3566

原创 非递归中序遍历---算法导论12.1-3

问题描述:给出一个非递归的中序树遍历算法。(提示:有两种方法,在较容易的方法中,可以采用栈作为辅助数据结构;在较为复杂的方法中,不采用栈结构,但假设可以测试两个指针是否相等。)构造的树如下: 中序遍历结果为:1 2 3 4 5 6 7 8 9 算法实现://非递归用栈实现中序遍历void BinaryTree::non_recurse_using_stack_in_order_visit(Nod

2015-06-25 14:18:13 551

原创 算法导论---有序序列中的i个最大数(思考题9-1)

问题描述:问题求解:a. 使用归并排序或堆排序对输入数据进行排序,均花费O(n*lgn)最坏情况运行时间(不要使用快排或插入排序,他们均花费O(n^2)的时间)。将i个最大元素(在已排序数组中直接可以获得)放到输出数组中,花费时间O(i)。 因此,总的最坏情况运行时间:O(n * lgn+i)=O(n * lgn) (因为i <= n)。b.用堆来实现优先队列。使用BUILD-HEAP建堆,花

2015-06-21 09:55:23 953

转载 算法导论第三章--- 渐进记号

|概念回顾|几个重要渐进记号的定义:Θ(g(n))={ f(n): 存在正常数c1,c2和n0,使对所有的n>=n0,有0<=c1g(n)<=f(n)<=c2g(n) }O(g(n))={ f(n): 存在正常数c和n0,使对所有n>=n0,有0<=f(n)<=cg(n) }Ω(g(n))={ f(n): 存在正常数c和n0,使对所有n>=n0,有0<=cg(n)<=f(n) }o(g(n))

2015-06-16 16:34:14 2534

原创 算法导论习题---求n个元素任何排列中逆序对的数量

问题描述:设A[1…n]是一个包含n个不同数的数组。如果在i < j的情况下,有A[i] > A[j],则(i,j)就称为A中的一个逆序对(inversion),(逆序对的元素是下标,而不是数组里的值)。给出一个算法,它能用Θ(nlgn)的最坏情况运行时间,确定n个元素的任何排列中逆序对的数目。问题求解:方法一: 循环从数组中取出一个元素k,然后从k之后的元素中找到比k小的元素个数,最后统计所有的

2015-06-16 15:20:06 9641 2

转载 九大排序算法总结

转自http://blog.csdn.net/xiazdong/article/details/8462393stable sort:插入排序、冒泡排序、归并排序、计数排序、基数排序、桶排序。 unstable sort:选择排序、快速排序、堆排序。一、插入排序特点:stable sort、In-place sort 最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况

2015-06-15 15:01:23 1042

原创 Floyd-Warshall算法---求解任意两节点的最短路径

算法描述:简称Floyd算法,是一种基于DP(Dynamic Programming)的最短路径算法,时间复杂度是O(V^3)。 精简版一般形式:void Floyd(){ int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++)

2015-06-14 16:12:37 1003

原创 差分约束系统---算法导论第24章

差分约束系统:以算法导论中的问题为例:X1 - X2 <= 0X1 - X5 <= -1X2 - X5 <= 1X3 - X1 <= 5 (1)X4 - X1 <= 4X4 - X3 <= -1X5 - X3 <= -3X5 - X4 <= -3这样的不等式组就称作差分约束系统。注意: x1-x2<=w在图上对应的是x2->x1的边权为w的一条边,而不是x1->x

2015-06-12 18:02:31 917

原创 赫夫曼编码---Huffman code(贪心算法)

算法描述:赫夫曼编码是一种无损数据压缩算法。在计算机数据处理中,赫夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。例如,在英文中,e的出现机率最高,而z的出现概率则最低。当利用赫夫曼编码对一

2015-06-09 12:02:19 8140

原创 散列表---算法导论第十一章 Hash Tables

一、散列表概念1、 直接寻址表 直接将关键字作为数组下标。复杂度O(1)2、 散列表 k->h(k) 降低了空间开销,会产生碰撞,解决碰撞的简单方法是链接法。 对链接法散列,平均情况下,复杂度也是O(1)3、 散列函数 1) 除法散列法 h(k)=k mod m,m最好选取与2的整数幂不太接近的质数 2) 乘法散列法 h(k)=[m(kA mod 1)], A为一个

2015-06-07 15:32:08 904 1

原创 Dijkstra---求单源最短路径(贪心算法)

算法步骤:1) Create a set sptSet (shortest path tree set) that keeps track of vertices included in shortest path tree, i.e., whose minimum distance from source is calculated and finalized. Initially, th

2015-06-05 17:47:46 1621

原创 Bellman-Ford算法---求包含负权边单源最短路径(动态规划)

单源最短路径:给定一个图,和一个源顶点src,找到从src到其它所有所有顶点的最短路径,图中可能含有负权值的边。 Dijksra的算法是一个贪婪算法,时间复杂度是O(VLogV)(使用最小堆)。但是迪杰斯特拉算法在有负权值边的图中不适用, Bellman-Ford适合这样的图。在网络路由中,该算法会被用作距离向量路由算法。 Bellman-Ford也比迪杰斯特拉算法更简单和同时也适用于分布式系

2015-06-04 22:43:13 3862

原创 Prim---求最小生成树(贪心算法)

算法步骤:假设N=(V,{E})是连通图,TE是N上最小生成树中边的集合。算法从U={u0}(u0∈V),TE={}开始,重复执行下述操作:在所有u∈U,v∈V-U的边(u,v)∈E中找一条代价最小的边(u0,v0)并入集合TE,同时v0 并入U,直至U=V为止。此时TE中必有n-1条边,则T=(V,{TE})为N的最小生成树。具体步骤如下:1) 创建一个集合mstSet记录已经包含在MST中的顶点

2015-06-04 22:10:04 1345

原创 Kruskal---求最小生成树(贪心算法)

算法描述:一个图的生成树是一个树并把图的所有顶点连接在一起。一个图可以有许多不同的生成树。最小生成树其实是最小权重生成树的简称。最小生成树有(V – 1)条边,其中V是给定的图的顶点数量。Kruskal算法是一种贪心算法。贪心的选择是选择最小的权重的边,并不会和当前的生成树形成环。算法步骤:1,按照所有边的权重排序(从小到大)2,选择最小的边。检查它是否形成与当前生成树形成环。如果没有形成环,将这条

2015-06-02 21:33:38 3319

原创 并查集---判断图中是否存在环

算法描述:并查集(union-find sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数、最小公共祖先、带限制的作业排序,还有最完美的应用:实现Kruskar算法求最小生成树。算法实现://并查集判断是否存在环#include <iostream>#include <stdlib.h>#inclu

2015-06-02 21:23:25 3075 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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