Einführung in die Informationsverarbeitung Teil Thaller Stunde II: Datenstrukturen Köln 25. Oktober 2012
Anschluss an die erste Stunde 2
1."Selbstabbildende Information". Es kann "gerechnet" werden. Bilder. 2."Kodierte Information". Zeichenketten und Teilketten können verglichen werden. Texte. 3."Symbolische Information". Terme können verglichen werden. Terminologien, "Ontologien" u.ä. * „Arten“ von Information 3
I. Grundbegriffe 4
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,
Zahlen Bilder Zeichenketten Geburtstage Briefe Datentyp 6
Addieren Komprimieren Vergleichen Abstand berechnen Beziehen Operationen 7
Zahl {Darstellung, Addieren, …} Bild {Darstellung, Komprimieren, …} Text {Darstellung, Vergleichen, … } Zeit {Darstellung, Abstand berechnen, … } Brief {Darstellung, Beziehen, …} Datenstrukturen 8
Datenstruktur = {Datentyp, Legale Operationen } “Datentyp” und “Datenstruktur” oft aber auch synonym! 9
Boolean / Logischer Wert Integer [ Rationale Zahlen ] Realzahlen Zeichen Zeichenketten Basisdatenstrukturen 10
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 11
Festlegungen sind „willkürlich“. Groß- / Klein v. Umlaute Datenstrukturen und Hardware 12
Zeichen a097A65 b098B66 c099C67 d100D68 e101E69 f102F70 g103G71 h104H72 i105I73 j106J74 k107K75 ………… 13
Zeichen a A b B c C d D e E f F g G h H i I j J k K ………… 14
Zeichen a A b B c C d D e E f F g G h H i I j J k K ………… 15
Festlegungen sind „willkürlich“. lower(x) = upper(x) | ' ' = schnellste verfügbare Operation des Rechners! Zeichen 16
Darstellung von Datenstrukturen sind „willkürlich“. … können den Aufwand für eine Anwendung aber entscheidend beeinflussen! * Merke: 17
Diagrammatische Darstellung: A „zeigt auf“ B Datenstruktur „Zeiger“ AB 18
Diagrammatische Darstellung: „Zeiger“: Ein Speicherinhalt eines Rechners verweist auf einen anderen. Datenstruktur „Zeiger“ AB 19
Speicher als „karierte Zeile“ Datenstruktur im Speicher
Zahl „14123“ in Bytes 0 bis 1 Zahl „22445“ 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 25
II. Technische Datenstrukturen 26
Stacks Auch bekannt als: „LIFO“ – Last In, First Out 27
Lies: Verarbeite: Start Atom 1 28
Lies: Verarbeite: „Push to stack“ Atom 1 29
Lies: Verarbeite: „Lies weiter“ Atom 2 Atom 1 30
Lies: Verarbeite: „Push to stack“ Atom 2 Atom 1 31
Lies: Verarbeite: „Lies weiter“ Atom 3 Atom 2 Atom 1 32
Lies: Verarbeite: Schließlich Atom 5 Atom 4 Atom 3 Atom 2 Atom 1 33
Lies: Verarbeite: „Pop from stack“ Atom 5 Atom 4 Atom 3 Atom 2 Atom 1 34
Lies: Verarbeite: „Pop from stack“ Atom 4 Atom 3 Atom 2 Atom 1 35
Lies: Verarbeite: „Pop from stack“ Atom 3 Atom 2 Atom 1 36
Lies: Verarbeite: „Pop from stack“ Atom 2 Atom 1 37
Lies: Verarbeite: * „Pop from stack“ Atom 1 38
Queues Auch bekannt als: „FIFO“ – First In, First Out 39
Lies: Verarbeite: Start Atom 1 40
Lies: Verarbeite: „Push to queue“ Atom 1 41
Lies: Verarbeite: „Lies weiter“ Atom 2 Atom 1 42
Lies: Verarbeite: „Push to queue“ Atom 2 Atom 1 43
Lies: Verarbeite: „Lies weiter“ Atom 3 Atom 2 Atom 1 44
Lies: Verarbeite: Schließlich Atom 5 Atom 4 Atom 3 Atom 2 Atom 1 45
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 Atom 3 Atom 2 Atom 1 46
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 Atom 3 Atom 2 47
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 Atom 3 48
Lies: Verarbeite: Pop from queue Atom 5 Atom 4 49
Lies: Verarbeite: * Pop from queue Atom 5 50
Einfach Verknüpfte Listen 51
Erzeuge Atom 1 Atom 1 52
Kopf: Mache Atom 1 zum Listenkopf Atom 1 53
Kopf: Erzeuge Atom 2 Atom 1 Atom 2 54
Kopf: Verbinde Atom 2 mit Liste Atom 1 Atom 2 55
Kopf: Erzeuge Atom 3 Atom 1 Atom 2 Atom 3 56
Kopf: Verbinde Atom 3 mit Liste Atom 1 Atom 2 Atom 3 57
Kopf: Lösche Atom 2 Atom 1 Atom 2 Atom 3 58
Kopf: * Füge Atom 4 ein Atom 1 Atom 3 Atom 4 59
Doppelt Verknüpfte Listen 60
Kopf: Schwanz: Doppelt verknüpfte Liste Atom 1 Atom 2 Atom 3 61
Kopf: Schwanz: Löschen von Atom 2 Atom 1 Atom 2 Atom 3 62
Kopf: Schwanz: * Einfügen von Atom 4 Atom 1 Atom 4 Atom 3 63
III. Inhaltliche Datenstrukturen 64
::= 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: 65
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: 66
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 67
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 68
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 69
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 70
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 71
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 72
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 73
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 74
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 75
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 76
IV. Datenstruktur aus dem Softwarengineering 77
Ein Bild 78
6 Zeilen 5 Spalten Ein Bild 79
5 Zeilen 6 Spalten Ein Bild 80
== oker 0 == rot Ein Bild 81
== blau 0 == gelb Ein Bild 82
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 83
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 84
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 85
6 Zeilen 5 Spalten 1 == oker 0 == rot Unkomprimiert Ein Bild 86
Dimensionen 1 == ochre 0 == red Uncompressed Ein Bild 87
Dimensionen Photogrammetrische Interpretation Unkomprimiert Ein Bild 88
Dimensionen Photogrammetrische Interpretation Kompressionstechnik Ein Bild 89
Ein Bild 90
(implizit / explizit) (implicit / explicit) (implicit / explicit) … und die Daten? Ein Bild 91
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 92
Daten entweder als Datenstrom oder als Verarbeitungsanweisungen SetSize: 5 by 6 SetBackgroundColor: Ochre SetForegroundColor: Red SetLetterHeight: 4 MoveTo: 3,5 DrawLetter: T Ein Bild 93
Praktische Bedeutung? 94
Processing dictionary Payload “Bit rot” 95
xxx 221 Die Beschädigung eines Bytes führt dazu, dass ein Byte nicht korrekt dargestellt werden kann. “Bit rot” 96
002xxx “Bit rot” Die Beschädigung eines Bytes führt dazu, dass zehn Bytes nicht korrekt dargestellt werden können. 97
Wird die relativ geringe Datenmenge des Processing Dictionary „robust“ gemacht, sind Verletzungen der großen Menge an Payload Daten relativ harmlos. 98
Danke für heute! 99