Ja, letzte Woche hatte ich ja mit diesem Kapitel 7
zur Codierung angefangen und schon mal angefangen,
einige von den Begriffen kurz einzuführen.
Wie gesagt, hier nochmal einige von den wichtigen Begriffen zur Wiederholung.
Also wie gesagt, dass man eben weiß, Minimalcode,
sprich alle Codewörter werden wirklich ausgenutzt.
Ein Code ist redundant, wenn das eben genau nicht
der Fall ist
Was die Informationstheoretisch dahinter verbirgt, würden wir in Zwarfsfall,
also heute oder spätestens am Freitag dann also auch noch kennenlernen,
weil also auch diese Eigenschaft der Redundanz ist für einige Sachen,
also gerade in Bezug auf Fehlerkorrektur, dann nämlich wieder entscheidend wichtig.
Ja, und aufgehört hatte ich im Prinzip mit einigen Erklärungen,
wo es also erstmal darum geht, also einschrittige beziehungsweise zyklisch einschrittige Codes so ein bisschen zu motivieren,
wofür man die vielleicht bräuchte, beziehungsweise was da letztendlich so die Vorteile sind, die man da dabei hat.
Ansonsten das, was wir eigentlich schon als Code in dem Sinne kennen,
wäre jetzt erst mal der Dualcode zu nennen,
also sprich die Darstellung der Dualzahlen,
der letztendlich dann eigentlich auch nichts anderes als ein Code ist,
wo ich dann eben entsprechend zu meiner Stellenwertigkeit,
das eben als Zahl zu einer Basis in einem System,
also in diesem Fall jetzt wie näher, interpretieren kann,
wo ich aber eben auch sagen kann,
also dies dargestellte Wort ist dann eben letztendlich ein Code.
So, wenn ich jetzt sage, ich habe eine
begrenzte Wortgröße mit 16- bis 32, was auch immer.
Nicht dann kann man eben sagen, gut, dass was gilt,
ist, es werden alle Kotwörter benutzt, nach Definition vorher, ist das demzufolge also ein Minimalcode. Themen Codewort existiert ein komplementäres Codewort,
komplementäre Kotworte waren quasi alle Bit invertiert,
ergibt eben genauso ein Codewort und bei fester Wortbreiter habe ich dann eben letztendlich einen zyklischen Code,
sprich genau das, was war atmetisch gesehen hat,
in dem Sinne immer als Überlauf haben,
nicht dass also quasi nach der größten,
beziehungsweise wenn ich im Zwei-Kompliment bin, also kleinsten darstellbaren Zahl,
also sprich dem Vektor aus lauter Einsen,
dass dann als nächstes dann eben wieder der Weg aus lauter Nullen kommt und das Ganze dann eben entsprechend dadurch zyklisch ist.
Ja, Dualzahn, wie schon gesagt,
sind natürlich nicht einschrittig, nicht weil wenn ich entsprechend jetzt,
also gerade bei dieser Stellenwertigkeit, dann meine Überträge habe,
das hatte ich also letzte Woche auch schon kurz gezeigt,
und die hier also beispielsweise einen Übergang von 7 zu 8 habe,
dann ändern sich eben wirklich alle Bild,
dass es eben genau,
dass er nicht
so einschrittig ist
Gut, ich hatte dann ja schon so ein bisschen motiviert,
wofür man dann eigentlich einschrittige Codes braucht,
dass man dort dann eben zeigen kann,
wenn ich also jetzt Bit ablese,
zu beliebigen Zeitpunkten, beziehungsweise ich also nicht gewährleisten kann,
dass ich wirklich genau alle Bits letztendlich gleichzeitig ändern und das habe ich bei technischen Systemen eben nun mal,
wenn ich jetzt mit irgendwelchen physikalischen Messgrößen, die aufnehme,
die erfasse, dass ich da dann eben beliebig viel Ablesefehler haben kann.
Und genau dafür sind dann eben solche einschrittigen Codes entsprechend wichtig.
Und dieses Beispiel mit der Winkelkulierscheibe, da hatte ich also
Freitag also auch schon mal so ein bisschen kurz vorgestellt,
wie das dann im Prinzip aussieht, beziehungsweise wofür man das braucht.
Und daraus ergibt sich dann eben auch, wenn ich jetzt
einen normalen Dualcode habe, sprich meine Zahlen einfach binär durchzähle.
Nicht dann habe ich eben einen maximalen Ablesefehler von 2 hoch
N minus 1. Wenn ich einen einschrittigen Code habe,
dann kann es eben sein, dadurch,
dass ich also quasi einzelne Bits ein bisschen verschieben,
dass ich dann entweder eins zu groß oder eins zu klein bin,
aber das ist dann eben letztendlich dann auch der maximale Ablesefehler.
Konstruktion einschrittiger Kurz werde ich gleich entsprechend zeigen.
Diese Folien hatte ich dann ja also auch schon aufgelegt.
Also hier ist das Ganze eben nochmal so ein bisschen grafisch visualisiert,
wo man also quasi hier über sechs Bit ganz normal binär zählt,
die einzelnen Signale teilweise zeitlich gegeneinander so ein bisschen verschoben sind.
Und wenn ich dann also hier über die Zeit mir ansehe,
was ich dort also letztendlich ablesen würde, dann sieht man eben schon,
dass dann eben teilweise da entsprechende Ausreißer mit vorkommen können.
Und wie gesagt, maximal könnte dann eben letztendlich als maximaler
Ablesefehler da dann also zwei hoch in minus eins auftreten.
Wenn ich das Ganze mit einem einschrittigen Coden mache, sieht man eben,
die Werte schlagen hier letztendlich stetig an. Das einzige,
was dann eben nur ist, also aufgrund von Ablesefehlern,
dass dann also quasi hier die Treppenstufen nicht alle gleich breit sind,
sondern eben mal ein bisschen kurzer,
mal ein bisschen länger,
nicht je nachdem,
wie jetzt also hier
quasi irgendwelche Zeitverzögerungen in den Signalen
da sind
Gut, taucht technisch, also ich sag mal,
bei solchen Winkeldrehgebern zum Beispiel auf, nicht,
also hier ist das Ganze nochmal ein Beispiel so einer 5-Bit-Godierscheibe aufgezeigt,
wo man dann eben sieht,
nicht das Muster hier ist dann eben wirklich so angeordnet,
dass eben beim beispielsweise zwischen der Kodierung der Sieben und der Kodierung der Acht,
wie man die dann eben hier eben sehr gut sieht dann,
also letztendlich sich wirklich nur ein Einzelnes wird, nämlich in diesem Fall,
also hier dieses Bit ändert und alle anderen sind dann jeweils identisch und das Einzige,
was dann eben wirklich nur sein kann, ist,
dass ich letztendlich,
also hier entweder den oder den Wert falsch ablese,
aber ansonsten da dann richtig, ich bin gut.
Und das kann man also beliebig weit treiben,
also hier ist das Ganze jetzt mal irgendwie für zehn Bit dargestellt.
So, jetzt ist natürlich die Frage, wie komme ich zu solchen einschrittigen Kurz? Wie kann man die jetzt,
also wenn ich jetzt sage, okay,
so ein Zehn-Bit-Kurt nicht und habe dann also hier irgendwie sowas,
dann kann man sagen, ja gut,
das sieht also irgendwie schickes Muster ganz interessant aus,
aber wie kann man sowas jetzt also irgendwie systematisch erzeugen,
als einen schrittigen Code und da gibt es also im Prinzip zwei einfach anzuwendende Verfahren.
Das eine ist im Prinzip einfach ein ganz triviales Rekussionsverfahren,
wo man sagt, also ich fange im Prinzip mit den beiden Code-Wörtern 0 und 1 an.
Damit habe ich also einen einschrittigen Code, Einbritt,
Wortlänge, zwei Elemente. Und Rekursion geht dann eben folgendermaßen,
dass wenn ich sage, ich habe einen einschrittigen Code mit N-Code-Wörtern,
N ist typischerweise natürlich dann also eine Zweier-Potenz,
dann kann ich daraus einen Code erzeugen,
der dann eben zwei N-Code-Wörter hat, indem ich einfach die Code-Wörter,
die ich schon habe,
in Reihenfolge notiere
Vor jedes Codewort, was ich notiert habe,
eine Null schreibe und anschließend die Code war dann umgekehrter Reihenfolge
wieder notiere und vor jedes Codewort eine Eins schreibe.
Wie sieht das aus? Sieht man hier? Also
ich fange an mit den beiden Wörtern 0 und Eins.
Die schreibe ich quasi hier einmal hin.
Eine Null davor und habe dann hier in umgekehrter Reihenfolge quasi
die Eins und die Null und schreibe eine Eins davor.
So, dann damit habe ich jetzt also aus den
zwei vier Codewörter gemacht. Kann ich wieder entsprechend verdoppeln,
indem ich jetzt diese vier Codewörter nehme.
0-0-1, 1-
1 und 1
Und das Ganze dann hier aufschreibe,
wieder eine Null vorne weg, in umgekehrter Reihenfolge,
also 1-0, 1-1,
0-1 und 0-0,
dann dahinter schreibe und eine 1 vorne weg.
Nicht in dieses hier wäre dann eben jetzt ein einschrittiger Code mit acht Codewörtern,
in diesem Fall dann also auch immer oder generell auch immer zyklisch einschrittig.
Das heißt,
wenn ich hier hinten bei der 1-0-0
angekommen bin und dann also hier wieder beim ersten Codewort weitermachen würde,
auch da ändert sich dann immer jeweils
nur ein Bild
So, dieser Code heißt Greycode,
lässt sich aus einem Binärcoach, das ist nämlich das,
was dann Lachner folgt,
dann eben auch entsprechend sehr einfach, technisch realisieren,
wird deswegen eigentlich also auch immer ganz gern für irgendwelche Codierungen benutzt,
weil also von Greycode in Binärcode oder in Dualcode eben eine sehr einfache Umrechnung möglich ist.
Vorgleich zwei Folien später. Gut, eine andere Möglichkeit,
einschrittige Codes zu generieren, ist im Prinzip so ein grafisches Verfahren.
Dazu werden sogenannte KV oder Kanu-Feld-Diagramme genommen. Hier einmal aufgezeigt für
vier Variablen. Also ich habe hier Variablen X3, X-2,
X-1, X-0. Habe die dann quasi als Spalten bzw. Zahlenbeschriftung jetzt,
also hier für so eine Matrix, also eingetragen.
Und die sind jeweils im Grecode geschrieben. Nicht,
das heißt, von hier 001, 11110, nicht,
das ist eben genau letztendlich diese vier Werte des Grecodes
Und hier genauso. Und das bewirkt, dass,
wenn ich jetzt beispielsweise jetzt für diese vier Variablen so ein Diagramm nehme und mir quasi jetzt,
das ist er sich auf der rechten Seite angedeutet und mir dort jetzt quasi den binären Wert,
den ich also mit X3 bis X0 kodiert habe,
dort reinschreibe.
Entschuldigung. So, dann sieht man eben hier,
dass quasi jeweils benachbarte Felder sich eben auch immer nur um
genau ein einziges unterscheiden
Logischerweise, weil ja quasi die Nummerierung der Zahlen, beziehungsweise der Spalten,
ja im Grecode erfolgt ist und dass dadurch letztendlich genau diese Eigenschaft hat.
Gut, hier ist das Ganze jetzt gezeigt für vier Variablen.
Man kann diese Diagramme aber eben auch für zweimal zwei,
zweimal Vieh, also im Prinzip für drei Variablen,
für zwei Variablen und für bis zu sechs Variablen letztendlich machen.
Spätestens danach wird das Ganze dann sehr unübersichtlich.
Das wird uns dann später auch noch in einigen Übungsaufgaben
in einem anderen Zusammenhang da nämlich wieder begegnen,
wo man dann eben auch mit solchen KV-Diagrammen entsprechend arbeitet.
So, wie kann ich daraus jetzt einschrittige Codes machen?
Ja, ich habe ja gesagt, zwei benachbarte Felder,
also entweder Zahlen oder Spaltenweise, unterscheiden sich immer nur um ein einziges Bild.
So, und wenn ich jetzt also gefragt werde,
erzeugt mir jetzt also hier irgendwie einen einschrittigen Code,
dann kann ich irgendwo an beliebiger Stelle in meinem Diagramm quasi anfangen.
Ich also beispielsweise jetzt ja an der Stelle und gehe dann
hier einfach irgendwie auch immer ein Fahrt durch,
wenn dieser Vater jetzt so gewählt ist,
wie das also hier in diesem ersten Beispiel
der Fall ist
Wo ich dann quasi mit dem Endpunkt neben dem Anfangspunkt lande,
dann habe ich also auch nur einen zyklisch einschrittigen Code.
Und beispielsweise wäre dann eben so ein Pfad 0-1,
3-2, also das sind jetzt immer hier die Dezimalwerte dazu.
Ich müsste ich dann also entsprechend binär aufschreiben,
dann hätte ich dann also letztendlich dann meinen Wert.
So, und wie ich hier letztendlich durch mir anda,
bleibt mir überlassen. Nicht wenn ich jetzt sage,
ich brauche jetzt also nicht alle 16 Elemente,
sondern eben beispielsweise nur sowas wie zwölf Elemente,
dann kann ich eben
irgendwie sowas nehmen
Laufe dann hier irgendwie so eine Pfad ab wie jetzt. Also die sind hier,
wo ich dann eben beispielsweise da dann eben mit diesen zwölf Elementen,
also die beispielsweise an diesen Pfad habe. Gut,
wie man sieht, ist so ein Verfahren natürlich nicht eindeutig,
sondern also beliebig frei wählbar, also sprich je nachdem,
wo ich starte, wie ich da durchgehe.
Also es gibt nicht den, einen einschrittigen Code,
also sowas wie ein Grecode ist per Definition fest vorgegeben,
aber ansonsten werden jetzt also nur gefragt wird,
also irgendwie sowas wie konstruieren Sie einen einschrittigen Code,
dann kann man das eben auch beispielsweise mit so einem KV-Diagramm machen.
Und da dann eben das aufzeichnen und dann eben irgendwie da
so ein Pfad durchlegen. So,
was dabei dann auch noch zu beachten ist, bei KV-Diagrammen ist,
dass sich die linke und rechte Spalte bzw. linke oder obere und untere
Zeile eben auch immer nur um ein einziges Bit unterscheiden.
Das heißt, ich kann mir das Ganze eben auch immer
so vorstellen, dass es quasi über diese Ränder
hinweg verbunden ist
Das heißt, ich kann hier irgendwie jetzt so einen einschrittigen Quote machen,
indem ich jetzt sage, also ich fange an,
4, 5, 13, 15, 7,
6, 14, 10, 10,
und gehe nach der Zehn dann quasi hier an die Stelle in die Acht,
ist auch einschrittig, nicht 10 Dual kodiert, 1,
0, 1. 0, 8 wäre 1, 0,
0, und ich habe eben genau dieses eine Bit,
was mir dann eben letztendlich hier in diesem Fall, also X1 von 1 nach 0 wechselt, da dann eben auch diesen entsprechenden Übergang.
Und damit lassen sich dann eben in diesen KV-Diagramm einfach jetzt grafisch einschrittige Codes erzeugen.
Gut, zur Generierung von Grecodes. Hier auch noch mal
kurz schon mal angemerkt. Auch das wird uns dann,
also im späteren Kapitel zu Schaltnetze noch kurz weiter begegnen,
werden deswegen eben, wie gesagt,
technisch ganz gerne verwendet,
weil man die eben sehr einfach aus einer Binärdarstellung bzw.
einem Dualcode
erzeugen kann
Und zwar einfach, indem ich, also da folgenden Algorithmus oder Pseudoalgorithmus anwende. Ich sage,
wenn ich zum Beispiel jetzt von Dual in Gray umrechne,
wird das am weitesten links stehender, also das Moos signifikant,
Bit, das Dualwortes eben auch gleich zu dem Moos significant Bit des Graywards.
Und dann gehe ich einfach stelle für stelle im Dualwort von links nach rechts weiter. Und bei jedem Koffizientenwechsel,
das heißt Wechsel von 0 nach 1 oder von 1 nach 0,
schreibe ich in dem Grayward eine 1, wenn sich so koeffizient nicht ändert,
das heißt, ich dual als Folge 0-0 oder 1-1 habe, schreibe ich in dem Greywort eine Null.
Hier als Beispiel, das soll das Dualwort sein,
also die drei, das Zugehörige Greywort, wäre dieses hier,
die 1 wird abgeschrieben, dann gucke ich,
wie unterscheiden sich diese beiden Stellen, die unterscheiden sich nicht,
also schreibe ich an dieser Stelle eine Null,
dann gucke ich mir die nächste Stelle an,
wie unterscheiden sich diese beiden Stellen,
die ändern sich,
demzufolge schreibe ich hier in einem Greywort eine 1 und hier
von der 1 zu der 1 ändert sich wieder nichts,
also wird hier wieder eine Null hingeschrieben
So, und das Ganze ist dann eben technisch sehr einfach zu realisieren,
eben indem ich einfach paarweise diese Elemente mit sogenannten X-Orga dann,
also sprich mit einem Exklusiv-Oder, einfach mitweise verknüpfe und berechne,
beziehungsweise als Ausdruck in der Programmiersprache könnte ich also zum Beispiel sowas nehmen,
indem ich dann einfach sage,
ich nehme mir also hier diesen Vektor
X Machen Bitvasus exklusiv oder von dem X,
was dann eben um eine Stelle nach rechts geschoben wird.
Also das heißt, dieses hier wäre jetzt also quasi so ein Ausdruck in,
wie man hier also beispielsweise ein Java programmieren würde.
Gut. Ja, umgekehrt geht es im Prinzip genauso oder ähnlich einfach.
Auch da kann ich sagen, Umrechnung von Graywort in Dualwort,
dass Am weitesten links stehen, da ist Most-Significant-Bit,
wird einfach eins zu eins übernommen. Anschließend gucke ich jetzt eben,
ob in dem Greyboard eine Eins steht, wenn eine Eins steht,
dann ändert sich quasi jetzt das Bit des Dualworts.
Wenn dort eine Null steht, ändert sich das Bit eben nicht.
Und in dem Fall wäre das jetzt,
wenn ich also hier als Greyboard, also quasi diese 0010 habe,
kann ich dann eben einfach rechnen, sagen, okay,
die Null wird übernommen.
Hier habe ich eine Null, demzufolge ändert sich An dieser Stelle
dieses Bild nicht, sondern wird eins zu eins übernommen.
Dann habe ich in dem Grayboard eine Eins. Das heißt,
von hier, nach hier in dem Dualwort ändert sich das Bit.
Demzufolge wird aus der 0-1er-1. Dann habe ich in
dem Grayboard an der Stelle eine Null. Das heißt,
der Wert ändert sich nicht und diese Eins wird hierhin übernommen.
Das ist dann quasi nichts anderes als das Verfahren umgekehrt genommen.
Nicht wie man dann also auch in dem Beispiel sieht,
dass es dann eben genau die Umrechnung von Der 3 in Drehkodierung in die 3 in der Dualkodierung.
Und auch das kann man eben entsprechend eins zu eins direkt in Hardware realisieren.
Deswegen so war es ganz praktisch. Gut, ja,
das eigentlich nochmal so zu den einschrittigen Codes.
Jetzt kommen wir nochmal so ein bisschen zu den Grundlagen,
was ich also ja auch letzte Woche schon angedeutet hatte,
wo es eigentlich darum geht, wie sieht das jetzt aus,
hinsichtlich der Kodierung, wenn ich sogenannte Quellenkodierung mache.
Das heißt, wenn ich jetzt Eigenschaften von meinen zu kodierenden Zeichen setzen,
irgendwie in der Kodierung irgendwie berücksichtigen möchte, also sprich das,
was so zum Beispiel jetzt bei den Buchstaben im Morsekot ja schon gesehen haben,
dass wenn bestimmte Buchstaben häufiger sind,
dass sich dort dann eben entsprechend kürzere Kotwörter einsetze, als wenn die entsprechend unwahrscheinlicher sind.
Und das wäre dann eben etwas,
was dann letztendlich hier unter diesem Stichwort kurz variabler länger auftaucht,
nicht wo man dann eben sagt, Ich versuche insgesamt,
die beispielsweise jetzt für eine Datenübertragung, die Menge der Zeichen,
die ich übertrage, durch eine geeignete Kodierung hinsichtlich durch die Symbolhäufigkeiten anzupassen und dadurch dann also entsprechend weniger Daten für die Übertragung zu benutzen.
Daneben wird sowas auch mit eingesetzt bei einigen oder bei relativ vielen auch Park- bzw. Komprimierungsprogrammen,
wo man dann eben auch sagen kann,
wenn ich also im Prinzip sowas wie Tipp,
was auch immer, einsätze,
auch hinter diesen Komprimierungen stecken,
im Prinzip einige von diesen Ideen,
dass sich also quasi bestimmte Zeichen bzw. Bit folgen häufiger habe
als andere und dafür dann also quasi an bestimmten Code wählen kann,
der dann eben eine besonders kompakte Kodierung hat und dadurch insgesamt eben von der Datenmenge kleiner werde,
ohne dass ich in diesem Fall dann also
irgendwelche Informationen letztendlich verlieren
Gut, also wie gesagt, Grundidee, häufige Symbole bekommen Kurzrekord,
Codewörter, entsprechend selten auftretende Symbole, bekommen längere Codewörter.
Problem ist da natürlich, dass ich die Trennung der Codewörter
dann also nicht mehr so einfach machen kann,
wie ich das bei Blockcodes machen kann.
Blockcodes, was war das noch? Ja, das ist schon wieder
drei Minuten her. Alle Kurz haben die gleiche Wortlänge. Also sprich,
wenn ich jetzt eben sowas habe wie Zahlen oder Aski-Code, also Zahlen mit einer fixen Bitterstellung, Aski-Code, was weiß ich auch immer. Nicht,
dann kann ich sagen, wenn ich weiß,
die Daten werden übertragen, ich zähle einfach mit,
Bit, 1, 2, 3 für 5,
6, 7, 8, das ist dann ein Zeichen,
was jetzt beispielsweise in UTF8-Kodierung irgendwie, na gut,
der F8 nicht, da müsst ihr nochmal gucken,
ob das dann eben entsprechend ein längeres ist,
aber meinetwegen ISO 88,
59-Kodierung irgendwie ankommt und könnte das dann eben entsprechend direkt in der Tabelle nachschauen,
umsehen,
So nicht. Und das heißt,
da kann man eben sehr einfach mitzählen,
wo bin ich in dem Code,
wenn ich jetzt aber die kurz mit variabler Länge habe,
dann haben wir eben genau das Problem,
was sie ja auch schon in diesem Morse-Code-Baum aufgezeigt habe,
dass diese Codes dann eben in der Regel erstmal nicht eindeutig dekodierbar sind,
beziehungsweise das, was dann formal dahinter steht, ist eben,
dass man sagen muss, es gibt dann eben so eine bestimmte Bedingung,
wenn der Code Prefrix frei ist, beziehungsweise die Fanor-Bedingungen erfüllt,
Dann habe ich das Problem nicht.
Oder wenn ich da so spezielle marke,
also sprich im Morsecode wäre das eben genauso was wie,
dass ich eben zwischen den einzelnen Zeichen dann eher so ein bisschen längere Sendepausen habe,
dass man dadurch dann also eine eindeutige Dekodierung hinkriegt.
So, Fahnebedingungen, was ist das? Also,
grob gesagt kann ich einfach sagen,
ich kann so einen Code immer dann eindeutig dekodieren,
wenn gewährleistet ist,
dass kein Codewort Prefix eines anderen Codeworts ist
Das heißt, wenn ich also für ein Codewort eine bestimmte Bit-Kombination habe und
genau diese Bit-Kombination nie als Brefix von irgendwas anderem auftaucht,
dann ist das eben eindeutig dekodierbar,
nennt sich dann eben auch immer Brefix-Eigenschaft bzw. der Code heißt dann also auch immer Brefix-Code.
Gut, Blockcodes sind da sowieso immer automatisch. Das ist im Prinzip ein Verfahren,
was jetzt also nicht nur bei der Codierung in der Informatik auftaucht,
sondern das haben wir eigentlich tagtäglich schon,
also irgendwo Beispiel bei den Telefonnummern, insofern man,
zumindest noch hier nach diesem alten Festnetztelefonschema irgendwie vorgeht.
Nicht, wo man sagen kann, okay, also Notrufnummern,
1-1-0, 1-1-2,
sind eindeutig. Und es gibt keine Telefonnummer,
die mit 1-1-0 anfängt und dann irgendwie weitergeht.
Und dann haben wir zum Beispiel in Deutschland also eben irgendwie folgendes System,
dass man sagen kann, okay, Ortsnetz, also sprich,
wenn ich jetzt also innerhalb von Hamburg anrufe,
dann kann ich also quasi jetzt diese Nummer hier wählen,
lande dann also bei mir im Büro
Wenn ich jetzt innerhalb Deutschlands anrufe,
dann habe ich jetzt eben noch irgendwie die Vorwahl für Hamburg,
die dann eben gekennzeichnet ist durch 0-4-0. Wenn ich das Ganze international mache,
beziehungsweise bei internationalen Rufnummern,
sofern in den Ländern jetzt nicht wieder andere Präfixe gegeben sind,
dann geht das eben quasi mit 2-0 los.
Dadurch ist eben immer gekennzeichnet,
also zum Beispiel jetzt hier in Deutschland,
2-0 ist dann eben die Vorwahl für eine internationale Rufnummer,
beziehungsweise dann kommt also eben letztendlich dann also irgendwie diese Landesvorwahl.
Nicht eine Null ist dann, also die Vorwahl,
um zu kennzeichnen, das,
was danach kommt,
ist dann irgendwie
eine Ortsvorwahl
Irgendwann geht das dann eben letztendlich in die Telefonnummern. Gut,
beim Morsecode hatte ich ja schon gezeigt, ist eben genau diese Fahne-Bedingung verletzt.
Nicht, weil ich da jetzt eben sagen kann,
wenn ich jetzt hier so eine Co-Tabelle habe, das ist eben nicht eindeutig.
Also die Folie hatte ich also auch schon mal auffliegen,
wo man dann eben sagen kann,
also wenn ich hier so ein Codewort habe,
kann ich also noch sagen,
also hinten als letzte Zeichen wird entweder ein N oder ein R stehen,
nicht aber alles, was hier irgendwie davor ist,
kann ich dann also beliebige Kombinationen von E und I und S dann irgendwie mir dann noch irgendwie passend zusammensuchen.
Das ist dann eben letztendlich nicht eindeutig
Gut, ansonsten das Ganze,
auch die Folie gab es ja schon mal,
wird dann eben typischerweise durch so einen Kotbaum beschrieben bzw. dekodiert und was dann eben für den Morse-Code gilt,
dass eben letztendlich die Symbole, das heißt, die einzelnen Zeichen,
nicht nur Blätter, sondern eben auch die Knoten sind,
weil damit kennzeichne ich ja dann eben auch,
dass die eine kürzere Kodierung haben und die Fahnebedingungen,
dass die verletzt ist, sieht man dann eben einfach dadurch,
dass In den Code war dann in den Faden letztendlich auch hier in den Knoten irgendwelche Symbole stehen,
wären, wenn die Symbole eben nur in den Blättern stehen würden,
dann wäre das jetzt wieder ein eindeutig dekodierbarer Code,
weil ich dann also genau diese Eigenschaft,
das also beispielsweise dann das E-Prefix von dem I ist,
dann eben nicht mehr hätte.
Das heißt, wenn ich also jetzt hier nur dies A
eine Symbole hatte und diese beiden Talbäume jetzt quasi nicht,
dann ist es egal,
was hier letztendlich dann noch irgendwo folgt,
dann wäre es ihm,
würde dieser Code dann eben auch wieder
der Prefix-Eigenschaft gehorchen
Gut, auch auch sowas wie Morsecode kann man letztendlich eine eindeutige binäre Kodierung machen, so ist es ja nicht. Also das muss,
was man dann immer machen muss,
ist das Ganze dann eben wieder nochmal um zu kodieren,
beziehungsweise nennt sich dann also Umschlüsselung,
also sprich bidirektionale Umkodierung dann eben auch nicht,
wo ich dann eben beispielsweise sage,
den langen Ton kodiere ich als 1-1, eine Null,
Null soll dann nämlich sowas wie so ein Trend zeichnen,
immer markieren,
den kurzen Ton als 1-0,
die Null dann eben als Trendzeichen zwischen zwei Symbolen
Und wenn ich jetzt also quasi diese Folge hier empfange,
könnte ich das eben eindeutig als SOS dekodieren,
indem ich dann eben sage, 1-0 ist kurzer Ton,
1-0 nochmal kurzer Ton, hier wieder ein kurzer Ton,
dann kommt das Trendzeichen, also sprich zwar Aufeinanderfolgende Nullen,
kann ich eben eindeutig sagen, okay,
damit ist jetzt mein eines Symbol fertig und kann das dann eben machen.
Auch da lassen sich natürlich beliebig viele Permutationen irgendwie ausdenken und es gibt eben auch noch beliebig viele andere Umschlüsselungen,
beispielsweise sowas, was hier irgendwie angedeutet ist,
also ich muss da jetzt nicht zwingend mit Dreibitt arbeiten,
sondern könnt das also dann auch so machen,
dass ich also einen langen Ton als eine Eins,
einen kurzen Ton als 0-1 und als Trendzeichen 0-0 nehme.
Da muss dann halt jetzt wieder nur gegeben sein,
dass im Prinzip die Codierung dieser drei einzelnen Symbole,
da nämlich Briefix frei ist, das ist nämlich genau das,
was also im Prinzip bei diesen beiden Methoden gewährleistet ist.
Gut, jetzt aber kommen wir natürlich zu der Frage,
wenn ich jetzt also im Prinzip irgendein Kot habe oder erstellen möchte.
Also sprich, ich habe jetzt also irgendwelche Zeichen,
seien das jetzt die Buchstaben,
der natürlichen Sprache oder des normalen Alphabets, nicht sein,
dass jetzt also irgendwelche anderen Binärwerte,
die jetzt also irgendwie zu übertragen sind.
Und dafür soll jetzt eben ein möglichst effizienter Code entwickelt werden.
Wie kann man das machen, wie kommt man dahin?
Und dazu gibt es im Prinzip eben zwei Verfahren.
Das eine ist die Kodierung nach Phano, beziehungsweise der Shen,
der da also auch in dem Bereich der Datenübertragung, der viel gemacht hat.
Also auf den geht das teilweise auch noch mit zurück.
Also es findet sich dann eben entweder unter Fahne oder unter Shannon-Fano-Kodierung.
Gut, wie komme ich dahin,
beziehungsweise wie kann man jetzt so einen Code erzeugen?
Also als erstes müssen wir sagen, was ist Voraussetzung?
Ich habe eine Anzahl von Symbolen, die ich kodieren möchte,
hier also Urwörter genannt, also irgendwie AI,
eine ganze Menge und ich habe eben zu jedem von diesen Symbolen quasi seine Wahrscheinlichkeit,
wie häufig tritt es auf?
Und das, was man dann macht, jetzt bei der Shenan-Fahne-Kodierung,
ist, dass man dann eben die Symbole anhand ihrer Wahrscheinlichkeiten in absteigender Reihenfolge kodiert.
Das heißt, ich gucke dann oder nicht kodiert Blödsinn, sortiert.
Das heißt, ich gucke dann eben jetzt erst mal für
meine Worte hier nach, wie groß sind die jeweiligen Wahrscheinlichkeiten,
schreibt die dann eben entsprechend sortiert also auf
Anschließend versuche ich in dieser sortierten Reihenfolge zwei Gruppen zu bilden.
Und zwar so, dass die möglichst beide gleich große Wahrscheinlichkeiten erhalten. Also sprich,
wenn ich jetzt also anfange und meine Symbole habe,
dann wird natürlich die Gesamtsumme der Wahrscheinlichkeiten zum Beispiel,
wird die gesamte mit der Wahrscheinlichkeiten eben eins sein.
Nicht demzufolge versuche ich dann, also quasi jetzt Elemente hier so in eine Gruppe zusammenzufassen,
dass die dann eben erst mal die Wahrscheinlichkeit 0, möglichst nah an 0,5 haben.
Als eine Gruppe und die andere Gruppe dann eben logischerweise auch möglichst nah an 0,5. Was man dabei nicht machen darf,
was also gerne dann in irgendwelchen Übungsaufgaben oder sonstiges auch mal irgendwie falsch gemacht war,
dass man diese Reihenfolge umsortiert, sondern die Reihenfolge bleibt fest,
bleibt bestehen, wird gleich an dem Beispiel,
was auf der nächsten Folie ist,
da noch ein bisschen klarer, wie das funktioniert.
So, wenn ich das dann eben gemacht habe,
kann ich eben sagen,
okay, die eine Gruppe wird beispielsweise mit einer Null,
die anderen mit einer Eins kodiert
Und anschließend wird das Verfahren rekursiv dann ihm wieder weiter angewandt,
das heißt innerhalb einer Gruppe gucke ich jetzt eben wieder, versuche das in zwei Teile zu unterteilen,
dass die möglichst gleich große Wahrscheinlichkeiten in ihren Summen haben.
Der eine Teil wird dann eben auch wieder mit null, der andere mit eins kodiert oder umgekehrt.
So, und das ganze Verfahren wird dann eben so lange wiederholt, bis ich eben irgendwann bei ein Elementigen Codierung gelandet bin. So,
dazu noch als Anmerkung,
also generell diese Verfahren sind erstmal alle nicht eindeutig,
sondern also ich kann nicht,
also egal ob ich das den einen Teil mit eins oder mit null kodiere,
natürlich zu unterschiedlichen Kodierungen kommen,
wenn ich irgendwo jetzt beispielsweise als Gruppengröße irgendwie sowas habe,
dass ich, das ist dann eben gleich in dem nächsten Beispiel,
dass ich da eben mal beispielsweise sagen kann,
also ich habe einmal 0,45 und 0,55 oder ich könnte es,
indem ich noch ein Element hinzutue,
das Ganze dann so machen,
dass ich also auf der linken Seite 0,55 und auf der
rechten 0,45 Farbe,
auch da ist es dann letztendlich
immer nicht ganz eindeutig
Was hier dann auch noch als Anmerkung zu machen ist,
logischerweise funktionieren solche Verfahren natürlich immer umso besser,
je größer die Anzahl meiner Symbole ist, die ich da unterteile.
Weil wenn ich jetzt nur drei Symbole habe,
dann habe ich jetzt nicht viel Wahrscheinlichkeit, da irgendwie was zu spielen.
Und wo das Ganze dann auch nicht richtig funktioniert,
auch das werde ich dann gleich noch kurz motivieren,
ist natürlich, wenn ich jetzt Zeichen oder Symbole habe,
die eben deutlich häufiger als 0,5 vorkomme oder eben entsprechend sehr häufig vorkommen,
nicht weil dann sind solche Verfahren auch nicht optimal.
Gibt es dann andere Verfahren? Gut, aber kommen wir
jetzt also hier erst mal zur Fahne-Kodierung zu irgendwie einem etwas anschaulicheren Beispiel.
Also ich habe hier vier Elemente, A, B,
C, D, mit Wahrscheinlichkeiten 0,45 für A,
0,1 für B, 0,154C und 0,3 für die.
So, in erster Sortierung erhalte ich dann also quasi jetzt diese sortierte Menge,
nämlich A, mit 0,45, D mit 0,3,
C mit 0,15 und B mit
Das wird jetzt eben in zwei Gruppen unterteilt, indem ich sage,
gut, ich schneide es einmal hier beide 0,45 ab und habe hier auf der rechten Seite
0,55. Demzufolge habe ich dann eben A als eine einelementige Gruppe und D,
C und B dann eben als die zweite Gruppe oder die zweite Menge.
So, dann wird A beispielsweise jetzt mit einer Null und
die hier mit einer 1 kodiert und irgendwas anderes folgt noch.
Das ist dann nämlich jetzt quasi an der Rekursionsschreit. So,
nicht im nächsten Schritt sage ich jetzt, okay,
Ich muss jetzt also dieses hier noch entsprechend weiter unterteilen,
bis ich da bei allen elementigen Gruppen gelandet bin.
In dem Fall wird dann eben geguckt,
die Wahrscheinlichkeit 0,3, C, 0,15, B,
0,1, also habe ich eben hier nur Unterteilung,
ND mit 0,3 und die beiden zusammen mit 0,25. Nicht,
dass dann die zweite Unterteilung und anschließend werden die beiden noch unterteilt.
Denn da kann ich jetzt eben sagen,
nach Kodierung habe ich einmal A, jetzt mit null kodiert,
die mit 1-0 C mit 110 und B mit 111.
Jeweils jede dieser Gruppen wird dann eben einmal als Null oder das 1 kodiert,
beziehungsweise man kann das Ganze dann eben auch als einen Baum aufschreiben,
der dann also letztendlich dann immer diesen Gruppen entsprechen würde.
Gut, was habe ich jetzt mit dieser Kodierung erreicht?
Wenn man sich da jetzt anguckt,
wie groß ist die mittlere oder durchschnittliche Kotwortlänge,
die man da jetzt benutzt, dann kann ich sagen,
okay, kodiere das Wort A.
Mit einer Länge von 1. Und es tritt auf mit
einer Wahrscheinlichkeit von 0,45. So, das multipliziere ich.
Adiere dann für mein Element D. Das wird mit 2 Bit kodiert.
Hat eine Wahrscheinlichkeit von 0,3. Plus 3 Bit-Kodierung für C mit
der entsprechenden Wahrscheinlichkeit gewichtet und 3 Bit-Kodierung für B mit der entsprechenden Wahrscheinlichkeit gewichtet.
Denn wenn ich das alles zusammennehme, lande ich also bei
So, das ist die mittlere Codewortlänge, die sich jetzt bei diesem Code ergibt. Wenn ich jetzt sage,
ich hätte jetzt die Vierbitt genommen, ich kann mal sagen,
oder diese vier Symbole genommen, würde die jetzt entsprechend kodieren,
bräuchte ich eben genau zweibit, um die zu unterscheiden.
Das heißt, dann hätte ich klassisch einfach einen Blockcode,
wo ich die also durchnummeriere, A als 0-0,
B als 0-1, C als 10D als 1-1,
hätte eine mittlere Codewortlänge von zwei.
Das heißt, da sieht man dann eben schon,
Wo so ein Code, also ein bisschen,
also jetzt hier selbst an diesem kleinen Beispiel dann eben effizienter ist.
Also in diesem Fall ist er entsprechend zehn Prozent kleiner als ein Blockcode. Gut,
wenn man das jetzt also macht für kurz,
wo ich nun deutlich mehr Symbole zu codieren habe,
also hier nur als Beispiel aus Ausschnitt aus dem Buch,
wo ich jetzt also hier zum Beispiel jetzt habe,
die Wahrscheinlichkeiten der Buchstaben in der deutschen Sprache,
wobei jetzt hier noch keine Unterscheidung gemacht wurde zwischen groß Kleinschreibung,
nicht wo ich dann eben sagen kann, okay,
also das am weitesten wahrscheinlichste Zeichen ist ein Leerzeichen,
nicht dann habe ich sowas wie ein E entsprechend häufig ein N entsprechend häufig und sehr unwahrscheinlich sind eben die Buchstaben Y,
Q und X.
Und wenn man das jetzt also irgendwie dann alles mal macht,
entsprechend diesem Algorithmus irgendwie zusammenfasst,
nicht dann landet man also beim Code,
wo ich dann also quasi diese wahrscheinlichen Zeichen mit entsprechend kurzen Sequenzen,
also sprich in diesem Fall mit Dreibit,
kodiere,
während eben diese unwahrscheinlichen
dann eben mit elf oder zwölf Bit kodiert sind
Neben das, was man damit aber erreicht, ist,
dass ich eben verglichen jetzt mit einem Asky oder Isokot eben,
weil ich jetzt unterschiedliche Wahrscheinlichkeiten habe,
deutlich effizienter bin, als eigentlich diese Codes,
die eben im Prinzip optimal funktionieren für gleiche Wahrscheinlichkeiten,
bei unterschiedlichen Wahrscheinlichkeiten dann aber eben entsprechend schlechter sind.
Gut, also Shannon-Fahno-Kodierung ist das eine Verfahren,
das zweite Verfahren ist Kodierung nach Halfman
Das sieht eben so aus, dass ich eben auch wieder meine Symbole mit den Zugehörigen Wahrscheinlichkeiten habe.
In diesem Fall werden jetzt die Symbole in Aufsteigen da rein,
oder von der kleinsten zur größten Wahrscheinlichkeit hin sortiert. Und das,
was man da dann immer macht,
dass man in jedem Schritt letztendlich die beiden Symbole mit den geringsten Wahrscheinlichkeiten zusammenfasst,
daraus quasi neues Metasymbol macht,
für dieses neue Symbol dann eben quasi die Summe der Wahrscheinlichkeiten,
nimmt das entsprechend wieder neu einsortiert und dann eben wieder mit den Kleinsten entsprechend weitermachen.
Nicht nur auch da kriegt man dann eben letztendlich so einen Baum,
der sich aufbaut, der auch genau wie jetzt Fahne-Kodierung nicht eindeutig ist,
der aber eben entsprechend dann auch optimal ist.
So, hier ist es dann auch so, dass,
also dieses Verfahren,
weil man das hier dann also auch entsprechend gut mathematisch begründen kann,
dann eben die Kleinstmöglichen mittleren Codewort-Längen erzeugt,
wobei verglichen mit einer Fahne-Kodierung nimmt sich das also nicht
so sonderlich viel
So Hafenen-Codes sind eben bei relativ vielen technischen Codes auch irgendwo unter anderem mit drin. Also bei Bildkompressionen,
also JPEG-Verfahren, ich habe in den logischerweise natürlich in den MPEG in Codern,
also sprich Bewegbilder oder Filme sind das, also ist das auch mit drin,
in den ganzen neueren Codierungsverfahren für Filmen, unter anderem auch,
wobei dort dann nicht nur Hafenen-Codierung drin ist,
sondern eben auch noch diverse andere Sachen,
also da muss man mal sagen, das,
was wir heutzutage so sehen, typischerweise als Kompressionsverfahren,
wenn ich jetzt also ZIP-Arc etc., was auch immer,
mir irgendwie ausdenke oder nehme.
Das sind dann eben teilweise auch mehrstufige Kompressionsverfahren, die da eingesetzt werden. Das,
was wir an Datenformaten haben,
was dann eben beispielsweise bei Audiobild oder Videodatenkompression mit drin ist,
sind also auch sehr ja,
teilweise über drei oder vier Schritte laufende mehrstufige Verfahren,
wo also zum einen eben so eine Quellenkodierung mit drin ist,
wo auf der anderen Seite dann aber auch jetzt wieder aus anderen Gründen dann eben noch so was wieder mit drin ist,
wo dann beispielsweise dann wieder irgendwelche Fehlertoleranz eingebaut werden kann und,
und, und.
Wie gesagt, das ist dann im Einzelnen jeweils nachzusehen.
Also wie gesagt, hier werde ich jetzt eigentlich in
der Vorlesung immer nur so die ganz einfachen Grundlagen vorstellen.
Gut, wie sieht das Hafenan-Verfahren jetzt also hier in diesem Fall
Für dieses Beispiel aus. Auch hier mit dem gleichen Beispiel.
A, B, C, D mit den entsprechenden Wahrscheinlichkeiten. In diesem Fall jetzt also quasi vom der kleinsten zur größten Wahrscheinlichkeit hin sortiert,
hätte ich dann eben quasi diese Menge und das,
was das Verfahren dann macht, ist,
dass man eben die Elemente mit den kleinsten Wahrscheinlichkeiten nimmt,
also B und C, zu einem neuen Wort zusammenfasst,
dessen Wahrscheinlichkeit wäre dann eben 0,25,
nämlich die 0,1 und die 0,15,
das Ganze wird dann eben entsprechend Hier wieder einsortiert in diesem Fall würde die 0,25 dann immer noch hier vorne stehen vor dem D mit der 0,3. Und anschließend wird das Verfahren dann eben rekursiv weiterverwendet,
bis man eben nur noch ein einziges Symbol hat,
dass dann eben die Wahrscheinlichkeit eins hat.
So, in diesem Fall würde das dann als Codewort ergeben,
dass A mit eins kodiert wird,
D mit 0-
C mit 0-1-0 und B mit 0-1-1.
Gerade das Grafische mit dem Baum war, also es ist jetzt,
dass ich hier mit den vier Symbolen natürlich dann nicht so schön sichtbar,
ist jetzt hier nochmal an einem etwas größeren Beispiel gezeigt.
Also ich habe jetzt hier folgende sieben Elemente, E-I-N-S-D-L-L und R.
Mit, in diesem Fall sollen das jetzt relative Häufigkeiten,
keine Wahrscheinlichkeiten sein, aber das so umgesehen nimmt sich natürlich nichts.
Nicht dem zuvor kann ich dann immer sagen, also mit
entsprechend kleineren Häufigkeit, hat logischerweise natürlich auch die kleinere Wahrscheinlichkeit.
Und auch da wird das Ganze dann eben entsprechend dieses Verfahrens rekursiv gemacht,
ist jetzt hier auf dieser Folie nochmal so ein bisschen grafisch gemacht.
Also erster Schritt, sortieren anhand der Aufsteigenden,
in diesem Fall jetzt Häufigkeiten, erhalte ich dieses hier.
Anschließend fasse ich die beiden Elemente mit den Kleinsten,
Wahrscheinlichkeiten oder kleinsten Häufigkeiten zusammen, D&R, sortiere das dann quasi neu ein.
Das heißt, dieses Dieser Knoten mit der 6 wurde dann
eben letztendlich an dieser Stelle hier landen.
Wie gesagt, das ist eben die Sache auch mit dieser Eindeutigkeit.
Ich kann das also hier reinschreiben und ich kann das hier reinschreiben.
In dem Beispiel ist das also jetzt hier mit drin,
dann hätte ich also quasi hier diese Situation,
würde dann wieder die Elemente mit den Kleinsten Häufigkeiten zusammenfassen,
also in diesem Fall L und N, mit Häufigkeit 11.
Das würde dann eben hier auch entsprechend an dieser Stelle einsortiert werden
und das ganze Verfahren schreitet dann eben entsprechend Immer weiter.
Fort. Bis ich dann letztendlich hier diesen Baum mit den 13
habe und so weiter und so fort und das Ganze dann insgesamt dann also quasi diesen Kotbaum ergibt.
So, und wenn ich das jetzt nehme,
hier entsprechend die Elemente beispielsweise dann eben immer das,
was links steht mit einer Null, das,
was rechts steht mit einer 1 in dem Baum,
kodiere, hätte ich dann eben quasi sowas hier als Kotbaum,
alle Elemente oder alle Symbole sind dann eben wirklich nur direkt an den Blättern zu finden.
Dadurch ist dann eben die Phano-Bedingungen natürlich auch erfüllt,
nicht unfür die Dekodierung,
kann ich dann eben quasi immer einfach starten und sagen,
also wenn ich 0-1 0 habe, kann ich das eben quasi zum L ablesen.
Und wenn man dann eben irgendwie so ein String erhält,
1-0 0, 1-0 0,
Gunnar muss weitergehen, 1, dann habe ich ein R,
nicht dann folgt jetzt also hier null und eine Null ist ein I und so weiter.
Und so kann ich dann also quasi einen Bitz dringen,
den man dann also empfängt,
dann in diesem Baum
direkt dekodieren
Gut, wie gesagt, auch das könnte man jetzt also hier für dieses Beispiel mit den Großbuchstaben machen,
also wie man hier sieht, ist es dann also ein etwas anderer Code,
als der Fano Code letztendlich, nimmt sich das aber nichts, also hier dann einmal so als das Ganze dann als Baum aufgezeigt.
Auch da kann man jetzt eben sagen, anhand der Wahrscheinlichkeit,
wenn ich dann sowas wie so eine mittlere Codewortlänge daraus errechne, komme ich dazu,
dass also so ein in diesem Fall für diesen Codebaum dann eben gelten würde,
dass dann ungefähr 4,5 Bit pro Zeichen benötigt,
was natürlich also schon deutlich besser ist,
also irgendwie die 7 Bit-Asky, beziehungsweise 8 Bit für ISO oder UTF-Codes,
wobei ich jetzt natürlich auch sagen muss,
ist so ein bisschen Äpfel und Birnen vergleichen,
weil hier sind das jetzt wieder nur Großbuchstaben,
da sind keine Steuerzeichen mit dabei, aber nichtsdestotrotz würde man,
selbst wenn ich jetzt also quasi den kompletten Asky-Zeichensatz nehme oder einen UTF-Zeichensatz nehme,
da dann eben auch noch entsprechend einiges gewinnen.
So, wie gesagt, so ein Half-Man-Code hatte ich gesagt,
er zeugt mir eigentlich immer die minimale Codewortlänge.
Hier auf dieser Folie ist jetzt also quasi einmal nur angedeutet,
wie im Prinzip der Beweis funktioniert.
Ich will das jetzt also hier gar nicht wirklich komplett mathematisch durchgehen,
sondern einfach nur so ein bisschen die Beweisidee skizzieren. Und zwar das,
was dort im Prinzip einfach nur gemacht wird, ist,
dass man sagt,
ich habe einmal einen Half-Man-Code mit einer bestimmten Codewortlänge und ich habe eben ein Prefix-Code mit einer Codelänge M,
die kleiner als LS, also sprich der effizienter wäre als ein Half-Man-Code.
Und das, was man da dann machen würde,
ist dann eben letztendlich dann sowas wie so ein Gegenbeweis,
dass man eben sagen oder zeigen kann, also dieser Code D mit kleiner Code
Roadlänge M kann nicht existieren. Und das passiert dann eben dadurch,
dass man für diese beiden Codes diese Dekodierbäume entwickelt nach dem Verfahren.
Das heißt, dann habe ich hier eben so einen Baum
und würde dann eben entsprechend eigentlich dem Berechnungsverfahren für den Code eben folgendes machen,
dass ich dann immer die Zeichen mit den kleinsten Wahrscheinlichkeiten dann eben genau zusammenfasse.
Die Wahrscheinlichkeiten dann eben auch genau wie bei der Konstruktion letztendlich dann,
also hier in die Knoten mit reinziehe, dadurch dann wieder die Codewortlängen des Baumes entsprechend reduziere.
Und wenn ich das dann eben gemacht habe, beim Halfman,
warum lande ich dann eben bei einem Kot oder einen Knoten,
der dann eben letztendlich dann,
also hier an letzter Stelle dann eben noch irgendwie die Kotlänge
eins hat und für den angeblich besseren Code würde dann eben eine Länge kleiner eins erhalten,
was dann aber nicht möglich ist nicht und dadurch wäre dann also quasi so eine Art Widerspruchsbeweis geführt.
Aber wie gesagt, das nur so als Idee, wie man sowas machen würde,
also wenn man Kodierung theoretische Informatik dann also irgendwie mal hat oder braucht,
da wird uns sowas begegnen, ansonsten werde ich sowas jetzt nicht als Beweis in der Klausur irgendwie abfragen.
Gut, jetzt hatte ich ja schon gesagt,
also das Ganze funktioniert natürlich immer ganz gut,
wenn ich jetzt entsprechend viele Symbole habe,
weil ich dann also natürlich viel Spielraum bei der Bildung dieser Mengen habe, um das in dem Baum zusammenzufassen.
Und es setzt natürlich auch voraus, dass jetzt nicht ein Symbol überproportional häufig vorkommt. So,
wenn ich jetzt aber genau diesen Fall habe,
dass das eben nicht gegeben ist,
das heißt, ich habe ein Symbol,
was eben eine deutlich größere Wahrscheinlichkeit als 0,5 hat,
Und alle anderen haben dann eben wirklich nur eine sehr kleine Wahrscheinlichkeit,
dann funktionieren eben diese Kodierungen nicht,
weil ich ja kürzeste Kodierung oder effiziente Sekodierung für so einen Prefix-Code dann eben habe, einbett.
Und alles andere kriegt dann eben entsprechend zwei oder Mehrbett. So,
wenn ich jetzt aber zum Beispiel sage,
ich würde jetzt hier, meinetwegen das Bild vom Beamer nehmen,
versuchen das also irgendwie entsprechend zu kodieren,
also sprich die Pixel zu nehmen und zu sagen,
okay, macht daraus dann also jetzt hier irgendwie eine Kodierung.
Über so einen Codebaum, dann würde man also hier schon sehen,
dass also durch relativ viele Pixel einfach erstmal nur weiß sind.
So, und um das jetzt also entsprechend effizient zu kodieren,
zu übertragen, kann man eben sagen, na gut,
die Häufigkeit der weißen Pixel ist aber in diesem Fall dann deutlich größer als 0,5,
sondern geschätzt,
irgendwie 80,
90 Prozent oder sowas
Sowas als Beispiel würde dann eben wieder Half-Man, noch Shenfarno-Kodierung
irgendwie effizient funktionieren können. Nicht weil eigentlich das weiße Pixel dann,
also letztendlich eine kürzere Kodierung als ein Bit bräuchte, damit ich das dann also quasi optimal machen kann. Dazu hat man dann natürlich,
also in den ganzen Formaten dann eben auch irgendwie entsprechend effiziente und andere Kodierungsverfahren,
die das dann machen, nicht also zum Beispiel sowas wie Lauflängenkodierung,
was ist damit gemeint,
also da ist zum Beispiel jetzt einfach so was mit drin,
also angenommen, ich würde dieses Bild jetzt hier zahlenweise abtasten,
dass ich dann eben einfach mal sage, okay,
also hier, an dieser Stelle zu Beginn der Zeile,
ich habe ein weißes Pixel und das wiederholt sich 865 Mal.
Nicht, das wäre Lauflängenkudierung,
indem ich dann einfach sage, okay, weißes Pixel,
mal 865 und dann brauche ich alle anderen dahinter dann,
also erst mal bis hier mal wieder ein graues Pixel kommt,
gar nicht weiter zu kodieren.
Nicht, dass also grob die Idee von solchen Sachen wie Lauflängenkudierung,
auch das findet man relativ vielen technischen Formaten,
also sprich GIF-Format BNG-Format ist, war es dann eben mit drin.
In den Fax-Formaten ist sowas mit drin. Nicht, dann
gibt es noch andere Verfahren. Also im Prinzip das,
was dann eigentlich ist, mehr auf Algorithmen der Signalverarbeitung dann wieder zurückgeht,
wird ihn dann vielleicht noch später im Studium begegnen.
Sowas wie Foyertransformation wäre dann also irgendwie so als Stichwort zu nennen,
wo man dann eben sagen kann,
also ich habe dann im Prinzip sowas wie Sinus,
Cosinos, Transformation oder Sonstiges.
Auch das wird in einigen Kompressionsformaten beispielsweise jetzt bei diesem Beispiel Bilder dann eben mitverwendet.
Also beispielsweise im JPEG ist das unter anderem dann auch noch mit drin. So,
die andere Fragestellung, die man sich dann eben auch immer fragen muss,
was passiert eigentlich, wenn ich jetzt nicht weiß,
wie groß Symbolhäufigkeiten sind, Apriori.
Ich kann jetzt natürlich sagen, okay,
also für Buchstaben der deutschen Sprache Gut davon abgesehen,
dass er inzwischen also dann nur noch irgendwie eine Suchmaschine bemühen müsste. Für irgendwelche Häufigkeiten nicht,
aber es gibt also irgendwie dann wissenschaftliche Arbeiten,
die haben dann eben, was weiß ich,
viele tausend Bücher irgendwie untersucht und dann eben gesagt, okay,
also damit habe ich einen hoffentlich repräsentativen Querschnitt und kann eben sagen,
deutsche Sprache hat eben die und die Symbolhäufigkeiten,
wenn ich jetzt zumindest irgendwie jetzt bei einer Epoche bleibe und jetzt also nicht ins Mittelhochdeutsche gehe,
nicht vom anderen,
also irgendwie dann auch wieder teilweise ganz anders geschrieben oder gesprochen hat.
Gut, wenn ich das jetzt aber nicht Apriori habe,
also sprich das, was uns eigentlich begegnet bei üblichen Kompressionsverfahren,
wenn ich sage, ich möchte irgendwelche Daten komprimieren.
Also sprich, Zipp. Nicht, wo ich sagen kann,
okay, auf der einen Seite habe ich eine Textdatei,
die ich komprimieren möchte, da funktioniert das ganz gut.
Auf der anderen Seite habe, weil ich unterschiedliche Symbolhäufigkeiten in der Textdatei habe,
deswegen funktioniert ein Zipferfahren dort immer eigentlich ganz gut.
Ich kann sagen, also da kriege ich dann also nochmal so
bis zu Oder eine Reduktion auf bis zu 30 Prozent der Größe irgendwie hin.
Wenn ich an sich schon komprimierte Verfahren oder komprimierte Daten habe,
also sprich eine Datenkompression mache, zum Beispiel jetzt von irgendwelchen Fotodateien,
die jetzt also irgendwie als JPEG vorliegen, dadurch,
dass JPEG selber eigentlich schon selber ein entsprechend komprimiertes Format ist,
wird dort also die nachträgliche Dateikompression,
wenn überhaupt nur noch minimal was bringen
Gut, generell jetzt eben bei solchen Verfahren.
Ich weiß jetzt nicht, wie häufig bestimmte Symbole vorkommen und
gegebenenfalls verändern die sich auch noch. Also sprich,
ich sage, ich habe jetzt hier so einen ganzen Dateibaum,
den möchte ich in so ein ganzes Zipp-Archiv packen.
Nicht, da sind sowohl die Dateien als auch die Dateien mit drin,
die also wirklich ganz unterschiedliche Eigenschaften auch haben.
Auch dazu gibt es dann also relativ viel an Algorithmen.
Grundidee ist dabei im Prinzip, dass der kodierende Algorithmus,
also der En-Coder, im Prinzip sich einfach selber so eine Tabelle von Symbolhäufigkeiten aufbaut.
Das heißt, er fängt an und sagt, nehme,
wenn ich zum Beispiel jetzt eine Binärdatei in dir habe,
nehme einfach immer Gruppen von 8-Bit.
Damit kann ich 256 Zeichen unterscheiden. Und für diese 8-Bit-Gruppen
gucke ich jetzt eben, wie häufig sind da die einzelnen,
oder ist jedes einzelne dieser 256 Symbole.
So, das kann sich während der Zeit eben auch beliebig ändern.
Nicht aber, was er dann eben macht, ist,
dass also quasi eine bestimmte Menge von Symbolen genommen wird.
Dann habe ich Häufigkeiten,
dann benutzt man sowas wie beispielsweise eine Half-Mit-Codierung,
kodiert das Ganze
Arbeitet damit weiter, kodiert beispielsweise jetzt eben die nächsten so und so viel Zeichen,
stellt dabei fest, okay, die Häufigkeiten haben sich geändert und passt dann eben diesen Kotbaum dann eben auch entsprechend dynamisch ahnen.
Das ist das, was eigentlich diese ganzen Kompressionsverfahren,
wie gesagt, ich hatte ja schon als Stichwort so Zip-Arc,
Sonstiges genannt, wie auch immer sie heißen mögen,
nicht, also mal ist das eine,
mal ist das andere ein bisschen besser,
was die im Prinzip machen,
dass sie eben letztendlich diese Kotbäume dynamisch aufbauen und eben
auch anpassen
Der Dekoda, das heißt, das Programm,
was dann also quasi aus diesem komprimierten Archiv die Original-Dateien wieder auspackt,
arbeitet dann eben letztendlich umgekehrt, indem dort der Algorithmus eigentlich wieder nur umgekehrt werden braucht.
Das heißt, es werden jetzt gar nicht zwingend zwischendurch sämtliche Symboltabellen übertragen,
sondern das muss man dann eben wirklich nur einmal am Anfang machen und anschließen kann damit dann eben entsprechend weitergearbeitet werden. Gut,
also wie gesagt, auch dazu,
nicht umsonst gibt es so viele unterschiedliche Kompressionsprogramme und der eine schwört darauf,
der andere schwört da drauf,
auch dazu kann man also relativ viel an möglichen Ideen sich ausdenken,
wie gut oder wie schlecht die sind, wie gesagt,
um das jetzt so ein bisschen genauer dann noch zu hinterleuchten,
bräuchte man dann eben noch entsprechend ein bisschen mehr jetzt von dem mathematischen Hintergrund,
den ich jetzt aber hier auch wieder aus Zeitgründer jetzt nicht weiter mit reinbringen möchte.
Generell hier auch nur nochmal eine kurze Anmerkung,
beziehungsweise nochmal so ein kurzer Einschnitt in die darunter liegenden Theorie,
was in dem Zusammenhang dann eben auch immer noch so ein bisschen interessant ist,
Wenn ich jetzt einen Code habe oder einen Code konstruieren möchte,
dass man also beispielsweise Aussagen machen möchte,
kann ich mit so und so viel Zeichen und einer bestimmten Wortlänge überhaupt einen Code konstruieren,
der eindeutig dekodierbar ist.
Und um sowas beispielsweise jetzt aufzeigen zu können,
gibt es dann, das ist eine Möglichkeit, die sogenannte Kraftungleichung,
die im Prinzip also offen Mathematiker dort also zurückgeht,
der also im Prinzip notwendige und hinreichende Bedingungen definiert hat,
damit eben ein eindeutig dekodierbarer Code über einem kuhnären Alphabet möglich ist.
Also wie gesagt, das, was wir hier jetzt ja mal haben,
typischerweise ist es ein binäres Alphabet mit den Zeichen 0 und 1.
Hier geht es jetzt erstmal um den Allgemeinen Fall,
wo ich dann eben jetzt also auch mehr Symbole für die Kodierung verwenden kann.
Also auch das wieder so eine Sache bei den ganzen Kompressionsverfahren,
die arbeiten dann teilweise auch mit entsprechenden Gruppen und Zwar wird die Information binär abgespeichert,
aber ich habe dann eben Gruppen,
wo ich dann eben auch beispielsweise zur Basis 8 oder zur Basis 16 mal eine Symbole generieren kann.
Gut, und das, was diese Kraft und Leichung sagt,
ist eben, dass die Summe der,
oder das gelten muss, also für die Summe der Codeling,
der einzelnen Codeworte, dass Kuh hoch LE,
also deren entsprechenden Längen der Codeworte und davon also der Kehrwert dann eben aufsummiert, kleiner gleich eins sein muss.
Damit kann man eben sagen, also dass beispielsweise dieser Code hier 1, 0, 0, 1 und 1, 1 eben nicht eindeutig dekodierbar ist. Gut,
das ist in diesem Fall jetzt also natürlich nicht so sonderlich schwierig zu sehen,
sondern also da kann man gleich direkt sagen, okay,
hier sind hier die 1, sind hier die 1,
1 verletzt, die Phano-Bedingung, das ist also jetzt kein Prefix-Code,
nach Kraft und Leichen, aber hier einfach stumpf eingesetzt,
kann ich eben sagen, ich habe Ein Element,
was hier quasi mit Kunär in diesem Fall binär,
also dann zwei hoch eins, also eineinhalb,
also mit der Länge eins kodiert wird.
Ich habe drei Elemente, die mit der Länge zwei kodiert werden.
Ich hätte dann den zufolge plus dreimal eins durch zwei hoch zwei,
also dreimal ein Viertel, das ist 1,25,
was also dann in diesem Fall größer als eins ist,
deswegen kann das nicht funktionieren
Nicht andersrum, hier jetzt als Beispiel,
ich hätte jetzt also hier sowas wie so ein 3 wertiges Alphabet,
also ein ternäres Alphabet,
es sollen Codewörter erstellt werden mit Längen,
1 mit einer Länge 1, 5 mit der Länge 2,
3 mit der Länge 3, das ist eben die Frage,
kann so ein Code überhaupt existieren,
nicht wenn ich das hier in die Ungleichung einsetze,
erhalte ich dann eben quasi ein mal Heinz durch 3 hoch 1 plus 5 mal 1 durch 3 hoch 2 plus 3 mal 1 durch 3 hoch
3. Das ist eben genau eins. Deswegen kann ich hier
schon mal sagen, es existiert jemand passender Code.
Den kann man sich dann eben auch entsprechend herleiten,
also in einem, auf der nächsten Folie ist er noch
so ein bisschen Beweis oder Beweisidee, wie das Ganze dann funktioniert.
In diesem Fall würde er dann eben aussehen, null,
1-0, 1-1,
1-2,
2-0 und 2
Wären jetzt also die fünf Worte der Länge 2 und dann habe ich noch drei Worte der Länge 3,
2, 2, 2, 2 und 2,
2, dann jeweils hier als Prefix,
da sieht man nämlich hier auch immer sehr schön die entsprechend die Prefix-Eigenschaft und die sind dann eben noch mit 0, 1 und 2 dahinter dann dementsprechend kodiert. Gut,
auch dazu gibt es dann so einen Beweis, so eine Beweisidee,
die also im Prinzip jetzt mit diesen beiden und Leichungen im Prinzip skizziert ist,
will ich jetzt also hier gar nicht groß vorstellen,
da ist im Prinzip die Idee,
einfach basierend auf folgendem Wenn ich hier ein kunäres Alphabet habe und ich habe einen Kotbaum,
dann kann man einfach immer dann sagen,
wenn ich hier irgendein kürzeres Kotwort habe, also beispielsweise,
wir bleiben jetzt hier mal beim vibnären Kotbaum,
also ich habe hier irgendwie mal einen Wurzelknoten,
hiermit kodiert mit 0 und 1 jetzt irgendwelche Werte in diesem Fall machen wir das jetzt,
dass ich hier mal irgendwie mit drei Bit So,
hier hätte ich jetzt quasi an den Blättern irgendwo meine Elemente.
Und das, was jetzt eben passiert, ist,
dass ich sagen kann, okay, maximal kriege ich jetzt,
also hier, beziehungsweise hier sind das jetzt zwei Bit,
nicht wenn ich das jetzt noch unterteile,
mit drei Bit kriege ich dann eben entsprechend zwei hoch drei,
sprich acht Elemente, irgendwie maximal unterschieden.
So, und was passiert jetzt,
wenn ich eben irgendwo in diesem Codebaum was habe,
womit ich jetzt eben genau diese Prefix-Eigenschaft einbehalten möchte und ich
aber ein kürzeres Codewort habe, würde dazu führen,
dass ich eben beispielsweise sage,
ich habe hier beispielsweise ein Codewort mit der Länge zwei
Das also jetzt quasi hier als Blatt setzen soll, dann heißt das,
dass ich hier aus diesen maximal acht Elementen in meinem Baum diesen Teilbaum,
in diesem Fall jetzt also diese zwei Elemente rausschneide,
weil die nicht mehr verwendet werden dürfen.
Weil wenn ich die verwenden würde,
hätte ich keinen Briefexquot mehr, beziehungsweise andersrum gesehen,
wenn ich jetzt sage, ich habe irgendein Element,
was ich hier mit einem Bit kodieren möchte,
das heißt,
das muss dann hier die Wurzel sein und würde also
quasi dieser Teil des Baumes
letztendlich wegfallen
Nee, das ist also grob die Grundidee,
die dann diesen Beweis dann eben hier zugrunde liegt,
dass man eben quasi von dieser Gesamtanzahl von Q hoch
der Länge der Kodierung dann eben hier entsprechend Talbäume wegschneidet.
Gut, ja, das war jetzt eigentlich erst mal soweit der Teil zu der Quellenkodierung,
bevor wir jetzt zur Kanalkodierung kommen, wo es also letztendlich darum geht, die Kodierung anzupassen an die Übertragung.
Ich hatte ja ganz am Anfang schon mal vorgestellt,
also in der Informationstheorie kann man eben sagen,
ich habe irgendwo die Informationen, die ich übertragen möchte,
die wird repräsentiert, irgendwie technisch gesehen,
soll dann über einen vom Sender dann,
also quasi über einen Kanal übertragen werden, über irgendein Medium technisch,
wird empfangen und wird dann eben quasi wieder zurück interpretiert und dann eben hoffentlich als Information irgendwo anders.
Also sprich bei Ihnen jetzt beispielsweise ankommen. Und während diese
Übertragung in dem Übertragungskanal können eben Fehler auftreten. So,
und um sowas zu berücksichtigen, kann ich dann eben bei der Repräsentation,
beziehungsweise bei der Kodierung der Information darauf Rücksicht nehmen,
welche Eigenschaften hat dieser Kanal und wie häufig würden,
wenn ich beispielsweise meine Information binär übertrage, wie häufig würden Verfälschungen auftreten,
das aus einer übertragenen mit null eine übertragene Bit1 wird und da eben entsprechend Fehler auftritt.
Das wäre dann eben das,
was uns dann am Freitag dann eben als Kanalkodierung dann entsprechend
dann noch weiter begegnen wird, bevor wir dazu kommen,
werde ich jetzt aber hier noch einige Begriffe aus der Informationstheorie vorstellen,
wo es eigentlich erstmal überhaupt darum geht,
wie messe ich Informationen, die ich übertragen möchte.
Und zwar dazu kann man sagen, dem Ganzen liegen dann
ja immer irgendwelche Wahrscheinlichkeiten, beziehungsweise Wahrscheinlichkeitsverteilung zugrunde.
Das heißt, ich habe eben irgendwie sowas wie ein Ereignis,
was dann also quasi meiner Informationen entspricht, was mit einer bestimmten Wahrscheinlichkeit eintritt.
Nicht das Ganze ist dann also letztendlich erstmal nichts anderes,
als irgendwie sowas wie ein steuhastisches Modell, eine Menge von Ereignissen,
eine Menge von Wahrscheinlichkeiten, also sprich das,
was sie eben auch schon bei der Quellencodierung hatte.
So, wenn ich jetzt die Informationen übertrage,
Kann ich sagen, bleiben wir jetzt beim binären Fall.
Ich habe nur genau zwei Symbole, die zu übertragen sind, nämlich 0 und 1.
Wenn die Wahrscheinlichkeiten jetzt nicht überhaupt irgendwie so verteilt sind,
dass also nur das eine Symbol, die Wahrscheinlichkeit 1,
das andere Symboliowahrscheinlichkeit null hat, habe ich da also überhaupt einen Informationsgewinn,
weil wenn ich jetzt immer weiß,
es wird was übertragen und es gibt immer nur dieses eine Symbol,
was dann letztendlich ankommt, dann habe ich im Sinne Informationstheorie,
da jetzt also kein Gewinn in dem Sinne.
Deswegen erst mal grob zu merken, der Informationsgewinn oder umgangssprachlich die Überraschung wird, umso größer, je kleiner die Wahrscheinlichkeit ist. Kann man sich jetzt sagen,
also wir spielen Lotto,
ich habe hier irgendwie 6 aus 49 und die Wahrscheinlichkeit von 6 über 49 ist eben entsprechend gering zu der Anzahl der möglichkeiten,
die ich da also letztendlich jetzt überhaupt habe,
dass ich da gewinne, nicht dem zufolge ist,
dann eben dieses Ereignis, Lotto-Gewinn, mit einer eben sehr klein Wahrscheinlichkeit,
eben eine große Überraschung, weil das Gegenereignis, also sprich,
man gewinnt nichts dann eben vergleichsweise,
häufig auftritt.
Gut, wenn ich jetzt weitergehe und sage jetzt hinsichtlich der Wahrscheinlichkeitstheorie,
ich habe jetzt eben nicht nur ein Ereignis,
sondern ich habe jetzt eben mehrere,
die sollen jetzt eben auch in der Regel erstmal unabhängig
voneinander sein
Dann gilt ja, will vielleicht noch irgendwie so aus der Schulmathematik wissen. Irgendwie sowas,
dass ich da jetzt also keine bedingten Wahrscheinlichkeiten habe,
sondern ich habe eben die Wahrscheinlichkeit für ein Ereignis A,
die Wahrscheinlichkeit für ein Ereignis B und die Wahrscheinlichkeit,
dass eben erst A und dann B eintritt,
wäre dann eben letztendlich das Produkt von dem Ganzen.
So, jetzt ist natürlich die Frage,
wie kann ich jetzt als Maß für die Information das Ganze kodieren oder beschreiben,
wenn ich jetzt, also quasi jetzt hier mit diesen Einzelwahrscheinlichkeiten arbeite. So,
und der Informationsgewinn oder die Beschreibung von Informationen wäre jetzt natürlich,
dass man sagt, na gut,
also der Kehrwert von der Wahrscheinlichkeit wäre dann also quasi ein Maß,
was eigentlich für die Information irgendwie sinnvoll ist,
nicht wo ich sage, also irgendwas, was vergleichsweise unwahrscheinlich ist,
also sprich eine sehr kleine Wahrscheinlichkeit hat,
hat demzufolge im Sinne von Informationen einen sehr großen Wert.
Während, wenn ich also jetzt sehr wahrscheinliche Ereignisse habe,
dass dann entsprechend Gehwert davon,
also der Informationsgewinn oder diese Überraschung dann eben entsprechend klein ist.
So, demzufolge würde sich dann natürlich also quasi der Kehrwert der Wahrscheinlichkeit
jetzt also irgendwie als Maß für die Informationen irgendwie anbieten.
Problem ist jetzt, wenn ich jetzt eben genau diese Fälle habe,
wo ich jetzt also voneinander unabhängige Ereignisse beziehungsweise Wahrscheinlichkeiten habe,
dann müsste ich letztendlich eben immer hier die Produkte bilden und dann eben entsprechenden Kehrwert.
Und das ist, sagen wir jetzt erst mal,
mathematisch gesehen natürlich jetzt also irgendwas,
was man alles vielleicht jetzt nicht so gerne machen möchte,
also irgendwie annonen multiplizieren.
Deswegen wäre es eigentlich ganz gut, dass wenn ich jetzt
also quasi ein Maß für die Informationen habe.
Und ich sage, also ich empfange fünf Zeichen,
dass ich quasi jetzt die Einzelmaße für diese Zeichen nehme,
eine additive Größe habe. Das heißt,
die dann einfach der Reihe nach aufsummieren kann und dann eben weiß,
wie groß die Information ist, die ich dort dann übertragen habe.
So, deswegen möchte man jetzt eigentlich hier eine additive Größe haben,
mit der man also rechnen kann bei unabhängigen Wahrscheinlichkeiten.
Und das, was man dann nutzt,
ist dann eben nicht den Kehrwert zu nehmen,
sondern Logarithmus von einem Kehrwert
So, jetzt laden wir natürlich dann wieder bei der geliebten Schulmathematik.
Logarithmus, was war das noch? Also, das ist
die Umkehrfunktion der Exponentialfunktion. Also sprich, für gegebene A
und B ist eben der Logarithmus, die lösen der Gleichung.
A ist gleich B, hoch X und X wäre dann eben
quasi der gesuchte Wert. Das heißt, wenn ich B,
die Basis hoch X nehme, erhalte ich dann eben meinen Wert A,
das ist dann eben entsprechend das, was dann eben da rauszukommen ist.
Gut, im Dualsystem, letztendlich haben wir das also schon beliebig oft kennengelernt,
nicht wo wir gesagt haben, okay, Logarithmus,
Duales von 8 bis 3, weil 2 hoch 3, 8 ist.
Letztendlich ist das immer das, was wir benutzen,
um quasi über die Wortlänge in Bett zu sagen, wie viele Zeichen kann ich damit kodieren,
wenn ich jetzt zum Beispiel in du irgendeinen Dualcode oder sowas annehme.
Gut, und vor den Logarithmus selber gelten dann jetzt eben entsprechend als Rechenregeln,
dass ich eben sagen kann, das weswegen ich jetzt überhaupt diesen Logarithmus,
also an dieser Stelle hier motiviert habe,
dass eben anstatt die Größen X und Y zu multiplizieren,
kann ich die einzelnen Logarithmen nehmen, die einfach addieren.
Nicht dann gelten solche Regeln wie,
dass sich Logarithmus und die Exponentiation aufheben,
also sprich B-Hochlorhythmus, B von X,
SX bzw. Logrhythmus B von B hoch X ist auch X. Etwas,
was man dann also häufig immer mal braucht, gerade im Taschenrechnerbereich,
wenn ich jetzt also nicht Logarithmus zu einer beliebigen Zahl habe,
als Formel ist, dass ich sagen kann,
Logarhythmus X von einer beliebigen Basis B.
Und ich habe diese Basis B jetzt nicht im Taschenrechner drin. Kann ich dadurch berechnen,
indem ich dann Logarhythmus X zu einer anderen Basis A berechne und
das Teile durch Logarhythmus B zu dieser Basis A. Das heißt,
wenn ich jetzt im Taschenrechner keinen Logarhythmus zur Basis 2 habe,
kann ich jetzt eben was, was ich,
den natürlichen Logarhythmus nehmen.
Also die LN-Funktion und dann einfach den Logarhythmus von
der Zahl X teilen durch Logarhythmus von
Sprich, das war's dann,
also hier in diesem Beispiel dann eben irgendwie so angedeutet ist.
Gut, das sehen Rechenregeln des Lugarithmus,
dann kommen wir jetzt dazu zu dem Begriff Informationen oder Informationsgehalt.
Also ich habe jetzt mein Ereignis mit einer bestimmten Wahrscheinlichkeit.
Das war ein bisschen sehr schnell. So, also ich
habe jetzt mein Ereignis mit einer bestimmten Wahrscheinlichkeit und möchte jetzt dazu den Informationsgehalt wissen.
Nicht dann ist es erst mal stumpf in Formel eingesetzt,
Informationsgehalt von diesem Ereignis ist dann eben Logarithmus, Duales von eins durch die Wahrscheinlichkeit,
beziehungsweise nach den Rechenregeln eins durch PI-Werdern, minus.
Und dann hiervon wieder in Kehrwert an AS entsprechend PI,
also Logarithmus, du alles von PI. So,
und das ist eben die Formel für in Informationsgehalt,
zu einem Zeichen oder Ereignis oder auch Entscheidungsgehalt,
die sich hier erstmal rein aus dessen Wahrscheinlichkeit ergibt.
Das heißt, dazu kann ich seines eben sieben Zeichen angenommen,
ich weiß jetzt, das Zeichen E hat eben irgendwie
die Wahrscheinlichkeit in der deutschen Sprache von 0,0 irgendwas 1,5,
kann ich eben sagen, wie groß der Informationsgehalt des Buchstabens E ist.
Einfach stumpf hier in die Formel einsetzen, ausrechnen. So und wenn jetzt eben voneinander unabhängige Ereignisse kommen,
also sprich zwei Nachrichten,
also erst wird das E und dann wird das N übertragen,
wie groß ist der Informationsgehalt für diese Buchstabengruppe jetzt,
kann ich das dann eben auch einfach hier additiv berechnen,
weil ja gilt, statt eins durch PR mal BW zu rechnen,
davon Lugath musst du nehmen,
kann ich dann eben wieder von den Einzelzeichen nehmen,
einfach entsprechend aufsummieren und kann damit dann also für meine Sache das Ganze dann haben.
Gut, wie wird diese Information oder der Informationsgehalt gemessen
Und da begegnet uns jetzt unter anderem mal wieder das Bit,
weil Bit ist ein vergleichsweise mehrdeutiger Begriff in der Informatik.
Und zwar zum einen ist das wirklich eine Maßeinheit,
und zwar für ein reelles Maß,
was hier einfach ein Maß für den Informationsgehalt ist.
Sprich einfach entsprechend dieser Formel, nicht unter Informationsgehalt von E,
wäre dann eben 3,475 Bit,
was auch immer
Wie gesagt, Bit als Maß von Informationsgehalt. Bislang haben wir
Bit immer kennengelernt als Maß für die Anzahl der Binärstellen.
Nicht, wenn ich sage 32 Bit,
dann ist eben gemeint, wie groß ist irgendwie so ein Vinärwort.
Und in Kapitel 5 ist dann also auch mal irgendwie aufgetaucht,
Bet-Els-Kurz-Schreibweise für Binärzeichen, also sprich für das Symbol 0 oder A1. So,
und das Gemeine ist, das wird eben beliebig oft vermischt.
Ich habe immer versucht, das hier so ein bisschen,
zumindest mit dieser Groß- und Leinschreibung, eindeutig zu halten.
Aber wie gesagt, das kann dann also teilweise auch
immer so ein bisschen durcheinander gehen
Nicht jedenfalls, also Bit ist unter anderem dann eben Mars und
zwar jetzt als reelle Größe für den Informationsgehalt. Gut,
häufig begegnen uns das jetzt natürlich mit irgendwelchen binären Codierungen und da muss man jetzt eben auch sagen,
wenn ich jetzt also beispielsweise zwei Symbole 0 und 1 habe
und die jetzt also auch noch die gleiche Wahrscheinlichkeit haben,
also sprich 0,5. Nicht,
dann wäre der Informationsgehalt des Empfangs einer
Gleich dem Informationsgehalt des Empfangs einer 1. Und zwar jetzt hier in diese Formel Schumpf eingesetzt,
eins durch eineinhalb. Logoth musst du alles davon,
ist genau eins, dem du vorgestern Informationsgehalt,
in diesem Fall von einem Bit als Binärstelle dann auch wirklich ein Bit,
was aber eben nur gilt, wenn die auch gleich wahrscheinlich sind,
wenn die nicht gleich wahrscheinlich sind, gilt,
dass er nämlich nicht mehr.
Nicht deswegen das nur als etwas, was es dazu beachten gibt.
Gut, Naja, das andere Sachen. Gut,
dann werde ich jetzt, denke ich mal,
heute an dieser Stelle Schluss machen, dass dann am Freitag wieder aufgreifen.
Nochmal so ein bisschen auf diese ganze Theorie mit Informationsgehalt und
dann eben auch Entropie und entsprechend Redundanz nochmal drauf eingehen,
weil das eben Sachen sind,
die also gerade jetzt hier bei der Codierung dann eben auch entscheidend und wichtig sind.
Gut, dann soll es das für heute gewesen sein.
Schönen Abend allen