Teh­tä­vä:
Shannonin ala­ra­ja

Ly­hyt Math­Check-oh­je (uu­teen vä­li­leh­teen)

Shannonin in­for­maa­tio­teo­ria kä­sit­te­lee si­tä, kuin­ka tii­viis­ti in­for­maa­tio­ta voi pa­ka­ta. Täs­sä teh­tä­väs­sä tu­tus­tu­taan muu­ta­maan pe­rus­asiaan hä­viöt­tö­män pak­kauk­sen ta­pauk­ses­sa, eli ti­lan­tees­sa, jos­sa pa­kat­tu in­for­maa­tio täy­tyy pys­tyä pa­laut­ta­maan vir­heet­tö­mäs­ti. Ai­he­pii­ri tar­joaa mah­dol­li­suu­den har­joi­tel­la mm. in­duk­tio­to­dis­tus­ta bit­ti­jo­nois­ta koos­tu­vil­le jou­koil­le.

Hä­viöt­tö­män pak­kauk­sen vas­ta­koh­ta on hä­viöl­li­nen pak­kaus, mi­kä tar­koit­taa, et­tä in­for­maa­tio saa pik­kui­sen muut­tua jos pa­kat­tu tie­dos­to pie­ne­nee tun­tu­vas­ti. Hä­viöl­li­siä me­ne­tel­miä käy­te­tään laa­jas­ti esi­mer­kik­si va­lo­ku­via ja mu­siik­kia pa­kat­taes­sa.

Vaih­te­le­van­pi­tui­set koo­dit

Ole­tam­me, et­tä eri­lai­sia merk­ke­jä on ai­na­kin kak­si. Jos ih­met­te­let, mik­si täl­lai­nen ra­joit­ta­va ole­tus teh­dään, niin mie­ti het­ki mi­ten teks­te­jä voi kir­joit­taa, jos käy­tet­tä­vis­sä on vain yk­si tai nol­la eri­lais­ta merk­kiä.

Tar­kas­tel­laan pit­kän suo­men­kie­li­sen teks­tin esit­tä­mis­tä bit­ti­jo­no­na. Teks­tis­sä voi esiin­tyä pie­niä ja iso­ja kir­jai­mia, vä­li­lyön­te­jä se­kä joi­ta­kin vä­li­merk­ke­jä ja ken­ties mui­ta­kin merk­ke­jä, ku­ten nu­me­roi­ta. Jos eri­lai­sia merk­ke­jä on `n`, yk­sin­ker­tai­sin­ta on esit­tää ku­kin merk­ki `|~log_2 n~|` bi­til­lä. Tä­mä ei kui­ten­kaan ole muis­tin käy­tön kan­nal­ta te­ho­kas­ta, kos­ka toi­set mer­kit ovat pal­jon har­vi­nai­sem­pia kuin toi­set. Esi­mer­kik­si q on har­vi­nai­nen ja e ylei­nen suo­men­kie­li­sis­sä teks­teis­sä.

Te­hok­kaam­paan esi­tys­ta­paan pääs­tään käyt­tä­mäl­lä ylei­sil­le mer­keil­le vä­hem­män bit­te­jä kuin har­vi­nai­sil­le. Täs­sä teh­tä­väs­sä tut­ki­taan, kuin­ka tä­mä kan­nat­taa teh­dä ja mi­ten vä­häl­lä mää­räl­lä bit­te­jä voi­daan sel­vi­tä.

An­nam­me en­sin sym­bo­lit jat­kos­sa tar­vit­ta­vil­le kä­sit­teil­le ja tu­tus­tum­me nii­hin esi­mer­kin avul­la. Oi­keas­sa käyt­tö­ti­lan­tees­sa teks­tien on tar­koi­tus ol­la pit­kiä, mut­ta esi­merk­ki on ly­hyt, jot­ta se ei oli­si ko­vin työ­läs. Mer­kit­sem­me eri­lais­ten merk­kien mää­rää `n`:llä ja an­nam­me niil­le in­dek­sit 1, …, `n`. Jos mer­kit ovat

1234
nkas

niin in­dek­siä 1 vas­taa­va merk­ki on n ja in­dek­siä 2 vas­taa­va merk­ki on .
tai

Mer­kit­sem­me ko­ko teks­tin merk­kien mää­rää `m`:llä ja eri merk­kien esiin­ty­mis­ker­to­jen mää­riä sym­bo­leil­la `m_1`, …, `m_n`. Jos teks­ti­nä on ”ana­nas­ka­na” (tois­ar­vois­ta li­sä­tie­toa)Ana­nas­ka­na on eräs ruo­ka­la­ji. Se on tä­hän teh­tä­vään oi­kein so­pi­va, kos­ka sii­nä esiin­tyy vain pie­ni mää­rä eri kir­jai­mia, ja kos­ka sen kir­jain­ten ko­ko­nais­mää­rä hel­pot­taa jat­kos­sa esiin­ty­viä las­ku­ja., niin in­dek­siä 1 vas­taa­va merk­ki eli n esiin­tyy sii­nä kol­mes­ti. Tä­mä se­lit­tää al­la val­miik­si an­ne­tun vas­tauk­sen. Vas­taa mui­hin koh­tiin sa­mal­la pe­riaat­teel­la.
`m_1 =`,
`m_2 =`,
`m_3 =` ja
`m_4 =`.
tai

Mer­kin­tä `sum_(i=1)^n m_i` tar­koit­taa `m_1 + m_2 + ... + m_n`. Pä­tee `m``=``sum_(i=1)^n m_i`. Ana­nas­ka­na-esi­mer­kis­sä `n=` ja `m =`.
tai

ananaskana-koodi Merk­kien esi­tys­ta­vat bit­ti­ku­vioi­na muo­dos­ta­vat koo­din. Käy­täm­me ana­nas­ka­na-esi­mer­kis­sä seu­raa­vaa koo­dia:

1234
nkas
000101011

Mer­kit­sem­me eri mer­keil­le an­net­tu­jen bit­ti­ku­vioi­den pi­tuuk­sia `l_1`, …, `l_n`. Ana­nas­ka­na-esi­mer­kis­sä
`l_1 =`,
`l_2 =`,
`l_3 =` ja
`l_4 =`.
tai

Ko­ko teks­tin esit­tä­mi­seen ku­luu `sum_(i=1)^n m_i l_i` eli `m_1 l_1 + ... + m_n l_n` bit­tiä. Ana­nas­ka­na-esi­mer­kis­sä
`m_1 l_1 =`,
`m_2 l_2 =`,
`m_3 l_3 =` ja
`m_4 l_4 =`.
tai

Näil­lä va­lin­noil­la sa­nan ”ana­nas­ka­na” esit­tä­mi­seen ku­lui bit­tiä. Käyt­tä­mäl­lä kul­le­kin mer­kil­le `|~log_2 n~|``=`2 bit­tiä oli­si ku­lu­nut bit­tiä, mi­kä on enem­män.
tai

Mer­kin esiin­ty­mis­ti­heys on sen esiin­ty­mis­ker­to­jen mää­rä jaet­tu­na teks­tin merk­kien ko­ko­nais­mää­räl­lä eli `m_i/m`. Mer­kit­sem­me si­tä sym­bo­lil­la `p_i`, siis `p_i``=``m_i/m`. Ana­nas­ka­na-esi­mer­kis­sä `p_1``=``3/10` ja `p_2=`.
tai

Kos­ka `m_1 + ... + m_n``=``m`, ai­na pä­tee `sum_(i=1)^n p_i =`.
tai

Kes­ki­mää­rin merk­kiä koh­ti ku­luu `1/m sum_(i=1)^n m_i l_i``=``sum_(i=1)^n p_i l_i` bit­tiä. Tä­män lu­vun ha­luai­sim­me saa­da mah­dol­li­sim­man pie­nek­si. Ana­nas­ka­na-esi­mer­kis­sä merk­kiä koh­ti ku­luu kes­ki­mää­rin bit­tiä (il­mai­se de­si­maa­li­lu­ku­na).
tai

Teks­tiä lu­ke­van oh­jel­man on tie­det­tä­vä käy­tet­ty koo­di. Yk­si mah­dol­li­suus on ker­toa se en­nen teks­tiä. Se li­sää kaik­kiaan tar­vit­ta­vien bit­tien mää­rää niin pal­jon, et­tä hyö­ty me­ne­te­tään, jos teks­ti on ly­hyt. Pit­kien teks­tien ta­pauk­ses­sa me­ne­tel­mä on sil­ti kan­nat­ta­va. Voi­daan myös teh­dä niin, et­tä merk­kien esiin­ty­mis­ti­heyk­siä ei las­ke­ta sii­tä teks­tis­tä jo­ka ha­lu­taan esit­tää, vaan lu­kui­na `p_i` käy­te­tään tääl­lä jul­kais­tu­ja merk­kien esiin­ty­mis­ti­heyk­siä suo­men­kie­les­sä.

Siis, kun lu­vut `p_i` on an­net­tu, ta­voit­tee­na on va­li­ta koo­di si­ten, et­tä `sum_(i=1)^n p_i l_i` on mah­dol­li­sim­man pie­ni. Sel­lai­nen koo­di on op­ti­maa­li­nen.

Mi­tä pie­nem­piä bit­ti­ku­vioi­den pi­tuu­det eli lu­vut `l_i` ovat, si­tä pie­nem­pi täs­tä sum­mas­ta tu­lee. Koo­dia ei voi kui­ten­kaan va­li­ta mi­ten ta­han­sa. Ei esi­mer­kik­si voi­da va­li­ta bit­ti­ku­vioik­si 0, 01 ja 10, kos­ka sil­loin ei tie­det­täi­si, tu­li­si­ko 010 tul­ki­ta 0-10 vai 01-0. Tä­mä on sa­ma ky­sy­mys kuin koos­tuu­ko yh­dys­sa­na ”kai­vosauk­ko” osis­ta ”kai­vo” ja ”sauk­ko” vai ”kai­vos” ja ”auk­ko”.

Täs­tä ei kui­ten­kaan seu­raa, et­tä isol­la `n` ei voi­tai­si lain­kaan käyt­tää ly­hyi­tä bit­ti­ku­vioi­ta. Ai­na voi­daan saa­da yk­si `l_i` yk­kö­sek­si va­lit­se­mal­la yh­den mer­kin bit­ti­ku­viok­si 0 ja kai­kil­le muil­le mer­keil­le 1-al­kui­nen bit­ti­ku­vio.

Niin­pä lu­ku­jen `l_i` ar­vo­ja sää­te­lee mo­ni­mut­kai­nen eh­to. Seu­raa­vak­si sel­vi­täm­me tar­kas­ti, mi­kä tä­mä eh­to on.

Kraftin epä­yh­tä­lö

Kun eri mer­kit käyt­tä­vät eri mää­rän bit­te­jä, on­gel­mak­si tu­lee, mi­ten tie­de­tään mis­sä edel­li­sen mer­kin bit­ti­ku­vio lop­puu ja seu­raa­van al­kaa. Yk­sin­ker­tai­sin ja eni­ten käy­tet­ty rat­kai­su on so­pia, et­tä min­kään mer­kin bit­ti­ku­vio ei saa ol­la toi­sen mer­kin bit­ti­ku­vion ai­to al­ku­osa. (Bit­ti­jo­non ai­to al­ku­osa on al­ku­osa, jo­ka on ly­hyem­pi kuin bit­ti­jo­no it­se.) Jos siis jol­le­kin mer­kil­le on an­net­tu bit­ti­ku­viok­si 0100, bit­ti­ku­vioi­ta 01000, 01001, 010000 jne. ei voi an­taa mil­le­kään mer­kil­le. Kut­sum­me tä­tä al­ku­osa­eh­dok­si.

ananaskana-koodi Kun koo­di esi­te­tään puu­na, al­ku­osa­eh­to tar­koit­taa, et­tä merk­ke­jä esiin­tyy vain leh­dis­sä eli sol­muis­sa, jois­ta puu ei jat­ku alas­päin.

Jo­kai­nen al­ku­osa­eh­toa nou­dat­ta­va koo­di to­teut­taa Kraftin epä­yh­tä­lön, jo­ka on seu­raa­va. Ol­koot käy­tös­sä ole­vien bit­ti­ku­vioi­den pi­tuu­det `l_1`, …, `l_n`. Sil­loin

`sum_(i=1)^n 2^(-l_i)``<=``1` .

Ko­keil­laan! Las­ke ym. sum­ma, kun bit­ti­ku­viot ovat an­ne­tut. Alim­mas­sa ta­pauk­ses­sa ei nou­da­te­ta al­ku­osa­eh­toa.

     { 0, 10, 11 } tai
{ 00, 010, 10, 11 } tai
{ 00, 010, 1, 011 } tai
  { 00, 01, 1, 10 } tai

To­dis­tam­me Kraftin epä­yh­tä­lön in­duk­tiol­la. Poh­ja­ta­pauk­ses­sa va­lit­tu­jen bit­ti­ku­vioi­den jou­kos­sa on vain yk­si al­kio, ni­mit­täin tyh­jä bit­ti­jo­no ε. Siis `n=1` ja `l_1 =`. Sil­loin ko­ko sum­ma on `2^(-l_1) =`.
tai

In­duk­tio­as­ke­lees­sa ole­tam­me, et­tä Kraftin epä­yh­tä­lö pä­tee jo­kai­sel­le al­ku­osa­eh­toa nou­dat­ta­val­le jou­kol­le bit­ti­jo­no­ja, joi­den pi­tuus on enin­tään `n`. Ta­voit­tee­na on to­dis­taa, et­tä se pä­tee myös jo­kai­sel­le al­ku­osa­eh­toa nou­dat­ta­val­le jou­kol­le B bit­ti­jo­no­ja, joi­den pi­tuus on enin­tään .
tai

Jos B si­säl­tää tyh­jän bit­ti­jo­non, niin muu­ta sii­nä ei voi ol­la­kaan, kos­ka Tyh­jä bit­ti­jo­no on jo­kai­sen muun bit­ti­jo­non ai­to al­ku­osa, ja al­ku­osa­eh­to kiel­tää jou­kon al­kio­ta ole­mas­ta toi­sen al­kion ai­to al­ku­osa. Olem­me jo to­dis­ta­neet Kraftin epä­yh­tä­lön täs­sä ti­lan­tees­sa. Se oli in­duk­tion poh­ja­ta­paus.

Muus­sa ta­pauk­ses­sa B koos­tuu bit­ti­jo­nois­ta muo­toa 0β tai 1β, mis­sä β on bit­ti­jo­no, jon­ka pi­tuus on enin­tään `n`. Ol­koon B0 = { β | 0β ∈ B } eli nii­den β jouk­ko, joil­le 0β ∈ B eli jouk­ko, jo­ka saa­daan pois­ta­mal­la nol­lal­la al­ka­vis­ta B:n al­kiois­ta alun nol­lat., ja ol­koon B1 = { β | 1β ∈ B }. Näi­den jouk­ko­jen al­kiot ovat pi­tuu­del­taan enin­tään `n`. Jos α ∈ B0 ja β ∈ B0 niin 0α ∈ B ja 0β ∈ B, jo­ten α ei voi ol­la β:n ai­to al­ku­osa, kos­ka muu­toin 0α oli­si 0β:n ai­to al­ku­osa, vas­toin ole­tus­ta et­tä B nou­dat­taa al­ku­osa­eh­toa. Näin ol­len B0 nou­dat­taa al­ku­osa­eh­toa. In­duk­tio-ole­tuk­sen vuok­si se nou­dat­taa myös Kraftin epä­yh­tä­löä. Em­me mer­kit­se sum­maan mi­tä ar­vo­ja `i` saa vaan jou­kon ni­men B0, kos­ka jou­kon ni­mi on täs­sä ti­lan­tees­sa sel­keäm­pi kuin in­dek­sit. Siis `sum_(B_0) 2^(-l_i)``<=``1`. Sa­ma päät­te­ly pä­tee myös B1:lle, jo­ten `sum_(B_1) 2^(-l_i)``<=``1`.

Kos­ka B:n al­kiot saa­daan li­sää­mäl­lä B0:n al­kioi­den eteen 0 (jol­loin pi­tuus kas­vaa yh­del­lä) ja B1:n al­kioi­den eteen 1, pä­tee

`sum_B 2^(-l_i) =``sum_(B_0) 2^(-(l_i+1)) + sum_(B_1) 2^(-(l_i+1))`

Po­tens­si-, yh­teen- ja ker­to­las­kun sään­tö­jen no­jal­la
`sum_(B_0) 2^(-(l_i+1)) =``* sum_(B_0) 2^(-l_i)`, jo­ten edel­lä joh­de­tun pe­rus­teel­la saa­daan `sum_(B_0) 2^(-(l_i+1))``<=`.
tai

Sa­ma pä­tee B1:lle, jo­ten kaik­kiaan
`sum_B 2^(-l_i)``<=``+``=`.
tai

In­duk­tio­as­kel ja sa­mal­la Kraftin epä­yh­tä­lön to­dis­tus on val­mis.

Kraftin epä­yh­tä­löä kut­su­taan Kraftin epä­yh­tä­lök­si, kos­ka Leon Kraft esit­ti sen gra­dus­saan vuon­na 1949 ja ker­toi, et­tä Raymond Redheffer oli kek­si­nyt sen. Brockway McMillan to­dis­ti vuon­na 1956, et­tä se pä­tee ylei­sem­min kuin mi­tä edel­lä to­dis­tet­tiin. Se pä­tee kai­kil­le koo­deil­le, jois­sa kak­si eri merk­ki­jo­noa ei kos­kaan tuo­ta sa­maa bit­ti­jo­noa. Sik­si tä­tä epä­yh­tä­löä kut­su­taan myös Kraft–McMillanin epä­yh­tä­lök­si.

Huffmanin koo­di

Lu­ku `sum_(i=1)^n p_i l_i` saa­daan mah­dol­li­sim­man pie­nek­si Huffmanin koo­dil­la. Se muo­dos­te­taan seu­raa­vas­ti. Jos eri merk­ke­jä on vain kak­si, toi­sel­le niis­tä an­ne­taan bit­ti­ku­viok­si 0 ja toi­sel­le 1. Muus­sa ta­pauk­ses­sa va­li­taan kak­si eri merk­kiä, joil­le `p_i` on mah­dol­li­sim­man pie­ni. Ol­koot nii­den in­dek­sit `j` ja `k`. Sit­ten ra­ken­ne­taan Huffmanin koo­di muun­ne­tul­le mer­kis­töl­le, jos­sa va­lit­tu­jen kah­den mer­kin si­jal­la on yk­si merk­ki, jon­ka esiin­ty­mis­ti­heys on `p_j + p_k`. Ol­koon β se bit­ti­ku­vio, jon­ka yh­dis­tet­ty merk­ki saa täs­sä koo­dis­sa. Mer­keil­le `j` ja `k` an­ne­taan bit­ti­ku­vioik­si β0 ja β1, ja β pois­te­taan.

Ana­nas­ka­na-esi­mer­kis­sä har­vi­nai­sim­mat mer­kit ovat k ja s, jo­ten ne yh­dis­te­tään mer­kik­si ks ja et­si­tään Huffmanin koo­di mer­kis­töl­le {n, a, ks}. Sen har­vi­nai­sim­mat mer­kit ovat ks ja n, jo­ten ne yh­dis­te­tään ja et­si­tään Huffmanin koo­di mer­kis­töl­le {ksn, a}. Nyt va­li­taan ksn:n bit­ti­ku­viok­si 0 ja a:n bit­ti­ku­viok­si 1. (Ai­van yh­tä hy­vin oli­si voi­tu va­li­ta toi­sin­päin.) Kos­ka ksn teh­tiin yh­dis­tä­mäl­lä ks ja n, li­sä­tään sen bit­ti­ku­vion eli 0:n pe­rään 0, jol­loin saa­daan n:n bit­ti­ku­vio 00, ja 1, jol­loin saa­daan ks:n bit­ti­ku­vio 01. Vii­mei­ses­sä vai­hees­sa ks:n bit­ti­ku­vios­ta teh­dään k:n bit­ti­ku­vio 010 ja s:n bit­ti­ku­vio 011. Näin saa­tiin edel­lä käy­te­tyt bit­ti­ku­viot.

Se, et­tä Huffmanin koo­di to­teut­taa al­ku­osa­eh­don, seu­raa in­duk­tiol­la sii­tä mi­ten se muo­dos­te­taan.

To­dis­taak­sem­me, et­tä Huffmanin koo­di mi­ni­moi lu­vun `sum_(i=1)^n p_i l_i`, huo­maam­me al­ka­jai­sik­si, et­tä op­ti­maa­li­sel­la koo­dil­la on seu­raa­vat omi­nai­suu­det:

Näil­lä eväil­lä voim­me to­dis­taa Huffmanin koo­din op­ti­maa­li­suu­den in­duk­tiol­la.

Huffman kek­si koo­din­sa vuon­na 1951 kir­joit­taes­saan pro­jek­ti­ra­port­tia, jol­la saat­toi kor­va­ta ten­tin. Hä­nen oh­jaa­jan­sa oli it­se­kin yrit­tä­nyt kek­siä op­ti­maa­li­sen koo­din, mut­ta ei ol­lut on­nis­tu­nut.

Shannonin ala­ra­ja

Nyt tar­kas­te­lem­me eri­kois­ta­paus­ta, jos­sa lu­vut `p_i` ovat muo­toa `2^(-h)`, mis­sä `h` on po­si­tii­vi­nen ko­ko­nais­lu­ku. Ol­koon har­vi­nai­sim­man mer­kin esiin­ty­mis­ti­heys `2^(-H)`, siis `H` on suu­rin käy­tös­sä ole­va `h`. Jo­kai­nen muu esiin­ty­mis­ti­heys on sen pa­ril­li­nen mo­ni­ker­ta, kos­ka `2^(-h)``=``2^(H-h)2^(-H)` . Myös toi­sek­si har­vi­nai­sim­mal­la mer­kil­lä on sa­ma esiin­ty­mis­ti­heys, kos­ka muu­toin `sum_(i=1)^n p_i` oli­si pa­ri­ton mää­rä `2^(-H)`:n mo­ni­ker­to­ja ei­kä voi­si ol­la 1 ku­ten pi­tää. Täs­tä seu­raa, et­tä kun Huffmanin al­go­rit­mi yh­dis­tää kak­si mah­dol­li­sim­man har­vi­nais­ta merk­kiä, on yh­dis­te­tyn mer­kin esiin­ty­mis­ti­heys `2^(-h)`, mis­sä `h=`. Olem­me to­dis­ta­neet, et­tä jos Huffmanin al­go­rit­min alus­sa kaik­ki esiin­ty­mis­ti­hey­det ovat muo­toa `2^(-h)`, niin myös jo­kai­ses­sa vä­li­vai­hees­sa kaik­ki esiin­ty­mis­ti­hey­det ovat muo­toa `2^(-h)`.
tai

To­dis­tam­me in­duk­tiol­la, et­tä täs­sä ta­pauk­ses­sa Huffmanin al­go­rit­mi ta­kaa jo­kai­sel­le mer­kil­le, et­tä `l_i``=``-log_2 p_i`.

Täs­sä eri­kois­ta­pauk­ses­sa saam­me `sum_(i=1)^n p_i l_i``=``-sum_(i=1)^n p_i log_2 p_i`.

Ylei­ses­sä ta­pauk­ses­sa ei voi ai­na ol­la `l_i``=``-log_2 p_i`, kos­ka `l_i` on luon­nol­li­nen lu­ku mut­ta `-log_2 p_i` ei vält­tä­mät­tä ole luon­nol­li­nen lu­ku. Ylei­ses­sä ta­pauk­ses­sa pä­tee

`sum_(i=1)^n p_i l_i``>=``-sum_(i=1)^n p_i log_2 p_i` .

Se voi­daan to­dis­taa — yl­lä­tys, yl­lä­tys! — in­duk­tiol­la. To­dis­tus on mu­ka­na täy­del­li­syy­den vuok­si ja esi­merk­ki­nä sii­tä, et­tä täl­lai­sia­kin las­kel­mia tar­vi­taan. Kurs­sin kan­nal­ta se ei kui­ten­kaan ole kes­kei­nen, jo­ten saat hy­pä­tä sen yli lä­hel­lä lop­pua ole­viin ky­sy­myk­siin, jos se ei kiin­nos­ta. Ol­koon

`f(x)``=``x log_2 x + (1-x) log_2 (1-x)` .

Tar­vit­sem­me tie­don, et­tä jos `0 < x < 1`, niin `f(x)``>=``-1`. Se saa­daan tut­ki­mal­la `f(x)`:n de­ri­vaat­taa `f'(x)``=``log_2 x``-``log_2 (1-x)`. Kos­ka `log_2 x` on ai­dos­ti kas­va­va, on `log_2 (1-x)` ai­dos­ti vä­he­ne­vä, jo­ten `-log_2 (1-x)` ja `f'(x)` ovat ai­dos­ti kas­va­via. De­ri­vaat­ta on nol­las­sa sil­loin kun `log_2 x``=``log_2 (1-x)`, mi­kä ta­pah­tuu kun `x=1-x` eli `x=1/2`. Si­joit­ta­mal­la saa­daan `f(1/2)=-1`. Kun `0 < x < 1`, on `f(x)` mää­ri­tel­ty. Niin­pä kun `0 < x < 1/2`, on `f'(x) < 0` ja `f(x)` on ai­dos­ti vä­he­ne­vä, ja kun `1/2 < x < 1`, on `f'(x) > 0` ja `f(x)` on ai­dos­ti kas­va­va. Funk­tion `f` ku­vaa­ja on siis suun­nil­leen U-kir­jai­men muo­toi­nen, kuo­pan poh­jan ol­les­sa pis­tees­sä `(1/2, -1)`. Saat ku­van ai­hees­ta pai­na­mal­la nap­pia.
tai

In­duk­tion poh­ja­ta­pauk­ses­sa on kak­si merk­kiä, jo­ten `n=2` ja `p_2``=``1-p_1`. Sik­si, ja rus­kei­den koh­tien al­la esi­tet­ty­jen pe­rus­te­lu­jen vuok­si,
`sum_(i=1)^n p_i l_i``=`Kos­ka bit­ti­ku­viot ovat 0 ja 1, pä­tee `l_1=l_2=1`.`p_1 + p_2``=``1`
`>=`Edel­lä to­dis­te­tun pe­rus­teel­la `f(p_1)``>=``-1`, jo­ten `-f(p_1)``<=``1`.`-(p_1 log_2 p_1 + (1-p_1) log_2 (1-p_1))`
`=``-sum_(i=1)^n p_i log_2 p_i` .

In­duk­tio­as­kel­ta var­ten in­dek­soim­me mer­kit uu­del­leen si­ten, et­tä en­sin ovat ne, joi­den bit­ti­ku­vio al­kaa 0:lla, ja sit­ten ne, joi­den bit­ti­ku­vio al­kaa 1:llä. Ol­koon `n_0` 0-al­kuis­ten bit­ti­ku­vioi­den mää­rä. Mer­kit­sem­me `q``=``sum_(i=1)^(n_0) p_i`. Täl­löin `sum_(i=1)^n p_i l_i`
`=`Yh­tä­suu­ruus saa­daan sie­ven­tä­mäl­lä `q`:t ja `(1-q)`:t pois, yh­dis­tä­mäl­lä sum­mat, ker­to­mal­la `(l_i-1)` au­ki ja huo­maa­mal­la, et­tä `1 + sum_(i=1)^n p_i(-1)``=``1 - sum_(i=1)^n p_i``=``0`.`1 + q sum_(i=1)^(n_0) p_i/q (l_i-1) + (1-q) sum_(i=n_0+1)^n p_i/(1-q) (l_i-1)`
`>=`En­sim­mäi­nen sum­ma vas­taa koo­dia, jo­ka koos­tuu 0:lla al­ka­vien bit­ti­ku­vioi­den lop­pu­osis­ta il­man ko. 0:aa, ja jäl­kim­mäi­nen sum­ma vas­taa koo­dia, jo­ka koos­tuu 1:llä al­ka­vien bit­ti­ku­vioi­den lop­pu­osis­ta il­man ko. 1:stä. Ja­ka­jat `q` ja `1-q` huo­leh­ti­vat, et­tä kum­man­kin näis­tä koo­deis­ta si­säl­lä esiin­ty­mis­ti­heyk­sien sum­ma on 1. Epä­yh­tä­lö saa­daan so­vel­ta­mal­la näi­hin koo­dei­hin in­duk­tio-ole­tus­ta.`1 - q sum_(i=1)^(n_0) p_i/q log_2 (p_i/q) - (1-q) sum_(i=n_0+1)^n p_i/(1-q) log_2 (p_i/(1-q))`
`=`On käy­tet­ty mm. kaa­vaa `log_2 (p_i/x)``=``log_2 p_i - log_2 x` se­kä si­tä, et­tä 0-al­kuis­ten koo­din kaik­kien merk­kien esiin­ty­mis­ti­heyk­sien sum­ma on 1, ja sa­moin 1-al­kuis­ten koo­dil­le.`1 - sum_(i=1)^(n_0) p_i log_2 p_i + q log_2 q - sum_(i=n_0+1)^n p_i log_2 p_i + (1-q) log_2 (1-q)`
`=`Sum­mat on yh­dis­tet­ty ja yk­kö­nen siir­ret­ty sum­man pe­rään.`-sum_(i=1)^n p_i log_2 p_i + 1 + q log_2 q + (1-q) log_2 (1-q)`
`>=`Edel­lä to­dis­te­tun pe­rus­teel­la `f(q)``>=``-1`.`-sum_(i=1)^n p_i log_2 p_i` .

Tä­mä on Claude Shannonin vuon­na 1948 to­dis­ta­ma ala­ra­ja sil­le, kuin­ka tii­viis­ti tie­toa voi­daan pa­ka­ta, jos ole­te­taan, et­tä merk­kien esiin­ty­mi­nen on toi­sis­taan riip­pu­ma­ton­ta. (Ole­tus ei ai­na pä­de: esi­mer­kik­si suo­men­kie­les­sä seu­raa­va merk­ki on hy­vin har­voin t, jos kak­si edel­lis­tä ovat ol­leet t. Shannonin teo­ria on kui­ten­kin erin­omai­nen al­ku tie­don pak­kaa­mi­sen tut­ki­mi­sel­le.)

Lo­puk­si joh­dam­me, mi­tä Shannonin ala­ra­jak­si tu­lee, jos ole­tam­me, et­tä jo­kai­nen merk­ki esiin­tyy yh­tä usein. Kak­si­kan­tai­nen lo­ga­rit­mi kir­joi­te­taan Math­Checkis­sä log2. Kos­ka merk­ke­jä on `n`, saam­me `p_i =`, `log_2 p_i =` ja `-sum_(i=1)^n p_i log_2 p_i =`. Toi­vot­ta­vas­ti muis­tat näh­nee­si jo­tain sa­man­nä­köis­tä ai­kai­sem­min jos­sain yh­tey­des­sä!
tai