ebook img

Datenstrukturen in APL2: Mit Anwendungen aus der künstlichen Intelligenz PDF

340 Pages·1992·20.01 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Datenstrukturen in APL2: Mit Anwendungen aus der künstlichen Intelligenz

Springer- Lehrbuch Hanspeter Bieri Felix Grimm Datenstrukturen in APL2 Mit Anwendungen aus der ktinstlichen Intelligenz Mit 198 Abbildungen Springer-Verlag Berlin Heidelberg New York London Paris Tokyo Hong Kong Barcelona Budapest Professor Dr. Hanspeter Bieri Dr. Felix Grimm Universitiit Bern, Institut ftir Inforrnatik und angewandte Mathematik Liinggassstr. 51 CH-3012 Bern Schweiz ISBN-13: 978-3-540-55747-0 e-ISBN-13: 978-3-642-77680-9 DOl: 10.1007/978-3-642-77680-9 Die Deutsche Bibliothek • CIP-Einheitsaufnahme Bieri. Hanspeter: Datenstrukturen in APL2: mit Anwendungen aus der kiinstlichen Intelligenz/ Hanspeter Bieri; Felix Grimm. Berlin; Heidelberg; New York; London; Paris; Tokyo; Hong Kong; Barcelona; Budapest: Springer, 1992 (Springer-Lehrbuch) NE: Grimm, Felix: Dieses Werk ist urheberrechtlich geschiitzt. Die dadurch begriindeten Rechte, insbesondere die der Obersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funk sendung, der Mikroverfilmung oder der Vervielfliltigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Verviel fliltigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. Septem ber 1965 in der jeweils geltenden Fassung zUliissig. Sie ist grundsiitzlich vergiitungspflichtig. Zuwider handlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes. © Springer-Verlag Berlin Heidelberg 1992 Umschlaggestaltung: Struve & Partner, Heidelberg Satz: Reproduktionsfertige Vorlage vom Autor 45/3140 -5 4 3 2 I 0 - Gedruckt auf siiurefreiem Papier Vorwort Das vorliegende Buch ist als hohere EinfUhrung in das Programmieren mit APL2 gedacht, und zwar sowohl fUr das Selbststudium als auch als Grund lage oder Erganzung zu einer Informatik-Vorlesung fUr untere bis mittlere Semester. Es solI aber auch einem motivierten Programmieranfanger zu ganglich sein und enthalt deshalb eine dafiir geniigend breite und vollstan dige Zusammenfassung der Grundelemente von APL2. Das Buch wendet sich vor allem an zwei Gruppen von Lesern: - an Programmierer anderer Sprachen, wie Pascal oder Fortran, die lernen mochten, wie sich die dort gelaufigen Datenstrukturen und Programmier techniken auch in APL2 verwenden lassen; die wissen mochten, was APL2 besser "kann", welche Probleme sich mit APL2 einfacher, eleganter, efflzienter losen lassen - an APL2- oder APL-Programmierer, die weitere Moglichkeiten "ihrer" Sprache kennenlernen mochten; die gewohnt sind, "in Arrays zu denken", sich mit der Zeit und zunehmendem Mut aber auch an Problemstellungen wagen wollen, fiir deren Losung sich z.B. eher Baume oder Graphen als Datenstrukturen aufdrangen als Arrays. Die Kiinstliche Intelligenz ist ein wichtiges Teilgebiet der Informatik, das sich heute in einer starken Entwicklung befindet. Wie der Untertitel des Buches andeutet, sollen hier ein paar interessante kleinere Anwendungen aus diesem Gebiet vorgestellt werden, die einige fortgeschrittenere Moglichkeiten von APL2 besonders schon illustrieren. Eine Einfiihrung in die Kiinstliche Intel ligenz wird nicht bezweckt. Wohl aber ware es erfreulich, wenn die aufge zeigten KI-Anwendungen mithelfen konnten, das Interesse an diesem wich tigen Gebiet zu wecken. Der erste Teil des Buches bietet eine Kurzeinfiihrung in APL2 sowie ver schiedene weitere Vorbereitungen, auf die sich die anschliessenden Teile ab stiitzen. Der zweite Teil behandelt die wichtigen li~earen Datenstrukturen: line are Liste, Stack und Queue. Dabei wird einerseits gezeigt, wie sich das in Sprachen wie Pascal, PL/I oder C iibliche Zeiger-Konzept oder List Processing auf einfache Weise auch in APL2 nachbilden und anwenden lasst. Anderseits werden aber die gleichen Datenstrukturen auch auf eine APL2-gerechte Weise eingefiihrt und anschliessend die beiden "Philoso phien" miteinander verglichen. Teil drei stellt in einem gewissen Sinn den zentralen Teil dar. Er behandelt die wichtigsten nichtlinearen Datenstruk turen - Mengen, bin are Baume, geordnete Baume und Graphen - VI Vorwort APL2-gerecht, zusammen mit typischen Anwendungen. Der abschliessende vierte Teil ist der Kiinstlichen Intelligenz gewidmet. Er fUhrt anhand sehr einfacher, anschaulicher Beispiele in einige KI-Themenkreise ein: Graph suche, Bildanalyse und Expertensysteme. Dabei werden die Moglichkeiten von APL2 im Zusammenhang aufgezeigt und gleichzeitig einfache, aber ty pische Methoden bzw . .AIgorithmen zu den erwiihnten Themenkreisen vor gestellt. Der jetzige Zeitpunkt scheint den Autoren giinstig zu sein, um ein Buch iiber Datenstrukturen in APL2 zu verfassen. Erstens bieten erst APL2 (seit 1982) und iihnliche Erweiterungen von APL die dazu notigen Sprachele mente: verschachtelte und gemischte Arrays. Zweitens sind APL2/PC und iihnliche APL-Versionen fUr den Personal Computer erst seit wenigen Jahren auf dem Markt. Beide Entwicklungen diirften Marksteine in der schon recht langen Lebensgeschichte von APL darstellen und seine Attraktivitiit - auch jiingeren Programmiersprachen gegeniiber - noch steigern. Das vorliegende Buch stiitzt sich auf die APL2-Versionen APL2/370 (fUr Grosscomputer), APL2/PC und TryAPL2 (kostenlose reduzierte Variante von APL2/PC) von IBM. Diese drei Versionen unterscheiden sich beziiglich der im Buch verwendeten Moglichkeiten von APL2 nur unwesentlich. Selbstverstiindlich kann das Buch auch zusammen mit anderen APL-Dialekten verwendet werden, die iihnliche Erweiterungen wie APL2 aufweisen. Die Autoren haben versucht, das Grundsiitzliche der "APL2- Philosophie" deutlich zu machen und anzuwenden, allenfalls auch unter Verzicht auf spezielle - eventuell interessante - Moglichkeiten einer be stimmten Implementierung. Der eine Autor hat APL vor zwanzig Jahren als seine erste Programmier sprache kennengelernt, der andere vor gut zehn Jahren als seine dritte. Beide sind iiberzeugte Benutzer von APL und jetzt APL2, aber keine "Freaks". Sie haben mehrmals eine Standardvorlesung Datenstrukturen und Algorithmen durchgefUhrt, zuerst unter Verwendung von PL/l, spiiter von Pascal. Ihre Erkenntnis, dass sich viele der dort behandelten Datenstrukturen und Tech niken ebenso gut oder besser mit APL2 realisieren lassen als mit dies en zwei Sprachen, fUhrte zur Entstehung des vorliegenden Buches. Die Autoren mochten aber betonen, dass sie iiberzeugte Gegner von Glaubenskriegen sind, auch hinsichtlich Programmiersprachen. Dr. Heinz Bruggesser und Dr. Andreas Hiinecke, die seit vielen J ahren unsere zuverliissigsten Ansprechpartner in APL- und APL2-Fragen sind, haben die Miihe auf sich genommen, den ganzen Text kritisch zu iiberpriifen. DafUr danken wir beiden herzIich. Unser Dank gebiihrt auch der Firma IBM Schweiz fUr die zeitweise Freistellung von Dr. Bruggesser und fiir weitere Unterstiitzung. Herr UIi Rubli hat uns mit verschiedenen Auskiinf ten weitergeholfen. Dr. Hans Wossner yom Springer-Verlag danken wir fUr sein Interesse an unserem Vorhaben und seine Anregungen sowie fUr die zii gige Herausgabe unseres Buches. Bern, im Juni 1992 Hanspeter Bieri, Felix Grimm Inhaltsverzeichnis Teil A. Grundlagen ........................................ 1 1. Einleitung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Datentypen und Datenstrukturen ......................... 7 3. Kurzeinluhrung in APL2 ............................... 9 3.1 Grundinformationen iiber APL2 ......................... 9 3.2 Arrays ........................................... 14 3.2.1 Standarddatentypen ................................. 14 3.2.2 Einfache Skalare ................................... 16 3.2.3 Einfache Vektoren .................................. 20 3.2.4 Beliebige einfache Arrays ............................. 29 3.2.5 Verschachteite Arrays ............................... 39 3.3 Programmieren .................................... 51 3.3.1 Ein erstes APL2-Programm ........................... 51 3.3.2 Die iiussere Form eines Programms ...................... 53 3.3.3 Spriinge .......................................... 56 3.3.4 Rekursion ........................................ 58 3.3.5 Die primitiven Funktionen Execute und Format ............ 60 3.3.6 Definierte Operatoren ................................ 62 3.4 Zur Systemumgebung ................................ 64 3.4.1 Allgemeines ....................................... 64 3.4.2 Umgang mit Workspaces und Bibliotheken ................ 65 3.4.3 Hilfen fUr das Testen von Programmen ................... 68 3.5 Programmbeispiele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.5.1 Entfernen von Duplikaten aus einem Vektor ............... 72 3.5.2 Selektive Spezifikation mittels Pick ....... ' ............... 74 3.5.3 Suchpfad eines Arrayelementes bestimmen ................ 78 3.5.4 Ein Zerlegungsproblem ............................... 81 4. Abstrakte Datentypen und ihre Implementierung ............. 87 4.1 Abstrakte Datentypen ............................... 87 4.2 Drei Implementierungsmethoden ........................ 88 4.2.1 APL2-gerechte Implementierung ........................ 88 VIII Inhaltsverzeichnis 4.2.2 Nachbilden des List Processing in APL2 .................. 89 4.2.3 Matrix-Implementierung .............................. 89 4.2.4 Pseudopointer-Implementierung ........................ 93 Tell B. Lineare Datenstrukturen ............................. 97 5. Lineare Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 99 5.1 Der abstrakte Datentyp Lineare Liste .................... 99 5.2 APL2-gerechte Implementierung von linearen Listen ........ 101 5.3 Matrix-Implementierung von linearen Listen .............. 104 5.4 Pseudopointer-Implementierung von linearen Listen ........ 111 5.5 Vergleich der drei Implementierungsmethoden ............. 116 6. Stack und Queue .................................. 119 6.1 Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 119 6.1.1 Der abstrakte Datentyp Stack ........................ 119 6.1.2 Implementierung des ADT Stack ...................... 120 6.1.3 Eine Anwendung des ADT Stack ...................... 122 6.2 Queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 124 6.2.1 Der abstrakte Datentyp Queue ........................ 124 6.2.2 Implementierung des ADT Queue ...................... 125 6.2.3 Eine Anwendung des ADT Queue ..................... 126 7. Klassische Algorithmen und ihre Eignung fur APL2 ......... 133 7.1 Vorbemerkungen .................................. 133 7.2 Der Algorithmus von Horner ......................... 133 7.3 Binares Suchen ................................... 138 7.4 Der Merge-Algorithmus ............................. 141 7.5 Schlussfolgerungen ................................. 144 Tell C. Nichtlineare Datenstrukturen ......................... 147 8. Mengen und Abblldungen ............................ 149 8.1 Der abstrakte Datentyp Menge ........................ 149 8.2 Implementierung durch Aufzahlen der Elemente ........... 151 8.3 Bitvektor-Implementierung ........................... 155 8.4 Abbildungen ..................................... 158 8.4.1 Der ADT Abbildung ............................... 158 8.4.2 Implementierung des ADT Abbildung .................. 159 8.4.3 Eine Anwendung des ADT Abbildung .................. 161 8.5 Priority Queues ................................... 163 8.5.1 Der abstrakte Datentyp Priority Queue .................. 163 Inhaltsverzeichnis IX 8.5.2 Implementierung des ADT Priority Queue ............... 164 8.5.3 Eine Anwendung des ADT Priority Queue ............... 165 8.6 Anwendung auf relation ale Datenbanken ................ 169 9. Biume. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 179 9.1 Der abstrakte Datentyp Binarer Baum .... ".............. 179 9.2 Implementierung des ADT Binarer Baum ................ 182 9.3 Huffman-Code .................................... 188 9.3.1 Konstruktion des Huffman-Baumes .................... 189 9.3.2 Codieren von Nachrichten nach Huffman ................ 192 9.3.3 Decodieren von Binarzeichenfolgen nach Huffman ......... 194 9.4 Der abstrakte Datentyp Allgemeiner Baum ............... 195 9.5 Implementierung des ADT Allgemeiner Baum ............. 197 9.6 Tries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 200 10. Graphen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 205 10.1 Der abstrakte Datentyp Graph ........................ 205 10.2 Implementierung von gerichteten Graphen ............... 209 10.2.1 Implementierung als Mengenpaar ...................... 209 10.2.2 Implementierung mittels Adjazenzmatrix ................. 211 10.2.3 Implementierung mittels Adjazenzliste ................... 213 10.2.4 Konversion der drei Implementierungsarten .............. 215 10.3 Exhaustive Graphsuche ............................. 217 10.4 Transitive Hiille von Graphen ........................ 223 10.5 Zusammenhangskomponenten ........................ 227 10.6 Erganzende Bemerkungen ............................ 230 Teil D. Anwendungen aus der Kiinstlichen Intelligenz 233 11. Heuristische Graphsuche ............................. 235 11.1 Suchverfahren in der Kiinstlichen Intelligenz .............. 235 11.2 Markierte Graphen ................................ 236 11.3 Heuristische Graphsuche ............................ 239 12. Bildverarbeitung und Bildanalyse ....................... 247 12.1 Einleitung ....................................... 247 12.2 Bildvorverarbeitung ................................ 251 12.2.1 Verbesserung des Kontrastes .......................... 251 12.2.2 Eliminieren von gewissen Grauwerten ................... 252 12.2.3 Binarisieren von Bildern ............................. 254 12.3 Konturlinien-orientierte Bildsegmentierung ............... 256 12.3.1 Konturliniendetektion nach Sobel ...................... 256 12.3.2 Konturlinienverbesserung mittels Schwellwertoperationen 260 x Inhaltsverzeichnis 12.3.3 Bestimmen der Koordinaten von Konturlinienpunkten ....... 261 12.4 Regionen-orientierte Bildsegmentierung .................. 266 12.4.1 Zusammenhiingende Bildkomponenten mittels Graph bestimmen 266 12.4.2 Zusammenhiingende Bildkomponenten direkt im Bild bestimmen 273 12.5 Bildsequenzen .................................... 274 12.5.1 Differenzbilder .................................... 275 12.5.2 Differenz von Konturlinienbildern ..................... 277 12.6 Zusammenfassung ................................. 279 13. Wissensverarbeitung und Expertensysteme ................ 281 13.1 Einleitung ....................................... 281 13.2 Regelbasierte Wissensdarstellung und -nutzung ............ 285 13.2.1 Wissensdarstellung mittels Regeln ...................... 285 13.2.2 Wissensnutzung mittels Regeln ........................ 288 13.3 Ein regelbasiertes Expertensystem ...................... 292 13.4 Eine Erkliirungskomponente fUr regelbasierte Expertensysteme 300 13.5 Frame-basierte Wissensdarstellung und -nutzung ........... 306 13.5.1 Wissensdarstellung mittels Frames ..................... 306 13.5.2 Wissensnutzung mittels Vererbung ..................... 312 13.5.3 Wissensnutzung mittels Matching ...................... 315 13.6 Ergiinzende Bemerkungen iiber Expertensysteme ........... 317 14. Kiinstliche Intelligenz und APL2 ....................... 319 14.1 Kiinstliche Intelligenz ............................... 319 14.2 APL2 als KI-Sprache ............................... 321 Anbang 323 A. Weitere Programme ................................ 325 A.l Die Funktion PA THALL ............................ 325 A.2 Die Funktion LOCAT EV ............................ 326 A.3 Die Funktion INSERTDB ........................... 327 A.4 Die Funktion CONSULT ............................ 327 B. Die verwendeten APL2-Symbole ....................... 329 Literatur ............................................. 331 Sachwortverzeichnis 335 Teil A Grundlagen

Description:
Mit dem Erscheinen von PC-Versionen (seit 1988) hat die leistungsfähige Programmiersprache APL2 deutlich an Attraktivität und Verbreitung gewonnen. Als Entwicklungssystem für komplexe Anwendungen, die eine schnelle, interaktive Analyse großer Datenmengen erfordern, hat APL sich einen festen Plat
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.