2011-04-05 16 views
3

2次元配列をプロローグで表現する最も効率的な方法は何ですか?長いリストやリストのリストを考えましたが、私の問題では遅すぎるような線形アクセス時間があります。私は必ずしも準備ができている解決策を探しているわけではありません。プロローグ内の高速2次元配列

答えて

4

SWIおよびYAPのライブラリ(assoc)およびライブラリ(rbtrees)を参照して、AVLツリーまたはRed-Blackツリーでログ時間アクセスを取得できます。一定時間アクセスの場合は、N個の引数を持つ項を作成し、効率的なアクセスのためにはarg/3を使用します。これらの引数のそれぞれは、やはりarity Nを持つ項になることができるので、効率的な読み込みアクセスを持つ配列を持つことができます。 setarg/3を使用すると、素早く要素を修正することさえできます。ただし、優れた論理的特性を失うだけでなく、はるかに厄介なデバッグやテストを犠牲にします。多くの場合、ランダムアクセスを必要としないようにアルゴリズムを再構成し、リストのリストを操作することができます。これが不可能な場合は、AVLやその他のバランスのとれたツリーが良いオプションになることがよくあります。