将可变大小的项目平衡为粗略平衡的集合的算法

Gno*_*ian 6 c# asp.net algorithm math logic

我正在寻找一种算法,将不同大小的项目列表分成"N"个类似大小的组.

具体来说,我正在使用C#中的ASP.NET站点,在那里我有一个(数据库检索的)字符串列表.琴弦的长度各不相同.我有一组需要显示字符串的列.我需要一种算法来找到最平衡的集合(项目顺序无关紧要),以允许最终的列尽可能平衡.

抽象示例:

创建3列.

要分发的项目:

 - Item A - height 5
 - Item B - height 3
 - Item C - height 7
 - Item D - height 2
 - Item E - height 3
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Column 1: Item A, Item D
Column 2: Item C
Column 3: Item B, Item E
Run Code Online (Sandbox Code Playgroud)

TMN*_*TMN 5

最快的方法可能是将每个新项目插入到最小的列表中(其中“最小”是列表中所有项目的大小之和)。

  • 你可以先对物品进行排序(从大到小),这样会改善很多。最后的小物品可以很好地调平柱子。考虑将 3,3,6 分布在两列上:您不希望最终得到 [3,6] [3]。 (2认同)