对硬盘中的大量整数进行排序

2023-11-22

给定硬盘上 100 GB 整数数据,RAM 为 2 GB,如何以最少的磁盘操作对整数进行排序。这里从磁盘获取一个数字被视为一次磁盘操作(尽管实际上可以获取一块数据)。

我们可以使用磁盘上的额外空间进行临时存储,而不需要考虑清理已使用的临时空间的操作。


正如其他人所指出的,您可以使用 O(n)计数排序。但是,您还需要考虑一些其他问题。我们假设您存储 32 位整数,即 100GB ~ 27e9 个整数。

如果所有整数都相同,那么它将出现约 27e9 次,这比 32 位 int 还要大。因此您的计数器必须是 64 位整数。

对于 2GB RAM,您一次只能在 RAM 中存储 ~125e6 个计数器。如果我们不能对整数的分布做出任何假设,我们要么必须:

  • 单独增加 HD 上的计数器,或者
  • 忽略我们遇到的所有不在我们当前存储在 RAM 中的计数器数组中的整数。

我认为后一种选择更好。由于我们需要约 4e9 个 64 位计数器并且只能存储 2GB,因此我们需要运行整个数组约 16 次。如果我们考虑遇到诸如 0,1

因此,我认为对于你的问题的具体大小(100GB),N路合并sort 会更好,因为这只需要读取整个数组 log_2(100) ~ 8 次。

然而,如果面试官立即将问题改为“10TB阵列,仍然是2GB RAM”,那么计数排序将轻松获胜。

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

对硬盘中的大量整数进行排序 的相关文章

  • 使用区间树的最大区间重叠[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 O(log n) 中查找排序矩阵(行 n 列)中的数字 [重复]

    这个问题在这里已经有答案了 假设我有一个矩阵 MxN 其行和列已排序 每行中的所有元素均按升序排列 每列中的所有元素均按升序排列 所有元素均为整数 无法做出其他假设 Example 1 5 8 20 2 9 19 21 12 15 25 3
  • 以小于 O(n^2) 的复杂度计算两个数组中的互质对数量

    我在挑战中遇到了这个问题 有两个数组 A 和 B 的大小均为 N 我们需要返回对的计数 A i B j 其中gcd A i B j 1 and A i B j 我只能想到暴力方法 它超出了少数测试用例的时间限制 for int i 0 i
  • 如何计算列表的最小不公平性总和

    我试图将问题陈述总结如下 Given n k和一个数组 列表 arr where n len arr and k is an integer in set 1 n inclusive 对于数组 或列表 myList 不公平总和定义为sum中
  • 什么是确定性快速排序?

    我一直在阅读有关快速排序的内容 发现有时它被称为 确定性快速排序 这是普通快速排序的替代版本吗 普通快速排序和确定性快速排序有什么区别 普通 确定性 快速排序在特定数据集上的行为可能非常差 例如 选择第一个未排序元素的实现在已排序数据上的时
  • 基数首先排序最重要的还是最不重要的,哪个更快?

    我一直在研究基数排序实现 到目前为止粘贴在下面的代码 代码是用 Java 编写的 但在 C C 中应该也能正常工作 正如您从实现中看到的 我首先执行最高有效位 即整数的第 31 位 这似乎更快 因为一旦子组完成 就不再需要迭代 例如 打个比
  • 数组中的重复元素[重复]

    这个问题在这里已经有答案了 这有点与this https stackoverflow com questions 2605766 how to find a duplicate element in an array of shuffled
  • 优化 HTML 属性压缩顺序

    我在某处读到 按一定顺序组织 HTML 属性可以提高 HTML 文档的压缩率 我想我是从 Google 或 Yahoo 推荐的更快网站上读到这篇文章的 如果我没记错的话 建议是将最常见的属性放在第一位 例如id等 然后将其余的按字母顺序排列
  • 找到不(必要)与二进制矩阵中的图像边界对齐的最大矩形

    我在用这个解决方案 https stackoverflow com questions 2478447 find largest rectangle containing only zeros in an nn binary matrix在
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 坐标算法 - 绕中心旋转

    通过查看这张图片 我想您会很好地理解我的问题 图片已删除 网址不再有效 现在返回广告 所以基本上我想要一个函数 它接受一个对象作为参数 并根据我之前添加的对象数量为该对象提供正确的坐标 假设我将所有这些对象添加到一个数组中 objectAr
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • 重写修改后的 goto 语义的算法

    我有一大堆使用旧的自行设计的脚本语言编写的遗留代码 我们将它们编译 翻译成 javascript 该语言有条件跳转 跳转到标签 与普通 goto 语句的区别在于 不可能向后跳转 该语言中没有嵌套的 if 语句或循环 由于 javascrip

随机推荐

  • 如何在不使用 Vidalia 的情况下强制 Tor 使用新身份?

    我在用Tor在我的项目中 如何强制 Tor 使用我的程序中的新身份 打开与 Tor 服务控制端口的 telnet 连接并发送SIGNAL NEWNYM 我希望你可以使用任何 Delphi telnet 库 我的第一选择是Indy 确保你有最
  • 从finally块返回时Java的奇怪行为

    试试这段代码 为什么 getValueB 返回 1 而不是 2 毕竟 increment 函数被调用了两次 public class ReturningFromFinally public static int getValueA This
  • 每个用户仅允许一次会话

    我们有一个使用 struts2 spring 和 hibernate 开发的 Web 应用程序 该应用程序需要一个用户只能从一个浏览器登录的功能 假设用户 x 在 pc 1 浏览器 ff 上登录 那么他无法从任何其他地方登录 我尝试通过实现
  • 从 C# 调用 Delphi DLL 会产生意外结果

    我有一个不是我编写的 Delphi DLL 但需要从 C ASP NET 3 5 应用程序调用 这是我从开发人员那里得到的函数定义 function CreateCode SerialID String StartDateOfYear Ye
  • Django Celery 实现 - OSError:[Errno 38] 函数未实现

    我安装了 django celery 并尝试启动工作服务器 但收到一个 OSError 消息 表明函数未实现 我在 VPS 上运行 CentOS 版本 5 4 最终版 broker gt amqp guest localhost 5672
  • 对数字字符串的 ArrayList 进行排序

    最快的排序方法是什么ArrayList
  • 用户窗体未触发初始化或激活事件

    我在工作表中保留了一个用户窗体控制按钮来启动一个宏 该宏又显示一个用户窗体 在窗体中我希望在复选框中显示打开的文件 使用工作簿集合 我希望运行一个执行的宏仅对用户选择的文件执行操作 因此 对于工作表中的按钮 我分配了以下宏 Private
  • Jackson 注释被忽略

    我正在尝试使用 Jackson 注释来重新命名序列化过程中生成的一些 json 标签 所有注释都编译良好 当我运行时 杰克逊序列化可以正常工作 但所有杰克逊注释都被完全忽略 即使像 JsonIgnore 或 JsonProperty 这样的
  • 当后端在 Docker 容器中运行时,Keycloak 令牌验证失败

    我正处于构建网络应用程序的早期阶段 我打算使用 Keycloak 作为身份提供者来保护后端 在我的本地计算机上 我将 Keycloak 和后端作为 docker 容器运行 但在不同的网络上 因为最终在生产中 我希望运行 Keycloak 的
  • Flutter:http get 请求不适用于 apk 发布

    关于我的问题有几个类似的问题 但所有这些问题中给出的解决方案都不适合我 所以我尝试用我的问题的详细信息打开另一个问题 我希望有人能帮助我 Context 我正在学习 flutter 和 dart 作为初学者 我想实现一个使用 CRUD 操作
  • 条形图图例上的框架边框可以删除吗?

    我正在 Mathematica 中创建用于各种绘图 图表绘制的应用程序 最终它将有一个 GUI 但第一步是获得正确的代码 并且足够简单以便 GUI 可以管理 我很难将图例设置为没有框架 这是一个最小的例子 有一些选项BarChart已经定制
  • Android将CID位置转换为坐标

    我构建了一个 Android 应用程序 它可以处理来自 Google 地图的共享意图并显示它的坐标 问题是他们发送了一个短网址 我用 Google 的 url Shortner api 进行解码 在某些情况下 结果长链接是这种类型的 谁能帮
  • “指向未初始化的字节”Valgrind 错误

    我一直在使用Valgrind在我的代码中查找内存泄漏 虽然没有发现内存泄漏 但报告了一些错误 所有这些错误都源自单个函数 类方法 17043 ERROR SUMMARY 10100 errors from 3 contexts suppre
  • 让 Github 在收到更新时推送到远程服务器

    让 Github 自动将任何更新推送到远程服务器的设置是什么 这对于维护 Github 上的代码库以及让网站运行该代码库非常有用 我的存储库位于我自己的计算机上 这就是我工作的地方 我将更改提交到本地存储库 并将它们推送到我的 Github
  • 什么是堆中的类型对象

    我知道当在堆中创建对象时 它们还有额外的两个字段 同步块索引 类型对象指针 所以我想知道Type Object是什么时候在Heap内存中创建的以及它保存什么样的数据 它只代表Type的元数据 我还没有找到更多关于这方面的细节 Type 对象
  • ASP MVC3 在actionlink中插入html标签

    我是 ASP MVC3 的新手 我正在使用 Razor 引擎 我的问题是我已经以表单构建了主导航
  • 如何获得行排名?

    HI 我昨天实际上发布了类似 或相同 的问题 但我认为我需要发布一个新问题 因为我有简短但明确的问题 我有下表 id point 1 30 2 30 3 29 4 27 5 28 6 26 我想要的是 获取所有用户按排名排序 用户 1 和
  • 多个 OpenGL 视图 (Cocos2D)

    Note 任何可以帮助我正确解决这个问题的人都会得到100点赏金 在我的应用程序中 我将 UIKit 与 Cocos2D 混合在一起 我使用 addSubview 和 removeFromSuperview 调用做了一些简单的自定义视图动画
  • 在 scalatest 中用什么代替符号?

    在 scalatest 中 您应该能够使用如下符号测试布尔属性 iter shouldBe traversableAgain 但这种表示法在最新版本的 scala 中已被弃用 所以现在你应该这样写 iter shouldBe Symbol
  • 对硬盘中的大量整数进行排序

    给定硬盘上 100 GB 整数数据 RAM 为 2 GB 如何以最少的磁盘操作对整数进行排序 这里从磁盘获取一个数字被视为一次磁盘操作 尽管实际上可以获取一块数据 我们可以使用磁盘上的额外空间进行临时存储 而不需要考虑清理已使用的临时空间的