2016-06-22 4 views
1

これは数学的な作業です。私はx値から注文リスト(またはキューリスト)を作成する必要があります - 皆はパーセントであり、それらの合計は100です。これらの値の論理的な順序が必要です。これを見てみましょう:パーセント値からの論理順序キューリストの作成

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

これらの数値の最大公約数がキューのでべき長さ100/5 = 20を持っており、結果はこのようになり(または非常に類似している)必要があり、5:

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

私はこの注文方法を探しています。前もって感謝します。

+0

どのようにその注文はgcdに関連していますか?私はあなたが達成しようとしていることを正確には分かりません。 – Shubham

答えて

2

私はあなたが各文字をできるだけ均一に配列や文字列全体に配したいと思っています。最大公約数を見つけ出し、それによって50,25,15,10の数を分ける予備的なステップは簡単です。これが完了すると、各文字を表示する必要がある回数が表示されます。アルゴリズムは次のようになります:空の文字列で始まり、「最も過小表現された」文字を繰り返します。私は、「最も不足している」とは、(目標比率) - (これまでの実際の割合)の最大差を持つものとして定義します。

このアルゴリズムは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....... 
関連する問題