微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

摊销分析和一个基本问题有没有简单的例子?

如何解决摊销分析和一个基本问题有没有简单的例子?

我看到两句话:

一系列操作的总摊销成本必须是一个上限 限制在序列的总实际成本上

在为数据结构上的操作分配摊销成本时,您 需要确保,对于执行的任何操作序列, 摊销成本的总和始终至少与 这些操作的实际成本。

我的挑战是两件事:

A) 它们都意味着:amortized cost >= Real Cost of operation? 我认为摊销是(n* 实际成本)。

B) 有什么例子可以让我更清楚地理解吗?一个真实而简短的例子?

解决方法

摊销解决的问题是,普通操作可能会偶尔触发缓慢的操作。因此,如果我们把最坏的情况加起来,我们实际上是在观察如果垃圾收集总是在运行并且每个数据结构每次都必须在内存中移动时程序将如何执行。但是,如果我们忽略最坏的情况,我们实际上忽略了垃圾收集有时确实会运行,并且大列表有时确实会用完分配的空间并且必须移动到更大的存储桶中。

我们通过逐渐取消偶尔的大型操作来解决这个问题。一旦我们意识到有一天可能需要它,我们就会将其注销。这意味着摊销成本通常大于实际成本,因为它包括未来的工作,但有时实际成本远大于摊销成本。而且,平均而言,它们的结果大致相同。

人们开始的标准示例是一个列表实现,我们分配当前需要的空间的 2 倍,然后在空间用完时重新分配和移动它。当我在这个实现中运行 foo.append(...) 时,通常我只是插入。但有时我不得不复制整个大列表。但是,如果我只是复制并且列表中有 n 项,那么在我 append n 次之后,我需要将 2n 项复制到更大的空间。因此,我对 append 成本的摊销分析包括插入和移动 2 个项目的成本。在接下来的 n 次我称它为 append 时,我的估计超过了实际成本 n-1 次,并且少于 n 次,但平均起来完全正确。>

(Python 的实际列表实现是这样的,只是新列表的大小约为旧列表的 9/8。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。