16 lines
380 B
Common Lisp
16 lines
380 B
Common Lisp
(defun shannon-entropy (input)
|
|
(let ((freq-table (make-hash-table))
|
|
(entropy 0)
|
|
(length (+ (length input) 0.0)))
|
|
(mapcar (lambda (x)
|
|
(puthash x
|
|
(+ 1 (gethash x freq-table 0))
|
|
freq-table))
|
|
input)
|
|
(maphash (lambda (k v)
|
|
(set 'entropy (+ entropy
|
|
(* (/ v length)
|
|
(log (/ v length) 2)))))
|
|
freq-table)
|
|
(- entropy)))
|