所以我需要得到一個字符串的所有可能的排列。如何使用更少的內存生成Array排列?
我現在是這樣的:
def uniq_permutations string
string.split(//).permutation.map(&:join).uniq
end
好了,現在什麼是我的問題:這種方法適用於小串,但我希望能夠與類似的15尺寸用繩子用它甚至可能是20個。使用這種方法它使用了大量的內存(> 1GB),我的問題是我可以改變不使用那麼多的內存?
有沒有更好的方法來產生排列?我應該堅持他們在文件系統和檢索時,我需要他們(我希望不是因爲這可能會使我的方法變慢)?
我能做些什麼?
更新:
我其實並不需要保存結果的任何地方我只需要查找每個表中的,看它是否存在。
您的示例顯示您正在處理排列,而不是組合。在整個問題中,你使用這個詞是錯誤的。 – sawa
@sawa謝謝!我搜索了這種方法,但找不到。它可能會這樣:) –
我不認爲你的問題是特定於算法。你有沒有考慮答案會有多大?如果你有一個長度爲20的字符串,排列的數量是20! = 2.4e + 18。如果數組中的每個元素佔用了一個字節,那麼結果數組將佔用至少20 * 2.4e + 18 = 4.9e + 19個字節。無論算法有多好,爲了保持答案,它在RAM中佔用的內存將遠遠超過1GB。 – sawa