- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
似乎下面(行)给出的信息不够清楚,所以我试图更清楚和简洁。
我需要关于如何将数十亿个 ulong 值映射到几个 int 值的建议。在最坏的情况下,我有超过 110 亿个(基本上是随机的 ulong 值)需要映射到 40 个 int 值。映射是已知的,字典可以工作,但需要的内存量除外。目前,估计在使用字典时大约 199GB 的 RAM 将用于所有需要的映射。
有谁知道可以使用任何类型的算法或过程来完成此映射而不消耗那么多 RAM?
我正在开发一个 C# - .NET 4.5 程序来帮助过滤我的数据,但遇到了效率问题。我目前正在通过 8 个(我最终需要做 20 个)不同的过滤器运行我的数据,每个过滤器都以相同的方式但在不同的级别过滤数据。在过滤过程的某个时刻,每个级别都有许多值必须编码到最终输出值中。
一些例子:
在第 3 级,有 23 个值被编码为 6 个可能的输出值 (0-5)。
在第 7 级,有 2,576 个值要编码为 14 个可能的输出值 (0-13)。
在第 10 级,有 88,215 个值被编码为 20 个可能的输出值 (0-19)。
当我达到 20 级时,我将有超过 110 亿个值被编码为 40 个输出值 (0-39)。
要为每个过滤器编码的值都是事先已知的,我正在从文件中读取此信息并为每个过滤器(当前为 1 到 8)填充一个单独的字典。按照这个速度,到我过滤 20 个时,将有超过 165 亿个字典条目,其中大部分是 ulong 值。
从长远来看,这不是解决方案。
有谁知道可以更有效地将数百万个唯一输入值映射到几个唯一输出值的方法吗?
是否有一种算法可以将输入映射到输出?
我正在寻找任何可能为我指明正确方向的想法。
最佳答案
如果输入 CSV 文件中的值已排序,并且数据永远不会改变,我们可以放弃注释中的桶方法,只需将所有数据对塞入文件中的一个大数组中。目标是更好地组织数据,实现快速读取,从而避免将整个数据集存储在内存中。您必须将 CSV 文件转换为新的二进制格式,并在此过程中在内存中创建索引数组。这个索引数组也应该保存到某个索引文件中,以便程序重新启动时可以使用。在内存中,您只会保存其值以项目索引开头的第一个数据对的位置数组。在文件中,您将只有一个巨大的 32 位(4 字节)数字数组,其中每个数字的前 3 个字节是内存中索引项的剩余部分,最后一个字节是我们的输出。
要创建索引数组,您需要逐行读取 CSV 文件。为每个数据对(input_int
、output_int
)创建新的数据对(index
、32 位值
)。 Index
采用 input_int
的前 2 个字节,32 位值
是通过连接 input_int
的最后 3 个字节创建的,并且output_int
的唯一字节。如果 index
与之前的数据对发生了变化,则将文件的位置存储到新索引处的数组中。在任何情况下,将 32 位值
附加到文件。重复直到 CSV 文件结束。
假设我们有一个输入值 0x1234567890 并且需要相应的输出值。算法将在内存中找到索引为 0x1234 和 0x1235 的数组中的项。这将为您提供我们的项目可能在文件中的开始和结束位置。在此范围内,我们对值 0x567890 执行 binary search 并获取其后的字节。这就是我们的产值。
关于c# - 有效地将超过 180 亿个输入值映射到几个输出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057690/
我使用这个 cmd 应用程序 https://github.com/tokland/youtube-upload 上传 50 个视频后,我收到此错误: [RequestError] Server re
尝试将 docker 容器提交到镜像时出现错误: [root@dockerregistry /]# docker commit da4180ab1536 dockerregistry:5000/myi
我只是想知道这样做会更好吗: if((fd = open(filename, O_RDWR)) == -1) { fprintf(stderr, "open [ %s ]\n", strerror(e
我在我的开发机器(单个笔记本)中使用 Elasticsearch 1.4.4。一切都设置为默认值,因为我从未更改过任何设置。 当我启动它时,我通常会收到以下消息: [2015-10-27 09:38:
我收到错误 Lock wait timeout exceeded;尝试重新启动事务。这是什么原因,如何解决?仅供引用:MySQL 配置文件中的 innodb_lock_wait_timeout = 1
我对 Slack 中的 block 功能有疑问。有人设法构建 3 列而不是 2 列吗? 我凭直觉尝试了以下代码,但它不起作用: { "blocks": [ {
div 中的内容超过由 css 决定的固定大小。 #fixeddiv { position: fixed; margin: auto; max-height: 300px
我想将 EditText 字段限制为 150 个字符,我可以很容易地做到这一点。但是,当用户试图超过该限制时,我还需要通过键入(即第 151 个字符)或粘贴超过 150 个字符来提醒用户。 解决这个问
我目前正在使用此代码并排记录两个窗口: ffmpeg -f gdigrab -framerate 30 -i title="" -f gdigrab -framerate 30 -i title=""
我在几个包含长字符串的单元格上使用嵌套的 SUBSTITUE 函数,并定期更新 SUBSTITUE fx,这导致我将其复制并粘贴到所有需要它的单元格中。问题是,我的 SUBSTITUTE 列表会随着时
我创建了一个标题 div,如下所示:
Here is the demo link 您怎么看,页面中只有 8 个广告可见,但我有 14 个广告。我已阅读有关广告限制的信息 here但不明白是不是我的情况?有人可以给我确切的答案,为什么我看不
我的非常简单的算法 - C 中的快速排序有问题。它非常有效(随机化大约 0.1 秒并检查列表是否已排序)但是当我想要对超过 500k 的元素进行排序时它会崩溃。不幸的是,我需要对它们进行更多排序,因为
我成功解决了一个关于 Hackerrank 的问题,它通过了所有测试用例,但我得到了一个错误,超过了时间限制。我猜如果我优化我的代码它会工作,但我想不出任何方法来使我的代码更有效率。 问题是: 对大小
你会如何用 包围下面的文字3 个反引号 ```使用 tpope 的 Vim Surround . 我所能做的就是 1 个反引号 使用 S`在视觉模式下: 最佳答案 这不是你问的,但这可以在没有环绕的情
我目前有一个模拟账户。我正在尝试为我的雇主使用 SwifType 制作 POC。我们有一个非常大的数据库,每 1 小时索引一次,并创建一个 JSON 文件。我认为与 Elastic 的集成将非常容易,
我为一个大约有 100 到 120 名成员的小型组织维护网站。 每个月,我们都会发送一封电子邮件,通知我们的成员我们将在即将举行的 session 中讨论的主题。 我正在尝试使用我们的网站为我们提供一
这个问题已经有答案了: How to automatically input an array formula as string with more than 255 characters in l
我有一个在 JBoss 6.1 中运行的 JSF 应用程序,它使用内部Tomcat Servlet 容器。 我已经通过apache commons文件上传实现了上传。我想防止上传过大的文件并设置了属性
当我尝试在 PyMySQL 上执行查询时,出现以下错误: pymysql.err.InternalError: (1205, 'Lock wait timeout exceeded; try rest
我是一名优秀的程序员,十分优秀!