自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 图之四(最短路径)

1.        最短路径1.1.       最短路径:是带权有向图中,一个顶点u到另一顶点v之间权值最小的路径,最短路径可能不止一条。最短路径不能含有负权回路,否则在负权回路上循环则可以达到负无穷大;也不能有正权回路,否则从路径上去掉回路后,可以产生有向图源点和终点、权值更小的路径。因此最多有0权回路,而这时一定还有另外一条无回路的最短路径。因此可以将路径上的的0权回路都去掉

2013-11-26 23:38:02 784

原创 图之三(最小生成树)

1.        最小生成树最小生成树是无向联通带权图的最小联通分量(带权)。只用n-1条边连接n个顶点,且边的权值和最小。使用贪心算法,贪心和动态规划比,还有一个更强的性质,局部最优解即为全局最优解。2.        求解算法思想2.1.       通用的思想算法没一步都确定一条边,使得加入后仍然为最小生成树的子集。一般都是基于贪心算法思想来实现。2.2.     

2013-11-24 00:30:52 658

原创 图之二(图的基本算法)

1.        图的存储表示1.1.       邻接表表示法对图中每个顶点,维护一个以该顶点为起点的终点的链表。整个图需要|V|条链表。邻接表即为这|V|条链表组成的表。场景:一般用于稀疏表。优点:Ø  有向图中,所有邻接表的链长度和为|E|;无向图中,所有邻接表的链长度和为2*|E|.Ø  每条链表的存储顺序没有要求。Ø  邻接表表示法中,存储空间为O(V+

2013-11-23 20:15:49 714

原创 图之一(图的基本概念)

1.        图的分类(按边是否有向)1.1.       有向图边是有向的。边从一个顶点进入另一个顶点。强连通图,有向图中任何两点都有路(注意正反。即从任何点,都可到任何的另一点)。1.2.       无向图边是无向的。边表示一个顶点和另一个顶点关联。连通图,无向图中任何两点关联。2.        图的分类(按活动表示方式)2.1.       顶点表示

2013-11-23 20:13:04 701

原创 算法设计分析之三(动态规划,最长公共子序列)

1.        动态规划动态规划是通过组合子问题的解从而得到整个问题的解。1.1.       与分治算法区别分治法是将问题分解为独立的子问题,递归求解子问题,最后再合并子问题从而得到问题的解。动态规划并不要求子问题独立,因此子问题可以包含公共的子子问题。这时候如果用分治法,则会重复计算很多不必要的工作,即重复计算公共的子子问题。1.2.       思想动态规划是将子

2013-11-17 01:11:23 1768

原创 算法设计分析之二(竞争分析,自组织表)

1.        自组织表:定义两种操作l  n个元素的列表L,访问(可能是查找,也可以是其他操作)元素x的代价与元素在列表中的位置有关(从表头到x的距离)。l  元素在L中的位置可以通过交换相邻的元素来改变,而这个操作的代价为O(1)。如果考虑用户的访问可能是一系列的,而且一个元素被访问后,再次被访问的概率会增大,因此考虑对一个元素访问后将该元素和其前驱的元素交换(代价为O(1

2013-11-14 22:26:33 3306

原创 算法设计分析之一(平摊分析,表扩增,势能方法)

1.        平摊分析问题:hash表应该设置为多大?(使用链表解决冲突。)越大越好,这样查找越快;但是空间越大,浪费越大。因此,通常为存储元素的2倍。但是如果不知道要存储的元素的值呢?方法:使用动态表,思想为vector扩展容量的方式,空间满时重新分配两倍当前大小的空间,并移动元素,释放旧的空间。复杂度分析:每一次都有插入操作,在2的幂次方加1处还需要移动前面的所有元素。

2013-11-13 00:41:24 2915

原创 数据结构之六(跳跃表Skip List)

跳跃表的优点:期望操作时间为O(lgn),且以概率1达到O(lgn),即操作几乎总是O(lgn),而不仅是以期望复杂度为O(lgn)。另外跳跃表实现相对简单。1.        跳跃表含义n个元素的跳跃表。l  跳跃表以多条链表来表示元素。l  每条链表都是排好序的有序链表。l  最底层的链表为普通的单链表,包含所有的元素。l  每一层(除了最底层)节点的选择为其下层元素的

2013-11-11 23:33:01 649 2

原创 数据结构之五(数据结构的扩充、动态统计、区间树)

1.        动态有序统计静态统计:是指数据内容一旦确定,就不再有增加、删除操作,排序的内容是静态固定不变的。(见排序之五)动态统计:内容有可能有增减。动态统计主要有两种操作。一是获取数组中第i大的数。二是给一个数x,返回x在数组中的位置。动态统计实现方式:以红黑树为基础进行扩充,在每个节点x存储额外的一个记录信息---以x为根的子树的节点数(包含x自己,以及其内部孩子节点,

2013-11-11 00:11:39 1106

原创 数据结构之四(平衡查找树之一--红黑树)

数据结构之四(平衡查找树之一--红黑树)由二叉查找树随机情况下O(lgn)的操作(增、删、查)时间,因此希望得到一种下最坏情况O(lgn)的操作时间。由二叉树操作时间和树高相关,因此考虑将二叉树的高度保持为O(lgn),从而达到目的。平衡树包括:AVL,2-3树,2-3-4树,B树(B+,B*),R-B树(红黑树),Skip lists(跳跃表),Treap(树堆)1.      

2013-11-09 23:34:18 475

原创 数据结构之三(二叉查找树)

查找树是一种动态数据结构,支持插入、删除、查找等操作。二叉查找树的复杂度和树的高度是成正比的。有n个节点的完全二叉树,树高为O(lgn)。但是如果树含义n个节点,如果为斜的,则成为链表,高度为O(n)。1.        二叉查找树每个节点最多有两个分支。对于每个节点。左孩子的任何节点小于根,根小于右孩子的任何节点。2.        二叉排序与快排的比较。二叉排序,使用将

2013-11-09 16:20:45 430

原创 数据结构之二(续,高级hash)

问题:普通hash会导致对于特定的输入,其时间复杂度可以达到O(n)。为了解决这个问题,同快速排序的随机化一样,使用随机化算法来实现,从而可以使得复杂度不会依赖于输入,且性能能达到平均。1.        全域hash(universal hashing)全域hash:在执行的开始,随机地从一族hash函数中选择一个函数来执行hash。从而避免对特定输入导致的最差性能。H为有限的一组散

2013-11-06 00:34:39 903

原创 数据结构之二(hash)

Hash表Hash表作为一种动态集合数据结构,一般只支持:插入、查询、删除操作;而且每个操作的时间复杂度一般控制在O(1)内。Hash表是普通数组的一种推广。因为数组可以在直接通过下标来定位要查找的元素,时间为O(1)。因此hash表目标也是使用一些技术,以达到可以在O(1)的时间内完成操作。(严格来说时间是和装载因子a相关的)Hash的方法。1.        直接寻址法前提

2013-11-03 17:42:46 781

原创 数据结构之一(基本数据结构)

从本章开始,讨论数据结构。动态集:数据结构讨论集合时,一般集合的元素是可以变化的,可以向集合中添加、删除、修改元素的值。动态集上的操作:查找、添加、删除、取最大值、取最小值、前驱、后继。基本数据结构:1          栈:后进先出(LIFO)。插入--入栈(PUSH),删除--出栈(POP),查看栈顶元素(TOP)。2          队列:先进先出(FIFO)。插入

2013-11-03 04:05:37 466

空空如也

空空如也

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

TA关注的人

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