假设我们有一个元素列表:
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
我想将此列表的所有可能排列存储在 RAM 中。
由于列表可能很长(10 个元素或更多),因此需要大量空间来存储它(阶乘 N)。
例如,如果我有一个列表,它消耗大约 70 个字节的空间并且有 12 个元素,那么我需要12! * 70 ~ 31 GB
. 如果我在列表中再添加一个元素,那么将排列存储在 RAM 中可能变得不可行。
有没有比下面的 Erlang 表示更有效的表示来将所有排列保留在内存中?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
(我知道原子dog
在原子表中只存储一次,但由于它在每个排列中都重复,因此需要 N 个内存)。
也许这些排列可以以某种字节表示形式存储?(对不起,我是字节和二进制文件的新手)。
毕竟,它只是相同的元素,但以不同的方式重新排列。