{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Entropic Coding and Compression\n", "===============================\n", "\n", "*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_python/) for details about how to install the toolboxes.\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This numerical tour studies source coding using entropic coders (Huffman and arithmetic)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Method definition ndgrid(AbstractArray{T<:Any, 1}) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:3 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:3.\n", "WARNING: Method definition ndgrid(AbstractArray{#T<:Any, 1}, AbstractArray{#T<:Any, 1}) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:6 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:6.\n", "WARNING: Method definition ndgrid_fill(Any, Any, Any, Any) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:13 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:13.\n", "WARNING: Method definition ndgrid(AbstractArray{#T<:Any, 1}...) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:19 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:19.\n", "WARNING: Method definition meshgrid(AbstractArray{T<:Any, 1}) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:33 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:33.\n", "WARNING: Method definition meshgrid(AbstractArray{#T<:Any, 1}, AbstractArray{#T<:Any, 1}) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:36 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:36.\n", "WARNING: Method definition meshgrid(AbstractArray{#T<:Any, 1}, AbstractArray{#T<:Any, 1}, AbstractArray{#T<:Any, 1}) in module NtToolBox at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:44 overwritten at /Users/quentin/.julia/v0.5/NtToolBox/src/ndgrid.jl:44.\n" ] } ], "source": [ "using PyPlot\n", "using NtToolBox" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Source Coding and Entropy\n", "-------------------------\n", "Entropic coding converts a vector $x$ of integers into a binary stream\n", "$y$. Entropic coding exploits the\n", "redundancies in the statistical distribution of the entries of $x$ to\n", "reduce as much as possible the size of $y$. The lower bound for the\n", "number of bits $p$ of $y$ is the Shannon bound :\n", "\n", "$$p=-\\sum_ih(i)\\log_2(h(i))$$\n", "\n", "where $h(i)$ is the probability of apparition of symbol $i$ in $x$.\n", "\n", "Fist we generate a simple binary signal $x$ so that $0$ has a probability $p$\n", "to appear in $x$.\n", "\n", "Probability of 0." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "p = 0.1;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Size.\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 512;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Signal, should be with token 1,2." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = (rand(n) .> p) + 1;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can check the probabilities by computing the empirical histogram." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Empirical p = 0.099609375" ] } ], "source": [ "h = [sum(x .== 1); sum(x .== 2)]\n", "h = h/sum(h)\n", "\n", "print(\"Empirical p = $(h[1])\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compute the entropy of the distribution represented as a vector $h$ of proability that should sum to 1.\n", "We take a max to avoid problems with null probabilties." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Entropy = 0.4677561172295487" ] } ], "source": [ "e = - sum(h.*log2([max(e,1e-20) for e in h]))\n", "print(\"Entropy = $e\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Huffman Coding\n", "--------------\n", "A Hufman code $C$ associates to each symbol $i$ in $\\{1,...,m\\}$ a binary code $C_i$\n", "whose length is as close as possible to the optimal bound\n", "$-\\log_2\\left(h(i)\\right)$, where $h(i)$ is the probability of apparition of the\n", "symbol $i$.\n", "\n", "We select a set of proabilities." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "h = [.1, .15, .4, .15, .2];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The tree $T$ contains the codes and is generated by an iterative algorithm.\n", "The initial \"tree\" is a collection of empty trees, pointing to the symbols numbers." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m = length(h)\n", "T=Array{Any,1}(zeros(m)); # create an empty tree" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We build iteratively the Huffman tree\n", "by grouping together the two erees that have the smallest probabilities.\n", "The merged tree has a probability which is the sum of the two selected\n", "probabilities.\n", "\n", "Initial probability." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#we use the symbols i = 0,1,2,3,4 (as strings) with the associated probabilities h(i)\n", "\n", "for i in 1:m\n", " T[i] = (h[i],string(i))\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Iterative merging of the leading probabilities." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "while length(T) > 1\n", "\n", " sort!(T) #sort according to the first values of the tuples (the probabilities)\n", " t = tuple(T[1:2]...)\n", " q = T[1][1] + T[2][1]\n", " T = [T[3:end]; [(q,t)]]\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We trim the computed tree by removing the probabilities." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "function trim(T)\n", " T0 = T[2]\n", " if typeof(T0) == String\n", " return T0\n", " else\n", " return (trim(T0[1]),trim(T0[2]))\n", " end\n", "end\n", "T = trim(T[1]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We display the computed tree." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_hufftree(T);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once the tree $T$ is computed, one can compute the code $C_{i}$\n", "associated to each symbol $i$. This requires to perform a deep first\n", "search in the tree and stop at each node." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "codes = Dict()\n", "\n", "function huffman_gencode(T,codes,c)\n", " if typeof(T) == String #test if T is a leaf\n", " codes[T] = c\n", " else\n", " huffman_gencode(T[1],codes, string(c, \"0\"))\n", " huffman_gencode(T[2],codes, string(c, \"1\"))\n", " end\n", "end\n", "\n", "huffman_gencode(T,codes,\"\") ;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Display the code." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Code of token 4: 110\n", "Code of token 1: 100\n", "Code of token 5: 111\n", "Code of token 2: 101\n", "Code of token 3: 0\n" ] } ], "source": [ "for e in keys(codes)\n", " println(string(\"Code of token \", e, \": \", codes[e]))\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We draw a vector $x$ according to the distribution $h$.\n", "\n", "Size of the signal." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 1024;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Randomization." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "function rand_discr(p; m = 1)\n", " \"\"\"\n", " rand_discr - discrete random generator \n", " \n", " y = rand_discr(p, n);\n", " \n", " y is a random vector of length n drawn from \n", " a variable X such that\n", " p(i) = Prob( X=i )\n", " \n", " Copyright (c) 2004 Gabriel Peyré\n", " \"\"\"\n", "\n", " # makes sure it sums to 1\n", " p = p/sum(p)\n", " \n", " n = length(p)\n", " coin = rand(m)\n", " cumprob = [0.]\n", " append!(cumprob, cumsum(p))\n", " sample = zeros(m)\n", " \n", " for j in 1:n\n", " ind = find((coin .> cumprob[j]) & (coin .<= cumprob[j+1]))\n", " sample[ind] = j\n", " end\n", " return sample\n", "end\n", "\n", "x = rand_discr(h, m=n);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 1__\n", "\n", "Implement the coding of the vector $x$ to obtain a binary vector $y$, which corresponds to replacing each sybmol $x(i)$ by the code $C_{x(i)}$." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "include(\"NtSolutions/coding_2_entropic/exo1.jl\")" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Insert your code here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compare the length of the code with the entropy bound." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Entropy bound = 2197.9538889431196\n", "Huffman code = 2254\n" ] } ], "source": [ "e = - sum(h.*log2([max(e,1e-20) for e in h]))\n", "println(\"Entropy bound = $(n*e)\")\n", "println(\"Huffman code = $(length(y))\") " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Decoding is more complicated, since it requires to iteratively parse the tree $T$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Initial empty decoded stream." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x1 = [];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Perform decoding." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "T0 = T\n", "for e in y\n", " if e == '0'\n", " T0 = T0[1]\n", " else\n", " T0 = T0[2]\n", " end\n", " if typeof(T0) == String\n", " append!(x1,T0)\n", " T0 = T\n", " end\n", "end\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We test if the decoding is correct." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Error (should be zero) : 0.0" ] } ], "source": [ "err = norm(x-map(x->parse(Int, x), x1))\n", "print(\"Error (should be zero) : $err\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Huffman Block Coding\n", "--------------------\n", "A Huffman coder is inefficient because it can distribute only an integer\n", "number of bit per symbol. In particular, distribution where one of the\n", "symbol has a large probability are not well coded using a Huffman code.\n", "This can be aleviated by replacing the set of $m$ symbols by $m^q$\n", "symbols obtained by packing the symbols by blocks of $q$ (here we use $m=2$ for a binary alphabet). This breaks\n", "symbols with large probability into many symbols with smaller proablity,\n", "thus approaching the Shannon entropy bound.\n", "\n", "\n", "Generate a binary vector with a high probability of having 1, so that the\n", "Huffman code is not very efficient (far from Shanon bound).\n", "\n", "Proability of having 0." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "t = .12;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Probability distriution." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "h = [t, 1-t];" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate signal." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n = 4096*2\n", "x = (rand(n) .> t) + 1;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For block of length $q=3$, create a new vector by coding each block\n", "with an integer in $\\{1,...,m^q=2^3\\}$. The new length of the vector is\n", "$n_1/q$ where $n_1=\\lceil n/q\\rceil q$.\n", "\n", "Block size." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "q = 3;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maximum token value." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "m = 2;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "New size." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n1 = Int(ceil(n/q)*q);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "New vector." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x1 = zeros(n1)\n", "x1[1:length(x)] = x\n", "x1[length(x)+1:end] = 1\n", "x1 = x1 - 1\n", "x2 = []\n", "\n", "mult = [m^j for j in 0:q-1]\n", "for i in 1:q:n1-1\n", " append!(x2,sum(x1[i:i+q-1].*mult)+1)\n", "end" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": true }, "outputs": [], "source": [ "H = h\n", "for i in 1:q-1\n", " Hold = H\n", " H = []\n", " for j in 1:length(h)\n", " append!(H,[e*h[j] for e in Hold])\n", " end\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A simpler way to compute this block-histogram is to use the Kronecker product." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true }, "outputs": [], "source": [ "H = h\n", "for i in 1:q-1\n", " H = kron(H, h)\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Exercise 2__\n", "\n", "For various values of block size $k$, Perform the Huffman coding and compute the length of the code.\n", "Compare with the entropy lower bound." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Entropy bound = 0.5293608652873644\n", "---\n", "Huffman(block size = 1) = 1.0\n", "Huffman(block size = 2) = 0.67041015625\n", "Huffman(block size = 3) = 0.5736083984375\n", "Huffman(block size = 4) = 0.5513916015625\n", "Huffman(block size = 5) = 0.5406494140625\n", "Huffman(block size = 6) = 0.537353515625\n", "Huffman(block size = 7) = 0.5438232421875\n", "Huffman(block size = 8) = 0.5411376953125\n", "Huffman(block size = 9) = 0.541748046875\n" ] }, { "data": { "image/png": "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1kNERETEAFcPSbp/F664WNmZgYiIiMiYGOAagO3giIiIyJQwwDUA28ERERGRKWGAawB/f8DWVrnMAEdERETGxgDXAFZWQFCQcjkjA8jONm49RERE1LIxwDUQ28ERERGRqWCAayBObE9ERESmggGugUJC7i+zHRwREREZEwNcAzk7Az4+yuVjx4CSEuPWQ0RERC0XA5weVO3gKiqAw4eNWwsRERG1XAxwemA7OCIiIjIFDHB6qN4Tle3giIiIyFgY4PTQsyfQvr1yOSUFqKoybj1ERETUMjHA6aH6xPY3bwLnzxu3HiIiImqZGOD0xHZwREREZGwmGeDKy8sxf/58uLu7w87ODsHBwdi1a5fexxk5ciQUCgXmzJljsNrYDo6IiIiMzSQD3OTJk/HJJ58gKioKn332GSwtLTF27Fgk63HLa8uWLUhNTYUkSQatLTBQOTcqwDtwREREZByWDdnJ09NT7yAkSRIuXryod0GHDh3Cpk2bsGLFCsTExAAAoqOj0adPH8ybNw8HDhyo9xhlZWV44403sGDBAixatEjvGupia6sMcampyjZw16/f79hARERE9CA06A7c0KFDtb5at26N9PR02NnZoX///vD394ednR3S09Nhb2+PIUOGyCooPj4elpaWeO6559TrrK2tMWPGDKSkpCA7O7veYyxbtgxCCLzxxhuyaqhP9ceoKSlNcgoiIiKiWjXoDlxsbKzG33/88Uf8+OOP2LlzJ0aMGKGxbefOnXj66afx97//XVZBx48fh7e3N+zt7TXWBwUFqbe7ubnV+vrMzEwsW7YMsbGxsLa2llVDfUJDgRUrlMtJScDjjzfJaYiIiIh0ktUG7u2338bLL7+sFd4AZceB2bNn46233pJVUG5uLlxdXbXWu7q6QgiBnJycOl//+uuvIyAgABEREbLO3xDsiUpERETG1KA7cDVduHAB7dq1q3V7u3btZLV/A4C7d+/qvHNmY2Oj3l6bPXv2YOvWrTh06JCsczdUp05A9+7ApUvKOVHLy4FWrZr0lERERERqsu7A9ejRA2vXrkVxcbHWttu3b+Obb75B9+7dZRVka2uLsrIyrfWlpaXq7bpUVVXhlVdeweTJkxEQECDr3PpQtYMrLQWOHWvy0xERERGpyboD9+6772LChAno1asXpk6dCi8vL0iShLS0NKxbtw75+fnYvHmzrIJc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7bVbt27FkiVLsGDBAoSGhuocKysrg5ubG/bt26ftodRse/bseWhRY82vT2Vj3Yz1a0dExsceOCIyayUlJQCgfQ36oGbNmqFBgwY4d+5chWNnz56FJEnw8PAAALRt2xa///67Xt87dOhQhIaGYsKECWjUqBFWrVql13VqtRojR47EyJEjUVJSgueffx6LFi1CZGRkleVDzp8/j4kTJ2LYsGF45513Khxv27Yt9u3bhz59+sDOzk6vODQ0PXnnz5+v9HuJyDKxB46IzFZJSQl+/vln2NraVvkaU6VSITQ0FNu2bdNZniojIwMxMTHo27evduzX8OHDcerUKWzbtk2v73/ppZewcuVKfPnll4iMjKz2/AdLkdjY2KBz584oKytDcXFxpdfk5+fj+eefh4eHB6Kioio9Z9SoUSgpKam0p620tBS5ublVxtS8eXP4+flh3bp1uHPnjrZ9z549OHPmTLXPRETmiT1wRGQWhBDYtWsXzp49CwC4efMmoqOjkZKSgsjISJ0B+A9auHAh9u7di6CgIEybNg316tXD6tWrUVRUhCVLlmjPe+uttxAbG4uRI0di0qRJ6NGjB7KysvDjjz/i66+/rnSiwrRp05Cbm4vZs2fDycnpoYlcaGgomjdvjqCgILi5ueHMmTNYtWoVBg8eDAcHh0qv+eCDD3D27FnMmTOnwmSNtm3bIjAwEH379sXLL7+MxYsXIzk5GaGhoahfvz7Onz+P2NhYrFixAsOGDasyro8++giDBg1CUFAQwsPDkZWVhc8//xw+Pj5V9mwSkZlTbgIsEZFMU1rj/q1BgwbC399frF69usL5KpVKzJ8/X6ctOTlZDBgwQDg5OQlHR0cREhIiEhISKlybk5MjZsyYITw8PIS9vb1o3bq1CA8PF9nZ2UIIuYyISqUSmzdv1rnunXfeESqVSnzxxRdVPseaNWtEcHCwaNq0qVCr1aJ9+/binXfe0Snf8WAZkYkTJ1Z4ds02adIknft/8803olevXsLBwUE0atRIdOvWTURGRoobN25U8yssRFxcnPjb3/4m1Gq18PHxEVu3bhUTJ05kGREiCyUJwVGsRER10aRJk3DgwAH8+eefSodCRDXEMXBEREREFoYJHBEREZGFYQJHRFSHcS1UIsvEMXBEREREFoY9cEREREQWhgkcERERkYVhAkdERERkYZjAEREREVkYJnBEREREFoYJHBEREZGFYQJHREREZGGYwBERERFZGCZwRERERBbm/wOOTrgt9vtUMwAAAABJRU5ErkJggg==", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Huffman(block size = 10) = 0.5364990234375\n" ] } ], "source": [ "include(\"NtSolutions/coding_2_entropic/exo2.jl\");" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Insert your code here." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Julia 0.5.0", "language": "julia", "name": "julia-0.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.5.0" } }, "nbformat": 4, "nbformat_minor": 1 }