在 N 列中均匀分布文本的算法

Algorithm to distribute text evenly across N columns

实现CSS平衡填充的多列布局的算法是什么?

数学公式:给定一个正数列表(即要排列的项目的高度),将它们按顺序分布到 N 个列表中,使得总和最大的列表与总和最大的列表之差最小总和是所有可能排列中的最小值。

先将列表转化为累加,然后将最后一个元素除以N得到IdealColumnSize:

例如:

2, 3, 6, 8, 3, 4, 2

产生累积列表:

2, 5, 11, 19, 22, 26, 28

假设我们要把它分成3份。IdealColumnSize是9 1/3。 现在对于索引 1 到 N-1,select 是累积列表中最接近的元素。

最接近 9 1/3 的是 11,因此前三个数字位于第 1 列。

最接近 18 2/3 的是 19,所以一个数字进入第 2 列。

剩余的项目放在最后一列。