问题:
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/