比方说,我们有元素的列表:如何有效地存储一大组排列?
[{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