Einführung in die Informationsverarbeitung Teil Thaller Stunde II: Datenstrukturen Köln 13. November 2008
I. Grundbegriffe
dada ist in zürich geboren. zieht man straßburg von zürich ab so bleibt Hans Arp, Strassburgkonfiguration, in: ich bin in der Natur geboren. Ausgewählte Gedichte. Hrsg. V. H. Bolliger et al., Zürich-Hamburg, 2002
Zahlen Bilder Zeichenketten Geburtstage Briefe Datentyp
Addieren Komprimieren Vergleichen Abstand berechnen Beziehen Operationen
Zahl {Darstellung, Addieren, …} Bild {Darstellung, Komprimieren, …} Text {Darstellung, Vergleichen, … } Zeit {Darstellung, Abstand berechnen, … } Brief {Darstellung,Beziehen, …} Datenstrukturen
Datenstruktur = {Datentyp, Legale Operationen } Datentyp und Datenstruktur oft aber auch synonym!
Boolean / Logischer Wert Integer [ Rationale Zahlen ] Realzahlen Zeichen Zeichenketten Basisdatenstrukturen
Datenstrukturen geben Regeln wieder, wie ein bestimmter Speicherbereich interpretiert wird. ASCII Zeichen 'a' = 97; 'A' = 65. oder 'Pixel' 97 ist eineinhalb mal heller als 'Pixel' 65. Datenstrukturen und Hardware
Festlegungen sind willkürlich. Groß- / Klein v. Umlaute Datenstrukturen und Hardware
Zeichen a097A65 b098B66 c099C67 d100D68 e101E69 f102F70 g103G71 h104H72 i105I73 j106J74 k107K75 …………
Zeichen a A b B c C d D e E f F g G h H i I j J k K …………
Zeichen a A b B c C d D e E f F g G h H i I j J k K …………
Festlegungen sind willkürlich. lower(x) = upper(x) | ' = schnellste verfügbare Operation des Rechners! Zeichen
Darstellung von Datenstrukturen sind willkürlich. … können den Aufwand für eine Anwendung aber entscheidend beeinflussen! * Merke:
Diagrammatische Darstellung: A zeigt auf B Datenstruktur Zeiger AB
Diagrammatische Darstellung: Zeiger: Ein Speicherinhalt eines Rechners verweist auf einen anderen. Datenstruktur Zeiger AB
Speicher als karierte Zeile Datenstruktur im Speicher
Zahl in Bytes 0 bis 1 Zahl in Bytes 10 bis Datenstruktur im Speicher
Zeichen a in Byte 0 Zeichen q in Byte 11 a q Datenstruktur im Speicher
Zeiger in Bytes 0 bis 1 verweist auf Speicherblock, enthaltend xy, beginnend in Byte x y Datenstruktur im Speicher
Zeiger in Bytes 0 bis 1 verweist auf Speicherblock, enthaltend xy, beginnend in Byte 10. Zeiger graphisch x y
Zeiger verweist von einem Datenblock auf einen anderen. * Zeiger graphisch
II. Technische Datenstrukturen
Stacks Auch bekannt als: LIFO – Last In, First Out
Lies: Verarbeite: Start Atom 1
Lies: Verarbeite: Push to stack Atom 1
Lies: Verarbeite: Lies weiter Atom 2 Atom 1
Lies: Verarbeite: Push to stack Atom 2 Atom 1
Lies: Verarbeite: Lies weiter Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Schließlich Atom 5 Atom 4 Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Pop from stack Atom 5 Atom 4 Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Pop from stack Atom 4 Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Pop from stack Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Pop from stack Atom 2 Atom 1
Lies: Verarbeite: * Pop from stack Atom 1
Queues Auch bekannt als: FIFO – First In, First Out
Lies: Verarbeite: Start Atom 1
Lies: Verarbeite: Push to queue Atom 1
Lies: Verarbeite: Lies weiter Atom 2 Atom 1
Lies: Verarbeite: Push to queue Atom 2 Atom 1
Lies: Verarbeite: Lies weiter Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Schließlich Atom 5 Atom 4 Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 Atom 3 Atom 2 Atom 1
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 Atom 3 Atom 2
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 Atom 3
Lies: Verarbeite: Pop from queue Atom 5 Atom 4
Lies: Verarbeite: * Pop from queue Atom 5
Einfach Verknüpfte Listen
Erzeuge Atom 1 Atom 1
Kopf: Mache Atom 1 zum Listenkopf Atom 1
Kopf: Erzeuge Atom 2 Atom 1 Atom 2
Kopf: Verbinde Atom 2 mit Liste Atom 1 Atom 2
Kopf: Erzeuge Atom 3 Atom 1 Atom 2 Atom 3
Kopf: Verbinde Atom 3 mit Liste Atom 1 Atom 2 Atom 3
Kopf: Lösche Atom 2 Atom 1 Atom 2 Atom 3
Kopf: * Füge Atom 4 ein Atom 1 Atom 3 Atom 4
Doppelt Verknüpfte Listen
Kopf: Schwanz: Doppelt verknüpfte Liste Atom 1 Atom 2 Atom 3
Kopf: Schwanz: Löschen von Atom 2 Atom 1 Atom 2 Atom 3
Kopf: Schwanz: * Einfügen von Atom 4 Atom 1 Atom 4 Atom 3
III. Inhaltliche Datenstrukturen
::= ein 3-Tupel (oder Tripel) { E, I, O } wobei E ::= Externe Darstellung I ::= Interne Darstellung O ::= Menge auf I definierter Operationen (Notation: " ::= " = "definiert als ") Datentypen allgemein:
E Regel für " " I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. O t-less(i,j) ===> Boolean t-less( , ) ===> True t-subtract(i,j) ===> Ganze Zahl t-subtract( , ) ===> 1 Datentyp Zeit allgemein:
E Regel für "pri non jun 2007" I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. O t-less(i,j) ===> Boolean t-less(pri non jun 2007,non jun 2007) ===> True t-subtract(i,j) ===> Ganze Zahl t-subtract(non jun 2007,pri non jun 2007) ===> 1 Datentyp Historische Zeit I
I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. 0 i t Datentyp Historische Zeit I
E Regel für "6 Tammuz 5763" I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. O t-less(i,j) ===> Boolean t-less(6 Tammuz 5763,7 Tammuz 5763) ===> True t-subtract(i,j) ===> Ganze Zahl t-subtract(7 Tammuz 5763,6 Tammuz 5763) ===> 1 Datentyp Historische Zeit II
I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. 0 i t Datentyp Historische Zeit II
E Regel für "Freitag nach Fronleichnam 2007" I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. O t-less(i,j) ===> Boolean t-less(Freitag nach Fronleichnam 2007,Samstag nach Fronleichnam 2007) ===> True t-subtract(i,j) ===> Ganze Zahl t-subtract(Samstag nach Fronleichnam 2007,Freitag nach Fronleichnam 2007) ===> 1 Datentyp Historische Zeit III
I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Offset t vom Ursprung definiert ist. 0 i t * Datentyp Historische Zeit III
E Regel für " " I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Vektor von Offsets t vom Ursprung definiert ist. O t-less(i,j) ===> mehrwertiger Wahrheitswert { True, Undecidable, False } t-less( , ) ===> Undecidable t-subtract(i,j) ===> "Historische Zahl" t-subtract( , ) ===> { 1, 366 } Datentyp Historische Zeit IV
I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Vektor von Offsets t vom Ursprung definiert ist. 0 i i t Datentyp Historische Zeit IV
E Regel für " " I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Vektor von Offsetpaaren t vom Ursprung definiert ist. O t-less(i,j) ===> kontinuierlicher Wahrheitswert (Z.B. Grad der Überlappung von n Intervallen.) t-less( , ) ===> 99 % t-subtract(i,j) ===> "Historische Zahl" t-subtract( , ) ===> { 0, 200 } Datentyp Historische Zeit V
I Zeit ist ein Vektor von Tagen seit einem willkürlichen Tag 0, wobei ein beliebiger Tag i als Vektor von Offsetpaaren t vom Ursprung definiert ist. 0 i i t * Datentyp Historische Zeit IV
Philosophie ist die systematische Verwirrung einer eigens zu diesem Zweck geschaffenen Terminologie. Volksmund, ca
Ein Bild
6 Zeilen 5 Spalten Ein Bild
5 Zeilen 6 Spalten Ein Bild
== oker 0 == rot Ein Bild
== blau 0 == gelb Ein Bild
Speicherung: 1,1,1,1,1,1,0,0, 0,1,1,1,0,1,1,1, 1,0,1,1,1,1,0,1, 1,1,1,1,1,1 Unkomprimiert Ein Bild
Store: 6,1,3,0,3,1,1,0, 4,1,1,0,4,1,1,0, 7,1 (Compressed) Run Length Encoded Ein Bild
1,12,13,14,15,1 1,22,23,24,25,2 1,32,33,34,35,3 1,42,43,44,45,4 1,52,53,54,55,5 1,62,63,64,65,6 Speicherung: SetSize: 5 by 6 SetBackgroundColor: Ochre SetForegroundColor: Red SetLetterHeight: 4 MoveTo: 3,5 DrawLetter: T Vector Format Ein Bild
6 Zeilen 5 Spalten 1 == oker 0 == rot Unkomprimiert Ein Bild
Dimensionen 1 == ochre 0 == red Uncompressed Ein Bild
Dimensionen Photogrammetrische Interpretation Unkomprimiert Ein Bild
Dimensionen Photogrammetrische Interpretation Kompressionstechnik Ein Bild
Ein Bild
(implizit / explizit) (implicit / explicit) (implicit / explicit) … und die Daten? Ein Bild
Daten entweder als Datenstrom 1,1,1,1,1,1, 0,0,0,1,1,1, 0,1,1,1,1,0, 1,1,1,1,0,1, 1,1,1,1,1,1 Ein Bild
Daten entweder als Datenstrom oder als Verarbeitungsanweisungen SetSize: 5 by 6 SetBackgroundColor: Ochre SetForegroundColor: Red SetLetterHeight: 4 MoveTo: 3,5 DrawLetter: T Ein Bild
Praktische Bedeutung?
Processing dictionary Payload Bit rot
xxx 221 Die Beschädigung eines Bytes führt dazu, dass ein Byte nicht korrekt dargestellt werden kann. Bit rot
002xxx Bit rot Die Beschädigung eines Bytes führt dazu, dass zehn Bytes nicht korrekt dargestellt werden können.
Wird die relativ geringe Datenmenge des Processing Dictionary robust gemacht, sind Verletzungen der großen Menge an Payload Daten relativ harmlos.
Danke für heute!