了解摊余时间以及为什么数组插入是 O(1)

2023-11-30

我正在阅读《破解编码面试》,在 Big O 章节中,有关于摊销时间的解释。这里使用了 ArrayList 等需要增长的经典示例。当数组需要增长时,插入将花费O(N)假设必须将 N 个元素复制到新数组所需的时间。这可以。

我不明白的是,随着数组容量加倍,为什么每次插入的摊销时间会是O(1)据我所知,每当你插入数组时,它总是一个O(N)手术。摊销时间有何不同?我确信文字是正确的,我只是没有理解O(1)摊销时间概念。


我正在回答您似乎感到困惑的问题,而不是您正式提出的问题。

你真正的问题是如何附加O(1)手术。如果已经为数组的下一个元素分配了空间,那么追加只是更新有多少元素的记录,并复制该条目。这是一个O(1)手术。

如果可用空间溢出,则仅追加会很昂贵。然后你必须分配一个更大的区域,移动整个数组,并删除以前的。这是一个O(n)手术。但如果我们只是每次都这样做O(1/n)次,然后average它仍然可以出来O(n * 1/n) = O(1).

平均值是否重要取决于您的任务。如果您控制重型机械,在单个操作上花费太长时间可能意味着您无法足够快地返回到旋转刀片,这可能会很糟糕。如果您要生成网页,那么重要的是一系列操作所花费的总时间,即操作次数乘以每次操作的平均时间。

对于大多数程序员来说,平均水平才是最重要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解摊余时间以及为什么数组插入是 O(1) 的相关文章

  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 删除队列中的最后一个元素

    我需要删除队列的最后一个元素 我唯一可以使用的操作是 Peek 获取第一个元素而不删除它 Enqueue element 向队列末尾插入一个元素 Dequeue 删除第一个元素 IsEmpty true 或 false 队列是否为空 而且我
  • 如何将无向图转换为 DAG?

    The 维基页面 http en wikipedia org wiki Directed acyclic graph Relation to other kinds of graphs says 任何无向图都可以通过为其顶点选择总顺序并将每
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 分而治之策略来确定列表中是否有超过 1/3 的相同元素

    我正在使用分治算法来确定列表中是否有超过 1 3 的元素相同 例如 1 2 3 4 不 所有元素都是唯一的 1 1 2 4 5 是的 其中 2 个是相同的 没有排序 是否有分而治之的策略 我陷入了如何划分的困境 def is valid i
  • C 埃及分数

    古埃及人仅使用以下形式的分数1 n因此任何其他分数都必须表示为这些单位分数的总和 而且 所有单位分数都是不同的 在C或Java中使任何分数成为埃及分数 总和越少越好 的好方法是什么 可以使用什么算法 分支定界 a 例如 3 4 1 2 1
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 使用并集查找(又名不相交集)检测图是否是二分图

    我正在 Spoj 上做一个问题 基本上可以简化为检测图是否是二分图 我正在尝试使用 dfs 为图表着色 但它太慢了 有人评论这个 没有 bfs 没有 dfs 没有二部图 简单的并查集就可以做到 确实速度很快 提示 1 偶数长度的环不会影响两
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 归并排序中递归树的高度log(n)+1是怎么来的

    我按照 stackoveflow 的建议阅读了一些问题和答案 我正在遵循 cormen 的 算法简介 一书进行自学 那本书里已经解释得很清楚了 但唯一没有解释的是如何在合并排序分析中计算树的高度 如果在后面的章节中对此进行解释的话 我仍然在
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 在java中使用BUBBLE SORT对二维字符串数组进行排序

    类似的问题已经被问过 但从来没有关于二维字符串数组 因此在尝试了很长时间之后我找不到我想要的 我正在尝试使用 BubbleSort 对 java 中的 2D 字符串数组进行排序 作为输入 我收到一个二维字符串数组 一个表 以及您应该排序的
  • 解开 Knuth 的结:如何重构意大利面条式代码?

    这个问题的灵感来自如何将流程图转化为实施 https stackoverflow com questions 36647765它询问如何通过算法消除goto代码中的语句 这answer https stackoverflow com a 3
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑

随机推荐

  • xts 与另一个 xts 对象的比较不起作用

    this structure c 0 012 0 028 0 044 0 033 0 039 0 042 Dim c 3L 2L Dimnames list NULL c one two index structure c 13136436
  • PyGObject 和 Glade 将窗口发送到前面

    我在向前端发送 GTK 窗口时遇到一些问题 我有一个主窗口 window root 带有启动另一个窗口的按钮 window programs 用这个命令 window root hide window programs show 那么 在w
  • SQLAlchemy 尝试两次删除多对多次要关系

    我有一个product具有多对多关系的模型product categories如下所述 class Product Base The SQLAlchemy declarative model class for a Product obje
  • 在 foreach 循环中调用存储过程 - 仅首先执行

    这确实是衍生自我今天早些时候提出的问题 我在数据库中创建了一个存储过程 我想从 PHP 中连续调用它多次 假设这是我的程序 CREATE PROCEDURE PROC 1 IN param1 VARCHAR 255 IN param2 VA
  • 是否有任何符合 ACID 的 NoSQL 数据存储?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 有没有NoSQL数据存储是ACID符合吗 我将其发布为纯粹为了支持对话的答案 Tim Mahy nawroth and Cra
  • 页面导航WP8.1

    我为 WP8 制作了一个应用程序 并使用了页面导航 例如NavigationService Navigate new Uri 并且运作良好 但现在我正在尝试开发一个 WP8 1 应用程序 但不知道进展如何 我收到以下错误The name N
  • 尝试从字符串名称访问 $_SERVER(或任何全局)变量[重复]

    这个问题在这里已经有答案了 今天我遇到了如此可怕的情况 看来这个错误与PHP 我正在尝试访问 SERVER或另一个超级全局变量 但来自字符串名称 此版本的实施正在运行 var dump SERVER working 但是 当尝试使用变量执行
  • Windows Phone 8.1 模拟器启动问题

    在 Windows Phone 8 1 模拟器中启动示例应用程序时 我收到此错误 错误 1 错误 DEP6100 在 boostrapping 阶段 连接到设备 期间发生以下意外错误 SmartDeviceException 应用程序部署失
  • 合并文件给出错误:文件结尾,预期行

    我在用着Android 版 PdfBox为了将数据附加到PDF file 要附加的数据 public byte prerparePdfToAppend final PDDocument document new PDDocument fin
  • 找不到处理 Intent { act=android.media.action.IMAGE_CAPTURE } 的 Activity

    当我尝试调用 ACTION IMAGE CAPTURE 意图时 我在 Android 应用程序中收到了以下崩溃报告 这段代码已经在我的应用程序中运行了几个月 没有出现任何问题 我猜测这是特定于某种类型的手机的 但不幸的是 Google 没有
  • 音频音高和速度修改

    我需要修改音频的音调或节奏 但需要单独进行 Android 中是否有任何示例或任何为 Android 提供支持的库 我想避免为此使用 NDK JNI 因为我不太喜欢它 我已经看过很多库 虽然它们有很好的教程 但我无法将它们导入到 Eclip
  • 使用“publisher”属性的正确方法(“属性publisher.itemtype具有无效值。”)

    当我尝试使用 Google 的结构化数据测试工具验证结构化数据时 出现错误 属性publisher itemtype 具有无效值 我在这条线上得到了这一点 我如何提供该属性的有效值 的期望值publisher属性是另一个项目 Organiz
  • 使用 Javascript 正则表达式匹配重音字符

    这是我今天遇到的一个有趣的片段 ba test a gt true b test gt false However test gt true 首先 wtf 其次 如果我想匹配单词开头的重音字符 我该怎么做 我真的很想避免使用像这样的顶级选择
  • 获取不发送发布数据[重复]

    这个问题在这里已经有答案了 我遇到了这个问题 由于某种原因我无法通过 POST 将数据发送到另一个 PHP 脚本fetch API 我已经检查了其他解决方案并清理了我的代码 但它仍然无法工作 也许我错过了一些东西 这是我的代码 functi
  • 在 Dart 中顺序处理可变数量的异步函数

    我需要在Dart中重复调用一个异步函数 我们调用一下expensiveFunction 对于可变数量的参数 但是 由于每个调用都非常消耗内存 因此我无法并行运行它们 我如何强制它们按顺序运行 我已经尝试过这个 argList forEach
  • java.lang.UnsatisfiedLinkError:未找到本机方法

    我正在尝试制作 NDK 应用程序 但收到此错误 java lang UnsatisfiedLinkError Native method not found com example hellondk jni HelloNDK hello I
  • JDialog - 如何更改图标

    我想更改 JDialog 的图标 以替换标准 java cup 我可以这样做 ImageIcon img new ImageIcon OuterClass class getResource fileThatWorks jpg myJDia
  • vista/xp 中如何调节主音量

    我想以编程方式调整音量 例如 Vista 和 XP 中的 Get SetMasterVolume 使用mmsystem单位 以下是音频通用 api 的实现 MMDevApi http social msdn microsoft com Fo
  • 设置活动未启动

    到目前为止我已经编码 public class WidgetActivity extends AppWidgetProvider public void onReceive Context context Intent intent Str
  • 了解摊余时间以及为什么数组插入是 O(1)

    我正在阅读 破解编码面试 在 Big O 章节中 有关于摊销时间的解释 这里使用了 ArrayList 等需要增长的经典示例 当数组需要增长时 插入将花费O N 假设必须将 N 个元素复制到新数组所需的时间 这可以 我不明白的是 随着数组容