[TOC] 引言 一个哈希表多大合适? 数据量为$n?$,如果哈希表无限大( =$n?$),那么时间复杂度是$O(1)?$的,不过很显然,虽然节省了时间,但是浪费了空间. 实际上在我们不知道数据量的情况下,我们无法确定哈希表的大小,这时我们有个很美丽的数据结构 动态表 动态表的工作原理 + 建立一个 ...
分类:
编程语言 时间:
2020-02-02 11:48:54
阅读次数:
81
SOL: 我们发现答案就是 跑一边KMP 那么答案就是i-net[i], 我们考虑在trie上跑KMP,我们发现KMP的复杂度是依赖摊还分析的线性复杂度。如果朴素的KMP做法时间复杂度是不对的。 比如这样一个trie: a | a | a / \ b b 复杂度就退化了。那么我们可以考虑对每一个节点 ...
分类:
其他好文 时间:
2018-03-16 13:34:52
阅读次数:
171
在摊还分析中,通过求数据结构的一系列的操作的平均时间,来评价操作的代价。这样,即使这些操作中的某个单一操作的代价很高,也可以证明平均代价很低。摊还分析不涉及概率,它可以保证最坏情况下每个操作的平均性能。 摊还分析有三种常用的技术: 聚合分析,它确定n个操作的总代价的上界为T(n),所以每个操作的平均 ...
分类:
编程语言 时间:
2017-09-20 21:51:34
阅读次数:
140
一、高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容。前面还留了两章:贪心算法和摊还分析,打算后面再来补充。之前的章节讨论的支持动态数据集上的操作,如查找、插入、删除等都是基于简单的线性表、链表和树等结构,本章以后的部分在原来更高的层次上来讨论这些操作,更高的层次意味着更复杂的结构 ...
分类:
编程语言 时间:
2016-05-11 23:45:39
阅读次数:
305
题目描述零崎总是说自己有一百种梗可玩,然而其实都是假的,是化学成分的,是特技。想要给摊还分析加个梗,实在是不好想,因为这个内容并不是什么算法,而是算法分析。不过既然还得考,那么没有办法……“势能法”是摊还分析中一种比较简单常用的方法,而且容易理解。现在零崎有K个硬币,规定每次“翻动”操作只能从最右侧...
分类:
其他好文 时间:
2015-11-28 06:32:08
阅读次数:
342
中序遍历。
用栈保存的节点,始终都为该层尚未被next()访问过的最小节点,初始化为:
for ( ; root != nullptr; root = root->left)
{
stk.push(root);
}
在每次调用next移进迭代器时,意味着移出的该节点左子树为空(之前都已迭代过),所以把它的右子树的...
分类:
其他好文 时间:
2015-08-05 20:29:51
阅读次数:
183
这一章要讲的数据结构基本以实用为主。 12.1 自顶而下的伸展树 一些定义 展开:对于树的操作,叶结点X被插入之后,经过旋转使X成为新的树根。 摊还时间:在摊还分析中的一个概念,就是求一个操作的所有情况的平均时间。和O()的时间不同,后者体现的是最糟糕的情况下程序完成所要花费的时间。 P345之中,...
分类:
编程语言 时间:
2015-02-21 15:28:41
阅读次数:
164
摊还分析是用来评价程序中的一个操作序列的平均代价,有时可能某个操作的代价特别高,但总体上来看也并非那么糟糕,可以形象的理解为把高代价的操作“分摊”到其他操作上去了,要求的就是均匀分摊后的平均代价。 摊还分析有三种常用的技术;聚合分析,核算法,势能法。 首先看个例子,现在有三种操作,push(s...
分类:
编程语言 时间:
2014-12-25 23:34:45
阅读次数:
331
摊还分析本章内容:1.聚合分析2.核算法3.势能法4.动态表一 聚合分析1. 在摊还分析中,我们求数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价,它不涉及概率,可以保证最坏情况下每个操作的平均性能。2. 摊还代价:对所有n,一个n个操作的序列最坏情况下话费时间为T(n),...
分类:
其他好文 时间:
2014-07-14 10:34:00
阅读次数:
334