2011-04-05 127 views
3

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

回答

4

您可以通过AVL树或红黑树获得对数时间访问,请参阅SWI和YAP中的库(assoc)和库(rbtrees)。对于持续时间访问,使用N个参数定义一个术语,并使用arg/3进行高效访问。这些参数中的每一个都可以是一个有N个元素的术语,因此您可以使用高效的读取访问。使用setarg/3,你甚至可以破坏性地修改元素,代价是失去很好的逻辑属性和更加痛苦的调试和测试。在很多情况下,您可以重新制定算法,不要求随机访问,并使用列表清单。如果这不可能,AVL或其他平衡树通常是一个非常好的选择。