比方說,我們有元素的列表:如何有效地存儲一大組排列?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
我想用來存儲該列表在RAM中的所有可能permutations。
由於列表可能相當長(10個元素或更多),因此需要很大的空間來存儲它(因子N)。例如,如果我有一個列表,其中包含約70個字節的空間,並且有12個元素,那麼我需要12! * 70 ~ 31 GB
。如果我只在列表中添加一個元素,那麼將這些排列存儲在RAM中可能變得不可行。
是否有任何更有效的表示形式來保存內存中的所有排列比以下Erlang表示?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
(我知道原子dog
只存儲一次在原子表,但因爲它在每個排列重複,需要N個存儲器)。
也許這些排列可能存儲在某種字節表示中? (對不起,我是一個字節和二進制文件的新手)。
畢竟,它只是相同的元素,但以不同的方式重新排列。
亞當,請您提供您的答案的詳細信息?憑藉我有限的知識,我只理解我應該有一個(DB?矩陣?)表,它具有行中的所有唯一列表元素和列中的所有排列。相應的單元格應該存儲特定列表(排列)中特定元素的確切索引(地點編號)。我相信你的答案意味着更優雅的解決方案。 – skanatek 2012-01-04 10:44:23
查看更新後的帖子。關鍵是不要一次完全創建所有的排列。 – 2012-01-04 14:24:31
對不起,成爲這樣的新手,但我不明白我應該如何使用您提供的記錄結構。我應該在list_a和list_b中存儲什麼? Erlang列表數據類型的index_a和index_b或其他什麼? – skanatek 2012-01-04 16:14:46