我有几个文本文件,想要创建bigrams,其中包含这些bigrams在我的文件中出现的次数。我以为我可以将这些存储在一个以bigrams为键的hashmap中,并计为值。但是,我知道hashmaps使用的内存比列表要多得多,我想我可以用包含三元组的列表(w1,w2,count)做同样的事情。
所以,在代码中,我现在正在这样做:
(defparameter mymap (make-hash-table :test 'equal))
(if (gethash "w1 w2" mymap)
(setf (gethash "w1 w2" mymap) (+ 1 (gethash "w1 w2" mymap)))
(setf (gethash "w1 w2" mymap) 1))
答案 0 :(得分:0)
除非您拥有少量密钥,否则列表可能不是您想要的。散列图可能是一个不错的选择。它可能会使用更多的内存,但可能还不够,您需要担心它,并且您可以调整rehash-size
和rehash-threshold
来控制特定应用程序的内存/性能权衡。 (例如,小的rehash-size和大的rehash-threshold将使用更少的内存,但查找需要更长的时间。)
另一种选择是二叉搜索树,例如AVL树或红黑树。这些不包含在cl包中,但有几个提供实现的lisp库,包括fset,lisp接口库和cl-containers。