2015-06-28 54 views
2

我知道這是一個可怕的標題。我沒有接受CS培訓,所以我沒有參加算法課程來了解這可能是什麼。如何從元素中刪除重複的元素而不會偏向後面會出現的元素

讓我解釋一下:

我有持有二套共6個數字的數組:

var theList = [{[1,2,3,4,5,6],[1,2,3,4,5,7],[1,2,3,4,6,7],[1,3,4,5,6,7]}]; 

該陣列可以很大。然後,我會遍歷數組中的每個項目,並計算其中三個不同組的出現次數。即1 2 3出現3次,2 3 4出現3次,等等。我與它顯示爲索引3的計數另一個陣列保持這樣的信息:

​​

我下一件事是我去通過每個一組六個(來自List),我檢查我的countList中每個三個組的出現次數。如果它們都大於1,我刪除這組六個,減少countList中的計數並繼續下一個數字。

這似乎奏效,但是剩下的數字包含數量較高的三個數量組。例如,如果數字是從1到10,那麼當計算完成時,三個較低組([1,2,3],[1,2,4] [1,2,5])的出現次數很少等等,但是有更多的三個人([6,7,8],[7,8,9] [8,9,10])出現,所以我最終得到的是一羣六人從低重複數的搜索開始,但它們都以相同的高數字結束。

我認爲,因爲countList被排序並且六個列表(theList)的組被排序,所以它更頻繁地「看到」那些更低級別的三組,並且隨着它們移除六個組,得到更高的數字,較低的數字全部被刪除,所以他們「有」在那裏。

有沒有一個算法,我可以看看這個?

我很抱歉,如果這是令人困惑,並感謝您的幫助。

回答

1

如您所述,由於theList已排序,因此您有偏移較低運行次數的偏差。如果你想要對稱,那麼一種方法是在開始清除階段之前隨機洗牌theList

隨機洗牌(Javascript)數組是一個衆所周知的問題。請參閱this community Wiki question,以獲得即用型答案。

+0

謝謝你。我曾想過將它隨機化,但我想知道這是否是我可以研究的一種衆所周知的算法。 – NiteTrip

+0

我打算把這個標記爲答案。我隨機化了它,它工作得很好,有時它給了我不同的答案,這意味着有時它會每次都移除除x個元素以外的所有元素,x可能是不同的值。我正在尋找只需要最少量的元素,我可以很快地發現,通過運行幾次算法。 – NiteTrip

+1

快樂幫助! –