我正在试图找出一种算法,它可以帮助我将各种不同大小的文件分组成大小相等的'n'组。
关于如何实现这一目标的任何想法?
答案 0 :(得分:6)
Find the target group size. This is the sum of all sizes divided by n.
Create a list of sizes.
Sort the files decreasing in size.
for each group
while the remaining space in your group is bigger than the first element of the list
take the first element of the list and move it to the group
for each element
find the elemnet for which the difference between group size and target group size is minimal
move this elemnt to the group
这不会产生最佳效果,但易于实施并获得良好效果。对于最佳解决方案,您需要进行详尽的搜索,即NP完成。
答案 1 :(得分:2)
K means可能会对您有所帮助。研究更高级的聚类算法是一个很好的起点,但鉴于你的问题是一维的,k-means应该绰绰有余。
答案 2 :(得分:2)
您的隐式优化目标最有可能最小化n,组数。然后你有bin packing problem,有时称为cutting stock problem。
Netlib有fortran code来解决更一般的多背包问题(项目有利润以及成本/重量值)。