使用Lisp(或AutoLisp)关联列表性能有多好?

时间:2008-11-04 17:35:33

标签: lisp autocad autolisp

我正在做一个使用长关联结构进行大量几何处理的AutoLisp项目 - 所以我很好奇关联列表强烈使用时序结果。 实施有多简单/复杂?它使用一些数据结构或正常的点对列表? 这是b-tree的任何扩展还是什么?

5 个答案:

答案 0 :(得分:4)

SBCL在alist和基于身份的哈希表之间的最新x86硬件上的转折点,假设访问的均匀分布,大约是30-40个元素。

答案 1 :(得分:2)

在Common Lisp和Emacs中,Lisp关联列表是链表,因此它们具有线性搜索时间。假设AutoLisp是相同的(如果不是,那么他们使用术语“关联列表”会产生误导),您可以假设所有操作在列表的长度上都是线性的。例如,一个包含100个元素的alist平均需要50次访问才能找到你所追求的东西。

答案 2 :(得分:2)

当然,大多数Scheme实现(或者可能是规范中的?)都有哈希表,它们主要使用相同的API;但是它不透明,当你要求一个alist时,你得到一个对的列表,如果你想要一个哈希表,请求它。

说,重要的是要记住线性算法并不慢;他们'不可扩展'。对于少数元素,它们将胜过更复杂的“聪明”算法。只要有多大的'n',取决于算法,以及具有大缓存但RAM缓慢的快速处理器,继续推动它。此外,重度优化编译器(如某些Lisp上的编译器)会生成非常紧线性代码。

答案 3 :(得分:1)

我在大约10年内没有使用过AutoLisp,但我从未发现关联列表操作存在任何真正的性能问题。我编写的代码可以进行大量的关联列表操作。

在VBA或ObjectARX中工作可能会带来一些性能优势,但您可能需要运行一些比较测试以确定它是否真的更好。

答案 4 :(得分:0)

我知道b-tree没有扩展名,但如果你使用Visual LISP,你可以使用ActiveX对象,从而访问大多数类型的数据库。