2014-08-30 31 views
2

我沒有找到我要尋找一個在谷歌的任何直接的答案,所以這裏去...收集獨特的人數從隨機數

是他們的任何「算法」收集獨特的數字/數字從長(「長」不是數據類型的意思)隨機數?

比如, X = 6487657876579876867656768476876876117681761871687268726

我想擁有所有可能的唯一的數字/數字,我可以從X得到。我不是在尋找代碼。我正在尋找一種「既定算法」來完成這類工作或類似的工作。任何紙張/期刊/書籍鏈接都會有用。

編輯:如果我問,從很多項目的數量搜索/項目「算法」,得到的回答是:BFS,DFS,樹,圖等 同樣,我的問題是不是編碼,不甚至關於任何特定的編程語言,它都會找到(如果有的話)從隨機數中收集唯一編號的算法。正如「Muckle_ewe」在他的評論 中所說的,123可能是1,2,3,12,23,123,但不是13--這是我的算法所需要的。

請不要給我看代碼。我期待一個參考/名稱/鏈接到任何已建立的算法,這種簡單的工作或類似的。當然,任何人都可以爲這個簡單的工作建立一個算法,即使是我。但是我正在尋找一種公認的可以用作參考的既定算法。

第二編輯:有點改變的要求,其實我不需要所有的子字符串,我想我會。我發現後綴樹適用於查找所有子字符串。所以它不是確切的我正在尋找,但它是一個密切的。那麼,編輯Muckle_ewe的評論,123可能是1,2,3,12,23但不是13,123 - 所以我只需要一個長數字(x)中的1位數字或2位數字,這就是我的算法所需要的,而不是舊的。

---謝謝。

+1

一種方法是轉換爲字符串,找到所有的子字符串並將它們輸入到一個集合中,這將刪除重複的。大多數編程語言都應該內置這些編程語言,因此應該只需要幾行代碼。這假定你不會跳過任何數字,即123可能是1,2,3,12,23,123但不是13 – 2014-08-30 14:29:45

+1

Pep's(現在刪除的)答案按照所述解決了問題。正如他所說,請澄清這個問題,如果這不是你想要的。 – 2014-08-30 14:30:29

+0

你需要所有獨特的子串?構建DFA。 – wildplasser 2014-08-30 15:45:06

回答

1

Imho,算法綁定到一個語言,你不會在你的問題中提到,所以我採取了我認識的最簡單的一個,Ruby。我用你的長號作爲一個字符串來使它更容易。

x = "6487657876579876867656768476876876117681761871687268726" 
x.split("").uniq.join #gives 64875912 

現在我可以做得更詳細了,繞過Ruby包含的方法,但是會有什麼意義呢?改變輪子?想我比Ruby開發者更好?如果我想要,我可以查找他們用來構建Ruby方法的C代碼。後

編輯OP的編輯

嗯,你的編輯後,我終於看到你做了什麼。 另見本Quora question,有關於後綴樹旅行算法的aexplanation。

我只是一個簡單的程序員,所以我喜歡把事情簡單化,所以一個簡單的算法是:從第一個字母開始,繼續到最後,存儲該字母的所有後綴,最後對存儲的後綴進行排序並刪除重複。 我想有更快的算法,我沒有這個名字,我自己做了。 在Ruby中,這將以這種方式實現,我使用一個簡短的字符串來保存它.... euh ...簡單。這兩張地圖在一個數組中生成數組,所以我在排序和刪除重複之前首先將它們弄平。

x = "BANANA" 
(0...x.length).map {|i|(i...x.length).map { |j|x[i..j]}}.flatten.sort.uniq 
# gives ["A", "AN", "ANA", "ANAN", "ANANA", "B", "BA", "BAN", "BANA", "BANAN", "BANANA", "N", "NA", "NAN", "NANA"] 
+0

請閱讀我的編輯 – Giliweed 2014-08-30 15:24:01