算法导论
Runnyu
这个作者很懒,什么都没留下…
展开
-
散列表
基本概念散列表是普通数组概念的推广。对于普通数组可以直接寻址(根据下标),使得能在O(1)时间内访问数组中的任意位置。如果存储空间允许,我们可以提供一个数组,为每个可能的关键字保留一个位置,以利用直接寻址技术的优势。当实际存储的关键字数目比全部的可能关键字总数要小时,采用散列表就成为直接数组寻址的一种代替。在散列表中,不是直接把关键字作为数组的下标,而是根据关键字计算出相应的下标。原创 2015-08-12 20:40:35 · 290 阅读 · 0 评论 -
快速排序
快速排序的思想跟实现原创 2015-08-12 20:40:32 · 168 阅读 · 0 评论 -
堆排序
堆排序的思想跟实现原创 2015-08-12 20:40:30 · 249 阅读 · 0 评论 -
归并排序
归并排序的思想跟实现原创 2015-08-12 20:40:28 · 246 阅读 · 0 评论 -
二叉搜索树
基本概念二叉搜索树是以一棵二叉树来组织的。这样的一棵树可以使用一个链表数据结构来表示:其中每个节点就是一个对象,除了key和data之外,每个节点还包含left、right和p属性,分别指向节点的左孩子、右孩子和双亲。二叉搜索树的性质:对于任何结点x,其左子树中的关键字最大不超过x.key,其右子树的关键字最小不低于x.key。二叉搜索树性质允许我们通过一个简单的递归算法来按序输出原创 2015-08-12 20:40:37 · 307 阅读 · 0 评论 -
最小生成树
一个例子在电子电路设计中,我们常常需要将多个组件的针脚连接在一起。要连接n个针脚,我们可以使用n-1根连线,每根连线连接两个针脚。显然,我们希望所使用的连线长度最短。我们可以将上述问题用一个连通无向图G=(V,E)来表示,这里V是针脚的集合,E是针脚之间可能连接,每条边的权重代表两个针脚间连线的长度。我们希望找到E的一个无环子集T(必为一棵树),既能够将所有针脚连接起来,又具有最小权重原创 2015-08-12 20:40:52 · 291 阅读 · 0 评论 -
动态规划
动态规划与分治法的区别动态规划与分治法相似,都是通过组合子问题的解来求解原问题。分治法将问题划分为互不相交的子问题,递归地求解子问题,再将它们的解组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况。这种情况下,分治算法会反复地求解相同的子问题,而动态规划算法会将这些重复子问题的解保存起来(通常使用数组),避免不必要的计算工作。 动态规划算法的步骤我们通常按如原创 2015-08-12 20:40:42 · 479 阅读 · 0 评论 -
红黑树
之前介绍了二叉搜索树。它的操作的时间复杂度跟树的高度有关,如果树的高度较高的时候,这些集合操作可能并不比在链表执行得快。红黑树是许多“平衡”搜索树的一种,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lgn)。 红黑树的性质红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是RED和BLACK。通过对各个结点的颜色进行约束,红黑树确保没有原创 2015-08-12 20:40:40 · 329 阅读 · 0 评论 -
图的广度优先遍历
广度优先遍历是最简单的图搜索算法之一,也是许多重要的图算法的模型。 图的表示对于图G=(V,E)(V代表图中结点的集合,E代表图中所有边的集合),可以用两种标准表示方法表示:1.将图作为邻接链表的组合对于图G=(V,E),其邻接链表表示由一个包含|V|条链表的数组Adj构成。对于每个结点u∈V,邻接链表Adj[u]包含图G中所有与u邻接的结点 2.将图作为邻接矩阵来原创 2015-08-12 20:40:47 · 570 阅读 · 0 评论 -
图的深度优先搜索
深度优先搜索所使用的策略就像其名字所隐含的:只要可能,就在图中尽量”深入“。深度优先搜索的步骤如下:1.访问图中的任一结点后,访问它的任一邻接结点w12.从w1出发,访问与w1邻接但还没有访问过的结点w2(向下深入)3.重复过程2(如果当前访问的结点不能”向下深入“,则回退到上一结点,访问它另外一个邻接结点)知道所有结点都被访问过为止。 深度优先搜索算法与广度优先原创 2015-08-12 20:40:49 · 385 阅读 · 0 评论