我有几个文本文件,想创建一个bigram,并计算这些bigram在我的文件中出现的次数。我想我可以把它们存储在一个hashmap中,其中bigrams是键,count是值然而,我知道hashmaps使用的内存比list要多得多,我想我可以对包含三元组(w1、w2、count)的list做同样的事情。
所以,在代码中,我现在正在做:
(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))
最佳答案
除非您有少量的密钥,否则列表可能不是您想要的。哈希映射可能是一个不错的选择它可能会占用更多的内存,但可能还不足以让您担心,您可以调整rehash-size
和rehash-threshold
来控制特定应用程序的内存/性能权衡(例如,较小的重新刷新大小和较大的重新刷新阈值将使用较少的内存,但查找所需的时间较长)。
另一种选择是二叉搜索树,如AVL树或红黑树这些不包含在cl包中,但是有几个lisp库提供实现,包括fset、lisp接口库和cl容器。
关于hashmap - 有效存储带计数的二元组的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33453323/