다음은이 문제에 대한 나의 해결책입니다.
[["A", 13], ["B", 5], ["C", 3], ["D", 1]]
같은 입력을 감안할 때 출력은
AABABAACABAACABAACABAD
프로그램의
루비 소스는 다음과 같습니다
require "pp"
def shuffle (total, num)
ret_arr = Array.new
intervel = total/num.to_f
0.upto(num-1) do |i|
val = i * intervel
ret_arr << val.floor
end
return ret_arr
end
freq_table = [["A", 13], ["B", 5], ["C", 3], ["D", 1]]
pp freq_table
total = 0
freq_table.collect {|i| total += i[1] }
final_array = Array.new(total,0)
print final_array.to_s + "\n\n"
placed = 0
freq_table.each do |i|
placements = shuffle(total - placed, i[1])
placements.each do |j|
free_index = -1
0.upto final_array.size do |k|
free_index += 1 if (final_array[k] == 0 || final_array[k] == i[0])
if j == free_index
final_array[k] = i[0]
break
end
end
end
print "Placing #{i[1]} #{i[0]}s over #{total - placed} positions\n"
pp placements
print final_array.to_s + "\n\n"
placed += i[1]
end
아이디어는 가장 높은 주파수를 가진 알파벳을 받아 가로 질러 먼저 배포하는 것입니다 사이즈가 모든 요소의 총수이다 배열 다음으로 가장 높은 빈도로 알파벳을 배포하고 빈 공간에 걸쳐 배포하는 식으로 진행합니다.
질문이있는 경우 알려 주시면 답변 드리겠습니다.
주권
OK, 나는 당신이 그들을 셔플 할 _why_ 요청할 수 있습니다? 각 도메인에 전자 메일 트래픽을 균등하게 분배하는 경우에는하지 마십시오. SMTP 연결을 공유 할 수 있으므로 동일한 도메인의 메일을 모두 동시에 배달하는 것이 더 효율적입니다. – Alnitak