在固定大小的桶中对齐不同大小的元素的算法

标签 algorithm partitioning bucket

问题:

1) I have buckets of fixed size, in my case 64. This cannot change.
2) Values vary in size, but are never bigger than a bucket (64).
3) Access is much slower if any element is split between buckets.

是否有某种算法可以计算桶中元素的最佳顺序?

这里有两种变体,我对这两种变体都感兴趣,以使代码的用户能够在速度和内存使用之间进行选择:

A) Splitting is allowed, but should be minimized.
B) Splitting is not allowed, and padding should be minimized.

请发布算法,或者它们的链接,或者至少它们的名称,如果它们是“众所周知的”。互联网搜索没有返回任何有用的信息,可能是因为答案淹没在不相关的结果中,例如最佳存储桶大小和哈希表中的分区数据。

目标语言是 Java,但我认为这不会有什么不同。

最佳答案

我认为您可以使用内存分配算法,例如首次适配、最佳适配或最差适配(您可以阅读这些算法 here ):它们只是最优解的启发式近似,但我怀疑您的原始问题与 bin-packing problem 有关不知何故,可能是 NP-hard 最佳解决。尝试使用近似算法,只有在没有它就无法放置元素时才拆分。

关于在固定大小的桶中对齐不同大小的元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11069926/

相关文章:

sql - 使用 SQL Server 查找某个项目在给定期间搜索算法中是否可预订

algorithm - 遍历单向链表随机取一个元素

apache-spark - 为什么 sortBy 转换会触发 Spark 作业?

scala - Apache Spark 使用在一个执行器上运行一项任务

oracle - 如何从表中分离分区并将其附加到oracle中的另一个?

amazon-web-services - 在路径样式弃用后,存储桶名称中仍允许使用句点 (.)

c# - C# 中的油漆桶函数代码,运行时挂起,

amazon-s3 - 我需要在 s3 存储桶中配置 CORS 我拥有的代码不是有效的 JSON

c++ - 如何在C++中创建可变尺寸的网格?

ruby - 在 ruby​​ 算法中使用堆