From 460edfad8ed45412050822dfdf84f2d54015fb04 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 7 Aug 2016 13:58:41 -0400 Subject: refacor --- Entropy.hs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'Entropy.hs') diff --git a/Entropy.hs b/Entropy.hs index 2ff28b2..d6779fe 100644 --- a/Entropy.hs +++ b/Entropy.hs @@ -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)) -- cgit v1.2.3