我读过很多关于摊销分析的解释以及它与平均案例分析的区别。 然而,我还没有找到一个单一的解释来说明,对于一个特定的例子,对于这两种分析都是明智的,两者会如何给出渐近不同的结果。 摊销运行时间分析最广泛的示例表明,将元素附加到动态数组需要 O(1) 摊销时间(如果数组的长度是 2 的精确幂,则操作的运行 ...
我读过很多关于摊销分析的解释以及它与平均案例分析的区别。 然而,我还没有找到一个单一的解释来说明,对于一个特定的例子,对于这两种分析都是明智的,两者会如何给出渐近不同的结果。 摊销运行时间分析最广泛的示例表明,将元素附加到动态数组需要 O(1) 摊销时间(如果数组的长度是 2 的精确幂,则操作的运行 ...
考虑简单的表达式: c = ((a * b) / (x * y)) * sqrt(a * b + 1 + x * y) 计算机只需要计算a * b和x * y一次,但是计算给定的表达式会使计算机计算它们两次。 最好这样写: 是否有 function(最好是 python,但任何语言都应该足够)将第 ...
我的目标是编写一个算法来检查未排序的正整数数组是否包含值 x 和 x^2,如果包含,则返回它们的索引。 我已经解决了这个问题,建议首先使用归并排序对数组进行排序,然后对 x 执行二进制搜索,然后对 x^2 执行二进制搜索。 然后我写道:“由于二分搜索的最坏情况运行时间为 O(log n),归并排序的 ...
更新:这个问题是我们如何对不可变的 collections 使用摊销分析? Scala 的不可变队列只是一个例子。 从源代码中可以清楚地看到这个不可变队列是如何实现的。 正如在答案中指出的那样,Scala 的消息来源并没有提到所有的摊销时间。 但是指南和互联网播客可以。 正如我所见,C# 具有类 ...
从 web 中找到的材料来看,当列表已满时,似乎 Python 列表中的容量不会翻倍。 https://medium.com/analytics-vidhya/amortized-runtime-analysis-for-python-lists-35e935e290db Java 的 Arr ...
我试图找到算法的摊销时间复杂度,但是当我将数据导出到 csv 文件并绘制图表时,这就是我想出的。 我试图实现 O(logn) 的摊销时间复杂度,但显然情况并非如此。 这是什么时间复杂度? ...
嗨,我怎样才能找到数据结构中恒定增量的摊销成本,例如,如果数组的大小每次增加 1000 即(从 N -> N+1000)如果它溢出并且还通过固定因子,即来自 (N -> 7*N) 我知道当它像 1 -> 2, 2-> 4 一样翻倍时它是如何工作的,但我很难了解恒定增量 ...
我无法理解这个问题,知道这个问题的人可以告诉我解决方案吗? 负责敲钟的弗朗西斯神父制造了一个自动敲钟的装置。 在每个准确的时间,设备至少会响起 n 个铃声中的 1 个。 具体来说,第 i 个铃声每 1 小时响一次。 例如,假设 n = 4 并且弗朗西斯科神父在午夜刚过就打开了他的设备。 铃声的响铃 ...
我想对动态数组进行摊销分析:当我们执行一系列 n 插入时,每当一个大小为 k 的数组填满时,我们重新分配一个大小为 k+sqrt(k) 的数组,并复制现有的 k 值进入新数组。 我是摊销分析的新手,这是我还没有遇到的问题,因为我们每次都用不同的非常量值调整数组的大小。 (newSize=prev ...
在我看到的任何地方(在 SO 和其他来源上),摊销分析通常仅适用于数据结构。 例如对于动态数组或展开树。 但是,我还没有看到对纯算法进行摊销分析的应用。 说算法的摊销分析有意义吗? 摊销分析假设了一系列操作,这对于数据结构是正确的,但对于算法则不是。 ...
我正在尝试使用潜在方法对斐波那契堆进行摊销分析。 我正在努力理解 pop min / delete min 操作的分析。 在教程中,我可以找到限制“pop min”操作的摊销复杂度,例如这个,教程作者将潜力设置为“phi(fib heap) = 根节点数 + 2 * 失败者节点数”。 然后,他们分 ...
我正在寻找一种数据结构,可以让我有效地执行所需的操作。 我希望遍历 10 11到 10 13次之间的循环,因此 Ω( n ) 操作是正确的。 (我将尝试减少n以便它可以放入缓存中,但它不会很小。)每次通过循环我都会调用 分钟正好一次 只删除一次(删除最小值,如果有帮助) 插入0~2次,平 ...
我知道,当您通过标量调整数组大小时(例如将数组的长度加倍,然后将所有元素复制到新的大数组中),摊销时间复杂度为 O(1)。 但是为什么当你用一个常数(比如,每次将其大小调整 +10)而不是 O(1) 时,会出现这种情况呢? 编辑: https://www.cs.utexas.edu/~slaber ...
我已经阅读了有关会计和潜在方法的信息,但我仍然无法解决这些问题: ...
假设我们在一个最初为空的堆栈上执行一系列操作(即,top、push 和 pop),以便堆栈大小不超过 k。 在每 k 次操作之后,我们制作整个堆栈的副本以用于备份目的。 我如何使用会计方法证明每个堆栈操作将具有 O(1) 摊销复杂度,无论堆栈是否被复制? ...
我不确定我对摊销分析的理解是否正确。 例如,如果我们的摊销成本为 O(1),并且进行 m 次操作,成本为 O(m)。 我们可以说最坏的情况是 m 操作的 O(m)*m 吗? ...
我解决了问题的第一部分,但卡在了第二部分。 我有一部电梯,想要支持以下内容: Init()设置电梯从0层开始,运行方向为向上(这个function只调用一次,方向不能改变)。 O(1) AddStop(K)将电梯到达 k 层时应该停止的指令保存到 DS 中。 O(log n) 而 n 是电梯 ...
我的教授在 class 中显示了以下问题,并提到答案是 O(1) 而我的完全不同,我希望得到一些帮助,了解我犯了哪些错误。 问题: 计算 AVL 树中 F 方法的摊销时间复杂度,当我们从最小节点开始,并且每次我们在最后找到的成员上调用 F 时。 F 的描述:当我们在特定节点时,F 继续像中序遍历一 ...
我最近遇到了一个面试问题。 没有提供任何其他信息(也许应该使用默认实现......) n 对空最小堆(删除元素的位置已知)的任意插入和删除操作序列的摊销成本为: A) 插入 O(1),删除 O(log n) B) 插入 O(log n),删除 O(1) 选项( B )是正确的。 当我看到答卷时 ...
Splay Tree 插入/删除可以通过不同的方式完成。 一种流行的方法是插入密钥并将其展开到根目录。 但是我也读过一种不同的方法,这个想法是将它分成两棵树,这样左边的树有 values <= the insert key ,右边的树有 value > the insert key 。 ...