Algorithm 向该结构插入元素的摊销时间复杂度是多少?
假设使用数组实现堆,并且每次数组已满时,都将其复制到一个大小为其两倍的数组中。将元素插入堆的摊销时间复杂度(最坏情况下)是多少 我认为我们有Algorithm 向该结构插入元素的摊销时间复杂度是多少?,algorithm,data-structures,heap,time-complexity,amortized-analysis,Algorithm,Data Structures,Heap,Time Complexity,Amortized Analysis,假设使用数组实现堆,并且每次数组已满时,都将其复制到一个大小为其两倍的数组中。将元素插入堆的摊销时间复杂度(最坏情况下)是多少 我认为我们有T(n)=n*n(这是最坏情况下n个操作序列的总成本的上界),然后根据一个公式的摊销复杂性是T(n)/n=n^n/n=n 但我认为这是非常错误的,因为直觉很清楚,我应该得到log(n)或更低。。。那么我应该如何计算呢?想象一下,您将n个元素插入到以这种方式表示的堆中。您需要考虑两种不同的成本来源: 堆操作的成本,忽略底层数组的大小调整 阵列的成本会调整大小,
T(n)=n*n
(这是最坏情况下n个操作序列的总成本的上界),然后根据一个公式的摊销复杂性是T(n)/n=n^n/n=n
但我认为这是非常错误的,因为直觉很清楚,我应该得到
log(n)
或更低。。。那么我应该如何计算呢?想象一下,您将n个元素插入到以这种方式表示的堆中。您需要考虑两种不同的成本来源:
总的来说,在n个操作中完成的总工时为O(n logn),因此每个操作的摊销成本为O(logn)。Offtopic。这不是一个编程问题。为什么?这里有一个数据结构标签和许多类似的问题。我想你弄错了唯一我不同意(或不理解)的部分是
,我知道调整大小的成本是O(n)。我的问题是,计算摊销时间复杂度的公式是什么?最坏情况下的摊销时间复杂度意味着什么?@user3386109因为所有结果都是O(n),所以我只是给出了一个很好且宽松的上限。@UFCInsider本身没有“公式”。您只需将所有操作完成的总工时相加,然后除以操作数即可。“摊余最坏情况”成本将是可完成的最大工作量除以作业数量。