从百分比值创建逻辑有序队列列表

Create logical ordered queue list from percentage value

这是数学题。我需要从 x 值创建一个订单列表(或队列列表)——每个人都是百分比,所有这些的总和是 100。我想要这些值的逻辑顺序。让我们看看这个:

a = 50,
b = 25,
c = 15,
d = 10

这些数字的最大公约数是 5,因此队列的长度应为 100/5 = 20。结果应如下所示(或非常相似):

a, b, a, b, a, c, a, b, a, d, a, c, a, b, a, c, a, b, a, d

我正在寻找这个订单的公式。提前致谢。

我认为您希望在整个数组或字符串中尽可能均匀地分布每个字母。找到最大公约数并将数字 50、25、15、10 除以它的初步步骤很简单。完成此操作后,您将获得每个字母必须出现的次数。那么算法可以是:以空串开头,加上"most underrepresented"字母,重复。我将 "most underrepresented" 定义为具有(期望比例)-(到目前为止的实际比例)的最大差异的那个。

这是在 Python 中实现的算法。

count = {'a': 10, 'b': 5, 'c': 3, 'd': 2}
length = sum(count.values())
str = ''
while len(str) < length:
    deficit = {}
    for char in count:
        deficit[char] = count[char]/length - (str.count(char)/len(str) if str else 0)
    str += max(deficit, key=deficit.get)
print(str) 

输出是 abcadabacabadabacaba。按字母拆分以显示分布:

a..a.a.a.a.a.a.a.a.a
.b....b...b...b...b.
..c.....c.......c...
....d.......d.......