95得票7回答
算法的摊销分析是什么?

如何与渐近分析相区别?何时使用它以及为什么? 我读过一些写得很好的文章,比如这些: http://www.ugrad.cs.ubc.ca/~cs320/2010W2/handouts/aa-nutshell.pdf http://www.cs.princeton.edu/~fiebri...

88得票6回答
通俗易懂的解释摊销复杂度是什么?

请问有人能够用通俗易懂的语言解释摊销复杂度吗?我在网上找了很久也没有找到确切的定义,也不知道它与算法分析有什么关系。如果有任何有用的信息,即使是外部引用的,都将不胜感激。

84得票3回答
Python的list.append()方法的时间复杂度为什么是O(1)?

如 时间复杂度 文档所述,Python 的 list 类型是使用数组实现的。因此,如果正在使用数组并进行了几次附加操作,最终将不得不重新分配空间并将所有信息复制到新空间中。但是,它是如何实现 O(1) 最坏情况的?

20得票2回答
使用不带按秩合并的并查集森林数据结构的并查集/查找算法

这是一个关于维基百科上不相交集合森林的并查集算法的分解: 裸奔的不相交集合森林...(O(n)) ... 使用按秩合并...(现在改进到O(log(n))) ...使用路径压缩(现在改进到O(a(n)),实际上是O(1)) 实现按秩合并需要每个节点保持一个rank字段进行比...

20得票3回答
std::vector插入的摊销分析

我们如何分析std::vector中后插入(push_back)的操作?它的摊销时间为每次插入O(1)。特别地,在Stephan T Lavavej在Channel9上的视频和此处(从17:42开始),他说为了最佳性能,Microsoft的实现方法会将向量的容量增加约1.5倍。 这个常数是如...

16得票1回答
Haskell向量的C++ push_back类比

我发现 Haskell 的 Data.Vector.* 与 C++ 的 std::vector::push_back 功能不完全相同。虽然有 grow/unsafeGrow,但它们的时间复杂度似乎为 O(n)。 有没有一种方式可以在 O(1) 平均时间内增长向量中的元素?

11得票1回答
拥有保证每个操作的最坏情况边界的Haskell集合?

这样的结构对于实时应用程序是必要的 - 例如用户界面。(用户不在乎点击按钮需要0.1秒还是0.2秒,但如果第100次点击强制执行一个未完成的计算并需要10秒才能继续,则他们会关心。) 我正在阅读Okasaki的论文 Purely functional data structures,他描述了...

11得票1回答
功能型数组倍增栈的摊销

我在思考一个紧凑的堆栈结构,随着其大小增加,其空间需求逐渐接近于一个数组。一个候选结构:data Stack a = Empty | Zero (Stack a) | One !(SmallArray a) (Stack a) | Two !(SmallArray a) !(S...

8得票2回答
动态数组的摊销时间

作为一个简单的例子,在动态数组的特定实现中,每次填满时我们会将数组的大小加倍。 因此,可能需要重新分配数组,并且在最坏情况下插入可能需要 O(n) 的时间。 然而,n 次插入可以始终在 O(n) 的时间内完成,因为其余的插入都是在常数时间内完成的,所以 n 次插入可以在 O(n) 的时间内完成...