有效计算存储bigrams的方法

时间:2015-10-31 15:32:28

标签: hashmap lisp common-lisp

我有几个文本文件,想要创建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))

1 个答案:

答案 0 :(得分:0)

除非您拥有少量密钥,否则列表可能不是您想要的。散列图可能是一个不错的选择。它可能会使用更多的内存,但可能还不够,您需要担心它,并且您可以调整rehash-sizerehash-threshold来控制特定应用程序的内存/性能权衡。 (例如,小的rehash-size和大的rehash-threshold将使用更少的内存,但查找需要更长的时间。)

另一种选择是二叉搜索树,例如AVL树或红黑树。这些不包含在cl包中,但有几个提供实现的lisp库,包括fset,lisp接口库和cl-containers。