Prolog中快速二维数组

3

在Prolog中,表示二维数组最高效的方法是什么?我想到了一个长列表或列表的列表,但它们具有线性访问时间,这似乎对我的问题来说太慢了。我不一定要寻找现成的解决方案,而是要了解如何实现它的概念。

1个回答

4
您可以使用AVL树或红黑树来实现对数时间的访问,具体可参考SWI和YAP中的library(assoc)和library(rbtrees)。如果需要常数时间的访问,请创建一个具有N个参数的项,并使用arg/3进行有效访问。这些参数中的每一个都可以再次是具有N个参数的项,因此您可以拥有一个具有高效读取访问的数组。使用setarg/3,您甚至可以破坏性地修改元素,但代价是失去了良好的逻辑属性以及更加痛苦的调试和测试。在许多情况下,您可以重构算法以不需要随机访问,并使用列表列表进行操作。如果无法实现这一点,AVL或其他平衡树通常是非常好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接