> Speed-wise, how does referencing a hash table compare with using (assoc x y) 
> as I am above. Is it also just hashed values? 

For a small case, there's not much difference, but eventually the
hash table wins because it can find the desired element without
searching through a long list.

If you're concerned about speed, it might be faster to use a
vector instead:

(define (entropy-1 string)
  (let* ((sum 0.0)
         (len (length string))
         (top (+ 1 (apply max string)))
         (table (make-vector top 0)))
    (do ((i 0 (+ i 1))
         (element string (cdr element)))
        ((= i len))
      (set! (table (car element)) (+ 1 (table (car element)))))
    (do ((i 0 (+ i 1)))
        ((= i top))
      (let ((val (/ (table i) len)))
        (if (not (zero? val))
            (set! sum (+ sum (* val (log val 2.0)))))))
    (- sum)))


> I guess I would prefer hash-table-for-each 

I'm leaning that way too.  I wanted for-each to work with all
"applicable" types, but currently it doesn't accept hash-tables.


_______________________________________________
Cmdist mailing list
[email protected]
http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist

Reply via email to