2013-11-25 82 views
3

我有功課做查找/創建算法,解決了這個問題:查找算法類

  • n - 桶
  • k - 不同顏色的塊
  • p_i - 斗數能力我
  • c_i - 與色塊的編號i

假設是水桶站在一個圓周上。

要做什麼:
每個桶必須每個顏色至多有一個塊。而基本的操作是傳輸塊到鄰居桶。

我不希望解決這個問題,現在我想知道哪類問題是這個 - 圖或其他東西。

非常感謝。

編輯:我必須用C++編寫它。

編輯:問題例如

  • 1鬥容量5:1黃2綠色
  • 2鬥容量5:1白色2黃色
  • 3鬥容量2:2的藍色
  • 4桶容量7:1綠色

算法必須使每個桶包含至多一個塊的每種顏色。

編輯:我的想法

我在想搜索樹在那裏我將產生正確定位塊的所有可能性,但我不知道如何計算該解決方案的步驟。另一個想法是從每個不應該在裏面的桶塊「掃」。最後的想法是從塊的角度來看問題,並且「掃描」桶包括每種顏色的多個塊。但我找不到任何有力的想法,這將解決這個問題。

編輯:我的算法

  1. 怎麼算每種顏色我有很多塊。
  2. 按此降序排序。
  3. 對於每一種顏色從最衆多的一個:
    1. 每鬥: 1.如果該桶包含的顏色超過1塊到2否則繼續。 2.嘗試將COLOR塊放入相鄰桶。如果任何鄰居沒有足夠的位置,則將鄰居塊中的塊交換到該桶中,然後將COLOR塊放入該桶中。
+0

什麼問題?該算法應該做什麼? – Beta

+3

到目前爲止您嘗試過什麼?你認爲答案會是什麼?請向我們展示一些更多的努力。 – templatetypedef

+1

在給你這個任務之前,你的老師沒有給你任何關於算法的信息? –

回答

1

乍一看,我會建議一個Doubly-Linked-List數據結構。但是,如果不知道你會寫什麼語言,我不認爲有人可以進一步幫助你。

例如,您可以創建一個Doubly-Linked-List,並填寫myObject類型的成員。

在Java中,myObject將是Class。在C,myObject將是一個Struct

你想使每一個有鄰國的引用這些對象鏈接。然後你可以將通過一個塊到'鄰居'(鏈接)桶。

雖然你如何創建自己的數據結構(S)是依賴於語言的大部分......

編輯:在一個簡單的例子,你可以創建對象的array(Java的Class,C Struct等),然後通過使用n - 1(左)和n + 1(右)給出鄰居塊,其中n是陣列中當前的存儲桶。

+0

在這種情況下,雙鏈表對於簡單數組有什麼優點?我們給了'n',所以我們的數據結構具有固定的大小。 –

+0

你可以創建'n'對象的數組(就像Java'Class'或C -'Struct')一樣好。一個*雙鏈表*設計有點複雜,但根據我的經驗提供了更多的功能。這一切都取決於你需要什麼。但是,'array'可能更適合你考慮你需要的東西。在這種情況下,你可以創建一個'數組'對象,然後*給*鄰居塊使用'n-1'和'n + 1',其中'n'是你當前的**桶** 。 –

+3

你可能會更喜歡'(k + n-1)mod n'和'(k + 1)mod n'(假設'k'是當前緩衝區)來確保'nnth'之後的下一個元素將是第一個第一個元素之前的元素將是'n'。 –