【发布时间】:2014-07-26 03:08:22
【问题描述】:
我遇到了以下问题:
令 S 为大小为 n >= 1 的堆栈。从空堆栈开始,假设我们按顺序压入前 n 个自然数,然后执行 n 个弹出操作。假设 Push 和 Pop 操作各花费 X 秒,并且从一个此类堆栈操作结束到下一个操作开始之间经过 Y 秒。对于 m >= 1,将 m 的堆栈寿命定义为从 Push(m) 结束到从 S 中删除 m 的弹出操作开始所经过的时间。此堆栈中元素的平均堆栈寿命为
问题的答案应该是n(X+Y)-X。
我不明白为什么。有人可以解释一下吗?
我对这个问题的看法:
找出堆栈中任何对象的平均生命周期相当于找出堆栈中间元素的生命周期,在这种情况下为n/2。
如果您认为n 是奇数,那么n/2 完美地划分了列表
从只添加中间元素到添加第n个元素的时间为n/2(X+Y)
从推送第 n 个元素到弹出它的时间是Y
从弹出所有元素到下一个操作弹出第 n/2 个元素之间经过的时间(包括操作之间的等待时间,即 Y)是 n/2(X+Y)
Total time = (n/2)(X+Y)+Y
有人能指出我的方法哪里出错了吗?
谢谢
【问题讨论】:
-
生命周期是在推送/弹出的开始还是结束时开始/结束?我的意思是当
n=1是被认为是Y、X+Y、Y+X或X+Y+X的元素的生命周期时? -
只是出于好奇:为什么要知道这个?
-
push 和 pop 都需要时间,并且两者之间存在间隔。您似乎只计算推送所需的时间(这就是您获得一半时间的原因)。