7Bpencil

ShannonEntropy

Dec 22nd, 2019
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict"
  2. test()
  3.  
  4. function test() {
  5.     let testMessage = "abrakadabra";
  6.     let alphabet = GetAlphabetWithFrequency(testMessage);
  7.     let HX = CalculateShannonEntropy(alphabet);
  8.     console.log(HX);
  9. }
  10.  
  11. function GetAlphabetWithFrequency(message) {
  12.     let alphabet = {
  13.         length: 0,
  14.     }
  15.     for (let i = 0; i < message.length; i++) {
  16.         let letter = String(message[i]);
  17.         if ([letter] in alphabet) alphabet[letter] += 1;
  18.         else {
  19.             alphabet[letter] = 1;
  20.             alphabet.length += 1;
  21.         }
  22.     }
  23.     return alphabet;
  24. }
  25.  
  26.  
  27. function CalculateShannonEntropy(alphabetWithFrequency) {
  28.     let HX = 0;
  29.     let n = alphabetWithFrequency.length;
  30.     for (let letter in alphabetWithFrequency) {
  31.         if ([letter] != "length") {
  32.             let p_i = alphabetWithFrequency[letter] / n;
  33.             HX += p_i * getBaseLog(n, p_i);
  34.         }
  35.     }
  36.     return -HX;
  37. }
  38.  
  39.  
  40. function getBaseLog(x, y) {
  41.     return Math.log(y) / Math.log(x);
  42. }
Advertisement
Add Comment
Please, Sign In to add comment