算法导论
LosinueriS
渴望程度是你能力的唯一限制
展开
-
【算法导论】第二课 渐近符号、递归及解法
一、渐进符号Ω()是下界O()上界Θ()是同级o 严格的上界ω 的下界二、递归表达式的解法主方法:对于T(n)=aT(n/b)+f(n)画出递归树,可以得出递归树的高度为logb(n),叶子节点为theta(1),叶子节点和为a^logb(n),即n^logb(a),而根节点为f(n)比较n^logb(a)和f(n)的大小,判断哪一因素是domi原创 2015-03-07 21:58:28 · 1022 阅读 · 0 评论 -
【算法导论】 第十三课 平摊分析、表的扩增、势能分析
先通过表的扩增这一例子来引入今天的主题——平摊分析和势能分析一个哈希表的大小应该为多少比较合适?theta(n)比较合适可是万一我们不知道n是多大呢使用动态表解决 溢出就建立一个大小翻倍的空间,然后复制过去这样做插入的最坏时间复杂度为n让我们看看平均的时间复杂度,每次基本插入操作为1,空间溢出时需要开一个更大一倍的空间,并复制当前的元素过去,所以空原创 2015-04-26 23:37:32 · 1666 阅读 · 0 评论 -
【算法导论】 第十课 平衡搜索树
树的结构,如果不能保持平衡,那么其搜索性能会大大打折扣,而本节课介绍了几种经典的平衡树,如AVL,2-3-4tree,红黑树等等,然后着重讲了红黑树,接下来就红黑树的基本性质,作一些简短的总结。 首先,红黑树除了具有BST的基本性质外,还额外拥有以下的五大基本性质:1)每个结点有一个色域,一个结点要么为黑结点,要么为红结点2)根节点为黑结点3)每个叶子结点都为黑结点(无键值原创 2015-04-14 20:21:39 · 999 阅读 · 0 评论 -
【算法导论】 第十二课 跳跃表
本节课介绍了一种全新的数据结构——跳跃表跳跃表是一种简单又有趣的动态搜索数据结构,其主要优点在于其易于实现,而且很好的保证了其具有高效的性能,即2*O(lgn)的搜索性能在此之前我想首先谈谈链表,链表的优点在于其插入和删除只需要常数项的时间(加上查找该元素需要额外的O(n)时间),但是其查找效率只有O(n),这里顺带补充一下链表类的问题,以下先给出两个BAT公司面试时热衷于原创 2015-04-18 13:08:00 · 2149 阅读 · 0 评论 -
【算法导论】第五课 线性排序(基数排序 计数排序)
第五课主要引出了两个非常有趣的排序算法——它们的时间复杂度竟然是θ(n),也就是说时间复杂度是线性的。首先来看看之前提到过的几个排序算法:quicksort ——θ(nlgn)heapsort——θ(nlgn)merge sort——θ(nlgn)insert sort——n^2所有这些排序算法,能否比nlgn更快? 不能,因为他们都采用了同样的一个模型,比较算法模转载 2015-03-12 19:26:00 · 679 阅读 · 0 评论 -
【算法导论】第九课 二叉搜索树
本节课主要介绍了一种数据结构——二叉搜索树二叉搜索树的定义简单来说,对于每一个节点,其左子节点都比它小,右子节点都比它小对二叉搜索树进行中序遍历,即可得到序列的从小到大排序对于相同数据的不同给定顺序,构造的二叉搜索树高度会不一样,最坏情况二叉搜索树的高度会达到n,此时时间复杂度为O(n^2),而一般情况下二叉树平均高度为O(lgn),时间复杂度为O(nlogn)原创 2015-03-12 19:41:21 · 646 阅读 · 0 评论 -
【算法导论】第七课 哈希表
这一课讲了哈希表,的确耗费了我很多时间去理解哈希表的相关内容。从作用上来讲,构建哈希表的目的是把搜索的时间复杂度降低到O(1),考虑到一个长度为n的序列,如果依次去比较进行搜索的话,时间复杂度是θ(n),或者对其先进行排序然后再搜索会更快一些,但这两种方法都不是最快的方法。哈希表也叫散列表,他通过一个哈希函数H,把要存储的内容取一个键值,经过H的运算,把键值映射到一个有m个槽的表中去,最简转载 2015-03-12 19:31:05 · 723 阅读 · 0 评论 -
【算法导论】第八课 全域哈希 完美哈希
哈希表的固有缺点怎么解决?这节课讨论的两个解决哈希表缺陷的方法——全域哈希和完美哈希1.第一个哈希的根本缺陷:对于任意哈希函数而言,都存在一个不好的健集,使得所有的健都会哈希到同一个槽里去,那么如何解决这种情况呢?如何防止对某个键集永远有较差的表现?如何防止竞争对手使用这个键集来降低你的性能表现? 一个词解决这个问题 —— random!全域哈希的方法就是随机选择一个哈希函数H(当转载 2015-03-12 19:30:53 · 1054 阅读 · 0 评论 -
【算法导论】第六课 顺序统计,中值
这一节课讲到两个线性算法,一个是顺序统计算法(Order Statistics)还有一个是最坏情况线性时间顺序统计法(Worst-case linear-time order statistics)这两个算法是要解决这样一个问题:对于一个数组A,我们需要求得第k小的一个数,rank(k)如果k=1, 就是求最小值如果k=n, 就是求最大值如果k=[(n+1)/2] or [(n转载 2015-03-12 19:29:16 · 1014 阅读 · 0 评论 -
【算法导论】第十一课 扩充的数据结构、动态有序统计和区间树
本节课主要讲了如何构造自己想要的数据结构,或者扩充已有数据结构的功能,以实现想要的特定功能比如设计一个动态结构,满足功能寻找第k大的数其做法是维护每个结点的子结点个数来推导其秩,而不维护其秩,因为动态操作会使得其难以维护红黑树的插入操作 1.树插入 2.rebalance构造自己需要的扩充数据结构的基本流程1.选择一个基本的数据结构 例如红黑树2.决定要原创 2015-04-26 23:28:33 · 1079 阅读 · 0 评论