19 lines
431 B
Plaintext
19 lines
431 B
Plaintext
(lib 'hash)
|
|
;; counter: hash-table[key]++
|
|
(define (count++ ht k )
|
|
(hash-set ht k (1+ (hash-ref! ht k 0))))
|
|
|
|
(define (hi count n )
|
|
(define pi (// count n))
|
|
(- (* pi (log2 pi))))
|
|
|
|
;; (H [string|list]) → entropy (bits)
|
|
(define (H info)
|
|
(define S (if(string? info) (string->list info) info))
|
|
(define ht (make-hash))
|
|
(define n (length S))
|
|
|
|
(for ((s S)) (count++ ht s))
|
|
(for/sum ((s (make-set S))) (hi (hash-ref ht s) n)))
|
|
|