因此,我有幾個集合,並且我需要找到包含所有集合中至少一個元素的最小集合數。爲了使這更具體,我有一組服務器名稱,並且每個服務器都有一個服務窗口。給定一個特定的持續時間,我想找到涵蓋所有給定服務器的最小服務窗口集。什麼算法來找到包含至少一個元素的最小集合(每個集合包含至少一個元素)
我已經有代碼生成每個所需機器的所有不重疊N分鐘時間段的列表。我只是通過生成所有可能的組合來蠻力,然後選擇具有最少數量的獨特元素的組合,但這看起來效率非常低,即使我首先將該組縮小爲來自所有主機的唯一窗口(特別是更多比幾個系統)。
然後我想我會按照適合每個時間段的主機數量來排序時間段,選擇主機數量最多的時間段,然後重新生成未分配主機的所有時間段列表,挑選最受歡迎的插槽,重新計算等,直到所有主機都被佔用。雖然這會給我一個答案,但這並不能讓我有機會選擇最平衡的組合 - 第二個目標是找到一組服務窗口,其中每個服務的主機數量具有最小標準差窗口。所以,如果我有100個主機,我想優先考慮窗口,它給了我每個窗口50個主機,而不是做上述算法可能找到的三個「98,1和1」窗口。但是,如果我的選項是「98,1,1」或10個窗口,每個10個。我寧願做三個。
總之,似乎某種圖形可以用來表示這個問題,但我更關注的是硬件而不是我的CS路徑中的軟件,解決圖形問題從來沒有真正成爲我的特長。所以,我甚至會對如何閱讀關於這個特定問題或適當的搜索條件的更多建議表示感謝。 :)
嗯,它讓我感覺好一點,知道有一個很好的理由,我不能很快想出一個更有效的解決方案。但這只是意味着每當主機發生變化時,一堆醜陋的代碼和嚴重的毆打被放置在計算機上。感謝您爲它命名。 :) – dannysauer 2012-07-11 04:37:23