amortized-analysis相关内容

了解摊销时间和数组插入为O(1)的原因

我正在读破解编码采访,在Big O一章中,有一个关于摊销时间的解释。这里使用了需要增长的ASN ArrayList等内容的经典示例。当数组需要增长时,假设必须将N个元素复制到新的Array,插入将花费O(N)时间。这很好。 我不明白的是,数组容量翻了一番,为什么每次插入的摊销时间,从我了解的情况来看,任何时候插入到数组,都是O(N)操作。摊销时间有什么不同?我确信文本是正确的,我只是不理解O(1 ..
发布时间:2022-03-14 12:35:54 其他开发

std::vector 插入的摊销分析

我们如何对 std::vector 中的后面(push_back)插入进行分析?每次插入的摊销时间为 O(1).特别是在 Stephan T Lavavej 的 channel9 视频 和 在此(从 17:42 开始) 他说,为了获得最佳性能,Microsoft 实施此方法将向量的容量增加了大约 1.5. 这个常数是如何确定的? 解决方案 假设你的意思是 push_back 而不是插 ..
发布时间:2022-01-07 11:35:09 C/C++开发

什么是算法的摊销分析?

它与渐近分析有何不同?你什么时候使用它,为什么? 我读过一些似乎写得很好的文章,例如: http://www.ugrad.cs.ubc.ca/~cs320/2010W2/handouts/aa-nutshell.pdf http://www.cs.princeton.edu/~fiebrink/423/AmortizedAnalysisExplained_Fiebrink.pdf ..
发布时间:2021-11-27 11:57:56 其他开发

更适合说 Amortized O(1) vs O(n) 插入未排序的动态数组?

这属于“软件算法"来自 stackoverflow.com/help/on-topic,在本例中,是一种将项目添加到动态未排序数组的软件算法 这是我们在课堂上制作的关于不同数据结构的操作运行时间的图表 我的问题是关于将值插入(或添加)到动态未排序数组的运行时.这是我们执行此操作的代码 public void insert(E value) {确保容量(大小 + 1);元素数据[大小 ..

向该结构中插入元素的摊销时间复杂度是多少?

假设您使用数组实现堆,并且每次数组已满时,您将其复制到一个两倍大小的数组中.将元素插入堆的分摊时间复杂度(最坏情况)是多少? 我认为我们有 T(n) = n * n(这是在最坏情况下一系列 n 个操作的总成本的上限),然后是摊销复杂度根据一个公式是T(n)/n = n^n/n = n. 但我认为这是非常错误的,因为从直觉上很清楚我应该得到 log(n) 或更低......那么我应该如何 ..

为什么python的list.append()方法的时间复杂度是O(1)?

如 TimeComplexity 的文档所示,Python 的 list 类型使用数组实现. 因此,如果正在使用数组并且我们执行了一些附加操作,最终您将不得不重新分配空间并将所有信息复制到新空间. 毕竟,它怎么可能是 O(1) 最坏的情况? 解决方案 如果您查看链接文档中的脚注,您会发现其中包含一个警告: 这些操作依赖于“Amortized Worst"的“Amortized ..
发布时间:2021-06-25 20:42:03 Python

在摊销分析中使用潜力和会计方法

我已经阅读了有关会计和潜在方法的信息,但仍无法解决以下问题: 解决方案 直觉 通过分析每个操作的昂贵情况和便宜情况,您可以了解如何为每个操作收费(然后您可能需要一些小的修正来“固定"数字) 通过查看数据结构的重要参数,您可以构建一个潜在函数(例如,这里是s2中的元素数) 此外,在这里看到许多示例确实有帮助 记帐方法: 让每次插入收取两个硬币:一个用于从s2弹出 ..

如果现在将索引k的位翻转为2 ^ k而不是1,那么二进制计数器中的摊销分析会怎样?

假设翻转位# i 花费2 i ;因此,翻转比特0的成本为1,翻转比特1的成本为2,翻转比特2的成本为4,依此类推。 通话的摊销成本是多少到 Increment(),如果我们称之为 n 次? 我认为 n 的增量成本应为 n ·2 0 / 2 0 ++ nbsp; n ·2 1 / 2 1 + n ·2 2 / 2 2 + … + n ·2 n -1 / 2 n −1 = n ..
发布时间:2020-06-03 21:36:55 其他开发

更恰当地说是将O(1)与O(n)摊销即可插入未排序的动态数组?

这属于stackoverflow.com/help/on-topic的“软件算法”下,在这种情况下,这是一种将项目添加到动态未排序数组的软件算法 这是我们在课堂上制作的有关不同数据结构上的操作运行时间的图表 我的问题是有关在动态未排序数组中插入(或添加)值的运行时。 这是执行此操作的代码 public void insert(E value){ sureCapacity(s ..

我如何确保从Data.Vector中并发O(n)级联?

我有一个应用程序,可以将代码的一部分使用向量。但是,在计算过程中,我需要跟踪一些元素。我听说你可以从Data.Vectors获得O(n)分期连接(按照通常的数组增长技巧),但我认为我做得不对。因此,可以说我们有以下设置: $ $ p $ import $ Data.Vector((++),Vector) import Prelude hiding((++)) import Control ..
发布时间:2018-06-05 11:20:00 其他开发

每次固定常数生成动态数组的效率?

因此,当每次添加元素时,动态数组的大小加倍,我就明白了扩展的时间复杂度是O(n)n是元素。如果数组被复制并移动到一个只有1个大小的新数组,当它是满的? (而不是加倍)当我们通过一些常量C调整大小时,它的时间复杂度总是O(n)? 解决方案 如果你增长一些固定常数C,然后不,运行时不会是O(n)。相反,它将是Θ(n 2 )。 要看到这一点,想想如果你连续执行一个C序列,会发生什么操作。在 ..

联合/查找算法,不依赖于不相交森林数据结构的联合

以下是维基百科上不相交的设置森林的联合/查找算法的细目: Barebone disjoint-set forest ...( O(n)) ...按照排序...(现在改为 O(log(n) ) ...使用路径压缩(现在改为 O(a(n))有效地 O(1)) 通过排列实现联合需要每个节点保持一个等级字段进行比较,我的问题是联合排名值得这个额外的空间?如果我通过排名跳过联盟,只是 ..

在次线性时间阵列更新最大总和subinteral当施加相邻换位

我寻求一些换位这个问题,似乎太难了,我只得到了一个答案这似乎不给保证渐近加速。因此,假设我们采用相邻换位的序列数字阵列(相邻换位交换两个相邻的号码),我们希望保持最高金额子区间的每个相邻换位后的溶液。每两个相邻的换位后,我们可以重复从头Kadane的线性时间解决整个阵列上。所以这是我想击败的。可这每相邻换位次线性的时间内完成,说,如果我们对大小为N的数组做N或N ^ 2个相邻换位,我们被允许做pr ..

由一个固定不变每次成长动态数组效率?

因此​​,当一个动态阵列的大小,每次添加的元素时间加倍,我明白扩大的时间复杂度如何为O(n)n是元素。怎么样,如果阵列复制并转移到一个新的数组,它是只有1规模更大的时候才满了吗? (而不是增加一倍),当我们被一些常数C调整,它的时间复杂度始终为O(n)? 解决方案 如果您通过一些固定的常数C增长,那么没有,运行时不会为O(n)。相反,它会与西塔;(正 2 ) 要看到这一点,想想如果你可做 ..

二进制计数器平摊分析

我想你已经知道,如果在阵列中的所有条目从0开始,每一步我们增加了1计数器(通过翻转0和1),然后按摊余成本对于k增量为O(K)。 但是,会发生什么,如果数组以N开头?我虽然也许对于k递增复杂是因为这一事实,即在开始的1的最大数量为日志现在O(的log(n)+ K),(正)。 有什么建议? 在此先感谢 解决方案 你是对的。有证明这一个以上的方式,其中之一是具有潜在功能。 此链接(和许多其他 ..
发布时间:2015-11-30 22:33:09 C/C++

在堆摊销分析

当我跑到这个话题。 我在今天的书第5-1页底部的>二项队列的斐波纳契堆和斜堆的有O(1)摊余成本进行的插入的操作和O(log n)的摊销的删除的操作成本。接下来,作者写的配对堆的有O(1)摊余成本进行插入操作和O(log n)的摊余成本进行删除操作。 在此功课中的三(3)分配和解决方案,在这 没有定义堆型链接写了O(日志N ),用于插入 和O(1)删除。 在此作业另一个作者的二项式说:堆的有 ..
发布时间:2015-11-30 22:03:10 C/C++

摊销分析分堆?

如果对空分堆,我们做的 N 任意插入和删除操作,(与删除最小堆给定的位置)。为何将摊销分析 O(1)键,删除是 O(log n)的? A)插入O(log n)的,删除O(1) B)插入O(log n)的,删除O(log n)的 C)插入O(1),删除O(1) D)插入O(1),删除O(log n)的 任何人能澄清一下吗? 解决方案 根据您的问题和应对的意见,我将承担二叉堆。 ..

为堆栈大小调整阵列平摊分析

命题。在调整大小的数组实现栈, 阵列的平均数目为操作从开始任何顺序访问 一个空的数据结构是,在最坏的情况下恒定 证明素描:对于每一个推(),导致数组增长(比如从大小N到 大小2N),审议 N / 2 - 1 推()操作,以最近引起 堆栈大小将增长到K,对于k从 N / 2 + 2到N 。平均的4N数组访问 成长与N / 2数组访问阵列(每个推送),我们得到一个平均成本 9阵列的每个操作的访问。证 ..
发布时间:2015-11-30 21:05:29 C/C++

设计一个堆叠中也能出队在O(1)摊销的时间?

我有可以被看作是存储从左到右的列表,具有以下可能操作的抽象数据类型: 推:新项目添加到列表中的左端 流行:删除就行了的左端的项目 拉:去掉就行了。右端的项目 实现此使用三个栈和不断的额外内存,从而使分期时间任何PUSH,POP,或拉的操作是不变的。该堆有基本的操作,的isEmpty,推送和流行音乐。 分期时间的意思是“如果我花这段时间内,我可以用它的另一块并将其存储在时间银行供以后使用。”像每 ..
发布时间:2015-11-30 21:02:22 C/C++