diff options
Diffstat (limited to 'Entropy.hs')
-rw-r--r-- | Entropy.hs | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -1,9 +1,24 @@ +{-# LANGUAGE FlexibleInstances #-} + module Entropy where import Data.List +import qualified Data.ByteString.UTF8 as B + +class ToChars t where + toChars :: t -> [Char] + +instance ToChars String where + toChars = id -entropy :: String -> Double -entropy = sum . map lg' . fq' . map (fromIntegral.length) . group . sort +instance ToChars B.ByteString where + toChars = B.toString + +shannonEntropy :: ToChars s => s -> Double +shannonEntropy = sum . map lg' . fq' . map (fromIntegral.length) . group . sort . toChars where lg' c = (c * ) . logBase 2 $ 1.0 / c - fq' c = let sc = sum c in map (/ sc) c + fq' c = let sc = sum c in map (/ sc) c + +totalEntropy :: ToChars s => s -> Double +totalEntropy s = shannonEntropy s * fromIntegral (length (toChars s)) |