关闭

【算法导论】 第十三课 平摊分析、表的扩增、势能分析

先通过表的扩增这一例子来引入今天的主题——平摊分析和势能分析 一个哈希表的大小应该为多少比较合适? theta(n)比较合适 可是万一我们不知道n是多大呢 使用动态表解决  溢出就建立一个大小翻倍的空间,然后复制过去 这样做插入的最坏时间复杂度为n 让我们看看平均的时间复杂度,每次基本插入操作为1,空间溢出时需要开一个更大一倍的空间,并复制当前的元素过去,所以空...
阅读(669) 评论(0)

【算法导论】第十一课 扩充的数据结构、动态有序统计和区间树

本节课主要讲了如何构造自己想要的数据结构,或者扩充已有数据结构的功能,以实现想要的特定功能 比如设计一个动态结构,满足功能寻找第k大的数 其做法是维护每个结点的子结点个数来推导其秩,而不维护其秩,因为动态操作会使得其难以维护 红黑树的插入操作 1.树插入 2.rebalance 构造自己需要的扩充数据结构的基本流程 1.选择一个基本的数据结构 例如红黑树 2.决定要...
阅读(677) 评论(0)

【算法导论】 第十二课 跳跃表

本节课介绍了一种全新的数据结构——跳跃表 跳跃表是一种简单又有趣的动态搜索数据结构,其主要优点在于其易于实现,而且很好的保证了其具有高效的性能,即2*O(lgn)的搜索性能 在此之前我想首先谈谈链表,链表的优点在于其插入和删除只需要常数项的时间(加上查找该元素需要额外的O(n)时间),但是其查找效率只有O(n),这里顺带补充一下链表类的问题,以下先给出两个BAT公司面试时热衷于...
阅读(1042) 评论(0)

【算法导论】 第十课 平衡搜索树

树的结构,如果不能保持平衡,那么其搜索性能会大大打折扣,而本节课介绍了几种经典的平衡树,如AVL,2-3-4tree,红黑树等等,然后着重讲了红黑树,接下来就红黑树的基本性质,作一些简短的总结。     首先,红黑树除了具有BST的基本性质外,还额外拥有以下的五大基本性质: 1)每个结点有一个色域,一个结点要么为黑结点,要么为红结点 2)根节点为黑结点 3)每个叶子结点都为黑结点(无键值...
阅读(643) 评论(0)

【高效算法设计——递归】 UVa 1608 Non-boring sequences

题意:给定一段序列,如果这段序列的任意连续子序列中至少存在一个数唯一,那么这段序列就是Non-boring,否则就是boring,判定这段序列是否boring 思路:如果一个数A[x]是全场唯一,那么我们只需判断A[1]~A[x-1] 和A[x+1]~A[n]是否满足要求,为什么呢?因为A[x]全场唯一,所以经过A[x]的连续字段必然是Non-boring的,所以我们可以设计一个递归函数...
阅读(341) 评论(0)

【高效算法设计——双向扫描】 UVa 1442 Cave

Cav Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description As an owner of a land with a cave you were delighted when yo...
阅读(329) 评论(0)

【高效算法设计——递归】 UVa 12627 Erratic Expansion

思路:由于是求区间的红气球个数,我们可以先求sum[i]表示i到n行的红球个数,利用递归思想求解 设置函数g(k,i) 表示第k小时,从i到n行的红气球个数,当i>2^k时,其实就为k-1时的情况相同,当i 代码如下:#include #include int B[35]; long long tri[35]; long long g(int k,int i) //第...
阅读(316) 评论(0)

【高效算法设计——滑动窗口】 UVa 12174 Shuffle

Shuffle Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description You are listening to your music collection using the shuff...
阅读(417) 评论(0)

【高效算法设计——二分法】UVa 1607 Gates

Gates Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description In contemporary VLSI chip industry, the software tools used ...
阅读(523) 评论(0)

【算法导论】第九课 二叉搜索树

本节课主要介绍了一种数据结构——二叉搜索树 二叉搜索树的定义简单来说,对于每一个节点,其左子节点都比它小,右子节点都比它小 对二叉搜索树进行中序遍历,即可得到序列的从小到大排序 对于相同数据的不同给定顺序,构造的二叉搜索树高度会不一样,最坏情况二叉搜索树的高度会达到n,此时时间复杂度为O(n^2),而一般情况下二叉树平均高度为O(lgn),时间复杂度为O(nlogn)...
阅读(408) 评论(0)

【算法导论】第七课 哈希表

这一课讲了哈希表,的确耗费了我很多时间去理解哈希表的相关内容。 从作用上来讲,构建哈希表的目的是把搜索的时间复杂度降低到O(1),考虑到一个长度为n的序列,如果依次去比较进行搜索的话,时间复杂度是θ(n),或者对其先进行排序然后再搜索会更快一些,但这两种方法都不是最快的方法。 哈希表也叫散列表,他通过一个哈希函数H,把要存储的内容取一个键值,经过H的运算,把键值映射到一个有m个槽的表中去,最简...
阅读(386) 评论(0)

【算法导论】第八课 全域哈希 完美哈希

哈希表的固有缺点怎么解决?这节课讨论的两个解决哈希表缺陷的方法——全域哈希和完美哈希 1.第一个哈希的根本缺陷:对于任意哈希函数而言,都存在一个不好的健集,使得所有的健都会哈希到同一个槽里去,那么如何解决这种情况呢?如何防止对某个键集永远有较差的表现?如何防止竞争对手使用这个键集来降低你的性能表现? 一个词解决这个问题 —— random! 全域哈希的方法就是随机选择一个哈希函数H(当...
阅读(495) 评论(0)

【算法导论】第六课 顺序统计,中值

这一节课讲到两个线性算法,一个是顺序统计算法(Order Statistics)还有一个是最坏情况线性时间顺序统计法(Worst-case linear-time order statistics) 这两个算法是要解决这样一个问题:对于一个数组A,我们需要求得第k小的一个数,rank(k) 如果k=1, 就是求最小值 如果k=n, 就是求最大值 如果k=[(n+1)/2] or [(n...
阅读(363) 评论(0)

【算法导论】第五课 线性排序(基数排序 计数排序)

第五课主要引出了两个非常有趣的排序算法——它们的时间复杂度竟然是θ(n),也就是说时间复杂度是线性的。 首先来看看之前提到过的几个排序算法: quicksort ——θ(nlgn) heapsort——θ(nlgn) merge sort——θ(nlgn) insert sort——n^2 所有这些排序算法,能否比nlgn更快?  不能,因为他们都采用了同样的一个模型,比较算法模...
阅读(337) 评论(0)

【高效算法设计——跳跃枚举】Uva 11093 Just Finish it up

Just Finish it up Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description   I I U P C 2 0 06 Problem J: Just Finis...
阅读(382) 评论(0)
54条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:28763次
    • 积分:705
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:13篇
    • 译文:0篇
    • 评论:1条
    文章分类