prolog中的Hashset和Queue
我需要创建一个哈希集,我的第一个想法是使用关联列表或字典。然而,查找和插入过程具有O(logN)复杂性。有更快的方法吗?prolog中的Hashset和Queue,prolog,swi-prolog,Prolog,Swi Prolog,我需要创建一个哈希集,我的第一个想法是使用关联列表或字典。然而,查找和插入过程具有O(logN)复杂性。有更快的方法吗? 我还需要排队。我发现了一个使用差异列表的实现,但我想知道是否有更好的方法。对于您链接的问题,我觉得很好。你说的“更好的东西”是什么意思 编辑:和 关于哈希表,这现在是一个定义问题。“创建哈希集”是什么意思?为什么您认为您会使用现成的数据结构 您至少有三种选择: 使用现有的键值数据结构(查看库(assoc)和SWI Prologdict),而不关心它是如何实现的 根据您的具体规
我还需要排队。我发现了一个使用差异列表的实现,但我想知道是否有更好的方法。对于您链接的问题,我觉得很好。你说的“更好的东西”是什么意思 编辑:和 关于哈希表,这现在是一个定义问题。“创建哈希集”是什么意思?为什么您认为您会使用现成的数据结构 您至少有三种选择:
库(assoc)
和SWI Prologdict
),而不关心它是如何实现的李>
assert*
和retract*
使用数据库哈希集进行比较。在那之前,一切都只是猜测
如果你想选择2。实现一个具有a属性的数据结构,你必须自己做
如果您在决定如何实现哈希函数或如何在Prolog中生成数组方面需要帮助,您应该询问更具体的问题
如果你需要帮助来决定什么是对你最好的选择(上面三个选项中的一个或其他),你需要问更具体的问题
只简单介绍一下Prolog中的数组。许多谓词都有文档记录
您可以使用Prolog术语生成数组。例如,这是一个大小为5的数组,其中包含原子[a、b、c、d、e]
:
array(a, b, c, d, e)
您可以使用arg/3
在索引处获取元素:
?- A = array(a, b, c, d, e), arg(3, A, X).
A = array(a, b, c, d, e),
X = c.
您可以使用*setarg
谓词在索引处重新赋值
?- A = array(a, b, c, d, e), arg(3, A, X), setarg(3, A, hello), arg(3, A, Y).
A = array(a, b, hello, d, e),
X = c,
Y = hello.
使用arg
和setarg
获取和设置应该是固定时间操作
如果您有更具体的问题,您必须提出。您可能想提到setarg/3
是非标准的。下面是一个在Prolog中非常全面的哈希表实现: