我只是保持一個數據庫的三元組(user_id, preferred_id, dispreferred_id)
對應每個選擇。
編輯:有一點時間玩這個。以下幾百萬的收視率會很慢,並且吞噬了內存,但也可能會給你一些想法。如果你這樣做,你應該可以從crontab異步運行,而不是按需運行。
require 'set'
choices = [
[1, 4],
[1, 5],
[2, 3],
[2, 4],
[3, 1],
[4, 2],
[4, 3],
[5, 1],
[6, 7],
[8, 4],
]
dominates = Hash.new { |hash, key| hash[key] = Set.new }
choices.each do |p, d|
dominates[p].add(d)
end
prev_dominates = nil
while dominates != prev_dominates
prev_dominates = Hash.new
dominates.each { |big, smalls| prev_dominates[big] = smalls.clone }
prev_dominates.each do |big, smalls|
smalls.each do |small|
if prev_dominates.include?(small)
prev_dominates[small].each do |smaller|
if smaller != big and !prev_dominates[smaller].include?(big)
dominates[big] << smaller
end
end
end
end
end
end
top = dominates.max_by { |big, smalls| smalls.size }[0]
puts dominates.inspect
puts "BEST: #{top}"
頂端節點是最終支配最多其他節點的節點。但是,由於圖形可以是循環圖,如果另一個節點更早完成循環,我們會切斷循環。
但是當您向開發者展示披薩和甜甜圈圖像時會發生什麼?他應該如何做出選擇? – 2013-02-20 07:31:35
問題到底是什麼? – 2013-02-20 07:34:14
我考慮向人們展示動物圖片,以確定他目前有什麼工作,他將擁有多少孩子,以及他是否喜歡披頭士樂隊。我應該怎麼做? (對不起,諷刺,我無法抗拒。) – 2013-02-20 07:38:43