将n
项(例如2到100)分配到x组的最佳方法是什么。
每个组中应包含大约相同数量的项目。
简单的例子是n=100; x=2;
100/2 =每组50件
如果我们涉及浮动数字,例如n=100; x=3;
100/3 = 33.33
我们需要两组嵌套33个项目和一组嵌套34
另一个例子:n=8; x=3
8/3 = 2.66
有关如何解决此问题的任何建议吗?
并不重要,但仅仅是对于好奇的头脑,用例: 在我的UI中,我试图将标签条划分为多行,一次只显示一行,这样如果所有标签条不适合一行,我们就可以通过编程方式分发它们。
期待您的回答!
答案 0 :(得分:1)
将floor(n / x)
个项目分发到x
个小组后,您将n mod x = n - floor(n / x) * x
个项目留在[0, x)
。1
。您可以使用i=1..x
轻松地将i <= n mod x
添加到每个群组for i=1..x
group[i] <- floor(n / x) + (i <= n mod x ? 1 : 0)
。
for i=1..(n mod x)
group[i] <- ceil(n / x)
for i=(n mod x + 1)..x
group[i] <- floor(n / x)
这与
相同n = 11, x = 3
E.g。 group[1] <- 3 + (1 <= 2 ? 1 : 0) = 4
group[2] <- 3 + (2 <= 2 ? 1 : 0) = 4
group[3] <- 3 + (3 <= 2 ? 1 : 0) = 3
您最终会:
# distutils: language = c
cdef extern from "myenum.h":
cpdef enum strategy:
slow,
medium,
fast
答案 1 :(得分:0)
假设您的群组采用某种形式的数组,从0开始使用&#39; groupCount&#39;群体,简单的分布&#34;按行&#34;会是这样的:
g = 0
for each element e
allocate e to group groups[g]
g++
g = (g % groupCount)
如果一次分配给第一组元素的速度太慢,则可以更快地按列分配“#”。假设计数器剩下的元素&#39;和剩下的小组&#39;适当地初始化,它看起来像:
for each group g
size = floor(remainingElements / remainingGroups)
allocate size elements to group g
remainingElements = remainingElements - size
--remainingGroups