は、我々が要素のリストを持っているとしましょう:大きな組の置換を効果的に保存する方法は?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
私はRAMで、このリストのすべての可能なpermutationsを保存したいと思います。
リストはかなり長く(10要素以上)なる可能性があるので、それを格納するには多くのスペースが必要です(階乗N)。
たとえば、約70バイトの領域を消費し、12個の要素を持つリストがある場合は、12! * 70 ~ 31 GB
が必要です。リストに要素を1つだけ追加すると、並べ替えをRAMに格納することができなくなる可能性があります。
次のErlang表現よりもメモリ内のすべての順列を保持する効率的な表現がありますか?
[{dog,1},{dog,2},{cat,1},{cat,2},{bird,1},{bird,2},...]
は、(Iは原子dog
が原子テーブルに一度だけ格納されていることを知っているが、それはすべての順列で繰り返されるので、N個のメモリを要します)。
多分、これらの並べ替えは何らかの種類のバイト表現で保存できますか? (申し訳ありませんが、私はバイトとバイナリの初心者です)。
結局のところ、それはちょうど同じ要素ですが、異なる方法で再配置されます。
アダムさん、あなたの答えの詳細を教えてください。私の限られた知識の中で私は、列内のすべての一意のリスト要素と列内のすべての順列を持つ(DB?Matrix?)表を持つべきであることを理解するだけです。対応するセルは、特定のリストの特定の要素の正確なインデックス(場所番号)を格納する必要があります(順列)。あなたの答えははるかにエレガントな解決策を意味します。 – skanatek
更新された投稿を参照してください。ポイントはすべての順列を一度に完全に作成することではありません。 –
このような初心者のため申し訳ありませんが、あなたが提供したレコード構造をどのように使用するべきかはわかりません。 list_aとlist_bに何を保存すればよいですか? Erlangリストのデータ型index_aとindex_bは何ですか? – skanatek