Info-DVP 2-Faq (v1.0) Die Info-DVP 2-Faq enthält die am häufigsten gestellten Fragen (laut Prüfungsprotokolle) der letzten DVPs. Diese habe ich zum Teil selbst beantwortet (d.h. aus der Literatur übernommen) und zum Teil die Antworten aus den Prüfungsprotokollen übernommen. Natürlich gibt es keinerlei Garantie für die Korrektheit der Antworten. Florian Deißenböck ([email protected]) Informatik 3 ............................................................................................................................................ 1 1. Rechner und Hardwarenahe Programme (Mi)................................................................................. 1 2. Parallele Systeme ............................................................................................................................ 5 3. Prozess- und Prozessorverwaltung ................................................................................................. 9 4. Speicherverwaltung........................................................................................................................ 11 Informatik 4 .......................................................................................................................................... 12 5. Formale Sprachen und Automaten ................................................................................................ 12 6. Berechenbarkeit und Entscheidbarkeit .......................................................................................... 18 7. Effiziente Algorithmen und Datenstrukturen .................................................................................. 19 8. Komplexitätstheorie........................................................................................................................ 24 Verwendete Literatur: [1] Uwe Schöning Theoretische Informatik – kurzgefaßt [2] Rechenberg und Pomberger (Herausgeber) Informatik-Handbuch [3] S. Manthey und S. Micklitz Skript zur Vorlesung „Einführung in die Informatik IV“ von Prof. Steger [4] R. Sedgewick Alogrithmen [5] Informatik-Duden [6] A. S. Tanenbaum Moderne Betriebsysteme [7] P. Spies und C. Eckert Skript zur Vorlesung „Einführung in die Informatik III“ von Prof. Spies [8] M. Broy Informatik – Eine grundlegende Einführung Band 1 und 2 [9] J. Schlichter Skript zur Vorlesung „Einführung in die Informatik III“ von Prof. Schlichter [10] Prüfungsprotokolle Informatik 3 1. Rechner und Hardwarenahe Programme (Mi) 1.1 Erklären Sie die Architektur der MI? 32 Von-Neumann, 32Bit-Bus, kleinste adressierbare Speichereinheit 1 Byte, 2 Byte virtueller Speicher, es gibt ein 1-Kern- und eine 4-Kern-MI, zwei E/A-Prozessoren für Platten, Terminal, Drucker, 16 frei programmierbare Register pro Rechnerkern, 2 Betriebsmodi (User und Kernel), 2 Adressierungsarten (direkt und Seitenadressierung) 1.2 Adressierungsarten der MI Adr.-Art Beschreibung Absolute Ad- der Ort des Operanden wird direkt resse angegeben Direkter Ope- der Operand ist im Befehl selbst enthalrand ten Registeradressierung Relative Ad- der Speicherplatz des Operanden wird ressierung relativ zum Inhalt des Registers Rx angegeben. x ist das Displacement, Ry die http://www.deissenboeck.de/faqs Beispiel MOVE H 23,25 ⇔ S[25] := S[23] MOVE B I 2,a2 ⇔ S[a2] := 2 MOVE H 23,R2 ⇔ R2 := S[23] MOVE H 6+!R1/R2/,R3 ⇔ R3 := S[6+R1+R2×LOP] Info- DVP 2-Faq v1.0 [5.09.2000] Seite 1 von 25 Indirekte Adressierung Kelleradressierung 1.3 Indexangabe zusätzlich zur relative Adressierung wird hier indirekt adressiert zum Adressieren von Kellern gedacht, Kellerpegel in Rx MOVE H !(6+!R1)/R2/,R3 ⇔ R3 := S[S[6+R1]+R2×LOP] MOVE H R2,-!R3 ⇔ Kellerpegel erniedrigen, danach R2 auf Keller MOVE H R2,!R3+ ⇔ R2 auf Keller, danach KP erhöhen Wie sind Sempahore in der MI-Maschine realisiert? Binäre Semaphore mit aktiven Warten (die Adresse des Semaphors wird über Stack übergeben): P: a: JBCCI I 31, !(4+!SP),a RET V: MOVE W I 1,!(4+!SP) RET 1.4 Ist JBSSI ein privilegierter Befehl? Nein. 1.5 Was ist CHMK? CHMK steht für CHange Mode To Kernel. Mit dem Befehl CHMK werden Systemdienste aufgerufen (dies führt zu einen UB). Ablauf nach: • CHMK α Aufruf des Systemdienstes α • Ablage von PSW und PC auf Systemkeller • Der Operand S[α] gibt die Nummer des aufgerufenen Systemdienstes an. Die Nummer kommt auf den Systemkeller. Weitere Parameter werden in einem Versorgungsblock bereitgestellt. Der Ort dieses Versorgungsblocks muß vereinbart sein. • Der vorhergehende Arbeitsmodus im PSW wird mit dem gegenwärtigen Arbeitsmodus ersetzt • der aktuelle Arbeitsmodus wird der kernel mode • der PC wird auf die Adresse für die Behandlung von Systemdiensten gesetzt (laut SCB) • Rückkehr aus der Unterbrechung mit REI, Zurücksetzen von PC und PSW siehe auch Frage 1.10 1.6 Wie lautet der Befehlszyklus der MI? while true do hole nächsten Befehl; lade die zugehörigen Operanden in entsprechende Register; Befehl ausführen; Befehlszähler fortschalten; end Ausführlich (ist so, glaube ich, nicht wirklich korrekt): init: löschen alle Register; nächster Befehl: if (trace) then tracepending := true; hole Befehl und führe in aus; if (interner Alarm aufgetreten) then sichere Rechnerkernzustand; stelle neuen Rechnerkernzustand ein; goto nächster Befehl; if (trace pending) then sichere Rechnerkernzustand; stelle neuen Rechnerkernzustand ein; goto nächster Befehl; if (externe Unterbrechung erwünscht) then http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 2 von 25 wähle externe Unterbrechung mit höchster Priorität; Unterbrechungspriorität t := Priorität der ausgewählten UB Unterbrechungsnummer := Nummer der ausgewählten UB if (Unterbrechungspriorität t > IPL) then sichere Rechnerkernzustand; stelle neuen Rechnerkernzustand ein; goto nächster Befehl; goto nächster Befehl; 1.7 Ist die MI RISC oder CISC? CISC. 1.8 Befehlsformat der MI? Das Befehlsformat in 4-Adreßform hat folgende Gestalt: Op_Part Operand_Spec1, Operand_Spec2, Operand_Spec3, Operand_Spec4 1.9 Wie werden Unterprogramme bei MI realisiert und was passiert bei Unterprogrammaufruf? Ein Unterprogramm wird per CALL aufgerufen, dabei wird der PC auf den Keller gelegt. Die Parameter werden ebenfalls per Keller übergeben. Innerhalb des Unterprogramms müssen die Register gerettet werden. Rücksprung erfolgt mit RET. RET holt den PC vom Keller. 1.10 Wie läuft eine Unterbrechung in der MI ab? 1. Es wird das PSW auf den Systemkeller gelegt (mit Fortschaltung des Pegels) 2. PSW.PM := PWS.CM 3. PSW.CM := 0 (kernel mode) 4. Trace-bit und Trace-pending-bit ins PSW werden gelöscht 5. PC auf Systemkeller (mit Fortschaltung), der Befehlszähler zeigt auf nächsten Befehl, außer in folgenden Fällen • Befehlsalarm • Speicherschutzalarm • Seite-fehlt-Alarm In diesen Fällen zeigt der PC auf den Anfang des gerade ausgeführt Befehls. Dieser kann ggf. wiederholt werden (Seit-fehlt-Alarm) 6. Bei externen UB wird die Ablaufpriorität mit der UB-Priorität besetzt 7. Der PC wird auf Unterbrechungsbehandlung gesetzt (gemäß SCB) 8. Bei bestimmten Unterbrechungen wird zusätzliche Information im Systemkeller abgelegt: das gilt für Speicherschutzalarm, Seite-fehlt-Alarm, arithmetischer Alarm, CHMK 9. Rückkehr aus der Unterbrechung mit REI, Zurücksetzen von PC und PSW 1.11 Was steht im Systemkontrollblock? Der Systemkontrollblock enthält die Startadressen der Unterbrechungsbehandlungsroutinen. Die Anfangsadresse des SCB steht im Register SCBADR. 1.12 Wie funktioniert die Speicheraddressierung in der MI? Die kleinste Adressierungsart ist das Byte. Eine virtuelle Adresse hat folgenden Aufbau: 0 22 23 1 2 PCS s 31 r wobei • r die Relativadresse eines Bytes in einer Seite ist • s die Seitennummer ist (Seitengröße 512 Byte) • die Segmentnummer PCS angibt, in welchem Bereich die Adresse liegt • program region (PCS=0): Bereich für Benutzerprogramm • control region (PCS=1): Benutzerkeller • system region (PCS=2): BS-Komponenten • uzulässiger Bereich (PCS=3) Die drei zulässigen Bereiche des Programmadreßraums werden durch je einen Seitentafel auf Maschinenadressen abgebildet. Die Anfangsadressen dieser Seitentafel stehen in Registern: POB Seitentafel für program region, die ST liegt im Systembereich P1B Seitentafel für control region, die ST liegt im Systembereich SB Seitentafel für system region, die ST liegt im Arbeitsspeicher Die aktuelle Ausdehnung steht in folgenden Registern: http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 3 von 25 POL Nummer der ersten, nicht mehr in der ST befindlichen Seite der program region P1L dasselbe für control region SL dasselbe für system region In üblichen Betriebsystemrealisierungen benötigt man die ST für program und control region pro Prozeß, die für system region nur einmal. Ein Seitentafelelement (PTE) hat folgenden Aufbau: 0 1 4 5 6 V Rechte M 10 11 - 31 K Hierbei bedeutet: V=1 die Abbildung ist gültig, d.h. der Seite ist die Kachel K zugeordnet M=1 auf die Seite wurde schreibend zugegriffen Eine reale Maschinenadresse hat folgenden Aufbau: 0 22 23 1 2 0 0 k 31 r wobei k die Kachelnummer und r die Relativadresse ist. Für die Abbildung virtuelle Adresse auf Maschinenadresse siehe Abschnitt 4. 1.13 Warum gibt es zwei verschieden Betriebsmodi? Es gibt die Betriebsmodi kernel mode und user mode, um die Benutzerprozesse von den Systemprozessen zu trennen. Da im user mode keine privilegierten Befehle aufgerufen werden können und somit keine direkter Zugriff auf die Hardware möglich ist, kann sicher gestellt werden, daß Benutzerprozesse nichts „kaputt machen“ können. 1.14 Was geschieht bei der MI, wenn ein Benutzerprozeß versucht einen privilegierten Befehl auszuführen? Es gibt einen Befehlsalarm. 1.15 Was ist die 2-Komplement-Darstellung? Ist m positiv, so ermitteln wir die n-stellige direkte Binärcodierung von m. Dies legt die Werte für die Bits bn...b1 fest. Das Bit bn+1 belegen wir mit der 0. Ist m negativ, so existiert eine positive n Zahl m‘ = -2 +m‘. Wir ermitteln die n-stellige direkte Binärcodierung für m‘. Dies legt die Werte dür die Bits bn...b1 fest. Das Bit bn+1 belegen wir mit der 1. Die 2-Komplement-Darstellung hat nur eine Darstellungsform der null. Soweit Herr Prof. Broy. Mann kann auch sagen, daß man um die 2-Komplement-Darstellung zu erreichen, das Komplement der Binärzahl bildet und eins hinzu addiert. 1.16 Welche Daten werden im Prozessorstatuswort gespeichert? Das PSW hat folgende Bestandteile: Bit b1 b5 Name TP BEN_MAPPEN b6b7 CM b8b9 PM b11...b15 b26 b27 b28 b29 b30 b31 IPL IV T N Z V C http://www.deissenboeck.de/faqs Bedeutung trace pending bit Adressierungsart: 0: direkte Adressierung 1: Seitenadressierung current mode 0: kernel mode 3: user mode previous mode 0: kernel mode 3: user mode Ablaufpriorität integer overflow trap disable trace bit negative condition code zero condition code overflow condition carry bit Info- DVP 2-Faq v1.0 [5.09.2000] Seite 4 von 25 1.17 Erklären Sie das von-Neumann-Konzept. Ein von-Neumann-Rechner besteht aus vier Werken: • Haupt- bzw Arbeitsspeicher (Programm und Daten) • Leitwerk (interpretiert Programm) • Rechenwerk (führt arithmetische Operationen aus) • Ein/Ausgabewerk inkl. Sekundärspeicher (kommuniziert mit Umwelt, Langzeitspeicher) Befehle (Programm) Hauptspeicher Programme Daten Rechenwerk Leitwerk Daten BZ IR SR AC Adressen Daten E/A-Werk E/A-Geräte (Benutzer), Peripherie Des weiteren gilt: • Die Struktur des Rechner ist unabhängig vom bearbeiteten Problem (Programmsteuerung) • Programm und Maschine stehen im selben Speicher und können durch die Maschine verändert werden • der Hauptspeicher ist in Zellen gleicher Größe aufgeteilt, die durch fortlaufende Adressen bezeichnet werden • Das Programm besteht aus einer Folge von Befehlen, die i.a. sequentiell ausgeführt werden • Von der Folge kann durch bedingte oder unbedingte Sprungbefehle abgewichen werden. Bedingte Sprünge sind von gespeicherten Werten abhängig • Die Maschine benutzt Binärcodes, Zahlen werden dual dargestellt 1.18 Ist eine Unterbrechung während einer Unterbrechung möglich? Ja. Die Ausführung ist abhängig von den Prioritäten der UBs. 1.19 Nennen Sie privilegierte Befehle der MI. • HALT: anhalten der Maschine • LPCB: laden des PCB • SPPCB: speichern des PCB • REI: Rückkehr aus UB • SP<SR>: Speichern von Sonderregistern • L<SR>: Laden von Sonderregistern • RKALARM: Auslösen von Rechnerkernalarm 2. Parallele Systeme 2.1 Was ist ein Prozeß? Gegegeben sei eine Menge E von Ereignissen und eine Menge A von Aktionen. Ein Tripel p = (E0, ≤0, α) nennen wir Prozeß, falls folgende Aussagen gelten: • E0 ⊆ E, E0 heißt Ereignismenge • ≤0 ist eine partielle Ordnung über E0, ≤0 ist die Kausalitätsrelation • α: E0 → A, ist Aktionsmarkierung des Prozesses P Die Abbildung α ordnet jedem Ereignis eine Aktion zu. Für einen Prozeß p nennen wird zwei http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 5 von 25 Ereignisse e1, e2 ∈ E0 nebenläufig, falls sie im Prozeß p nicht in einer kausalen Relation stehen, d.h. wenn gilt ¬(e1 ≤0 e2 ∨ e2 ≤0 e1). Parallele Ereignisse sind kausal unabhängig, sie können zeitlich nebeneinander oder in beliebiger Reihenfolge stattfinden. Ein Prozeß heißt sequentiell, wenn in ihm keine parallelen Ereignisse auftreten. Damit stellte die Kausalitätsrelation ≤0 eine lineare Ordnung dar. In einer konkreteren Definition bezeichnet ein Prozeß einen eindeutig identifizierbaren Ablauf eines Programms in einem Rechensystem. Der Ablauf ist bestimmt durch die Daten und Befehle des Programms. Ein Prozeß kann die folgende Zustände besitzen: erzeugt, rechnend, wartend, rechenwillig, terminiert. 2.2 Was ist eine Aktionsstruktur? Eine Aktionsstruktur ist dasselbe wie ein Prozeß. 2.3 Was ist ein Petrinetz? Ein Petrinetz ist ein Tripel (S, T, F) mit 1. S ist die endliche Menge von Stellen 2. T ist die endliche Menge von Transitionen, Transitionen und Stellen sind disjunkt. 3. F ist die Flußrelation mit F ⊆ (S × T) ∪ (T × S) 4 Für einen Knoten x ∈ S ∪ T bezeichnet: •x = {y | yFx} den Vorbereich und x• = {y | xFy} den Nachbereich 2.4 Was für ein Graph ist ein Petrinetz? Ein gerichteter, bipartiter Graph. 2.5 Wie können Prozesse kommunizieren? Prozesse können z.B. mit Nachrichten kommunizieren. Man kann aber auch Semaphoren als Kommunikation bezeichnen. 2.6 Was für Konzepte gibt es für Synchronisierung? • Unterbrechungssperre: Es kann ausreichend sein, mit Enable und Disable Interrupt Funktionen dafür zu sorgen, daß ein Prozeß der einen kritischen Abschnitt ausführt, nicht unterbrochen wird. Nur nützliche für kurze Abschnitte und nur für BS-Kern • Test-And-Set-Lock Operationen: Atomare Schreib/Lese-Aktionen auf Hardwareebene • Dienste mit passivem Warten • Semaphor-Konzept und Monitor: Semaphore siehe nächste Frage, Monitore sind spezielle Konstrukte von Programmiersprachen 2.7 Was ist eine Semaphore? Eine Semaphore ist eine ganzzahlige Koordinierungsvariable, die eingesetzt wird, um w. A. zu Realisieren. Eine Semaphore wird mit einem Startwert initialisiert und die folgenden Methoden: procedure P begin s:=s-1; if (s<0) Prozeß in die Menge der bezüglich s wartenden Prozesse einreihen end; procedure V begin s:=s+1; if (s>=0) führe einen der bezüglich s wartenden Prozesse in den Zustand rechenwillig über end; Einsatz der Semaphore: Zuerst initialisiert man ein Semaphor-Objekt, z.B: wa : semaphor(1) und klammert man die kritischen Abschnitte, in denen auf die Ressource X zugegriffen wird mit P und V Operationen: wa.P; >> Code mit Zugriffen auf X << wa.V 2.8 Was ist die Bernsteinbedingung? Für eine Transaktion a bezeichnet V(a) den Vorbereich, d.h. die Menge der gelesenen Zustandsvariablen und N(a) den Nachbereich, d.h. die Menge der geschriebenen Zustandsvariablen. Die Bedingung: V(α(e1)) ∩ N(α(e2)) = N(α(e1)) ∩ V(α(e2)) = N(α(e1)) ∩ N(α(e2) = 0 (leere Menge) http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 6 von 25 heißt Bernsteinbedingung. Ein Prozeß p heißt Störungsfrei, wenn für jedes Paar von Ereignissen e1 und e2 die Bernsteinbedingung gilt. 2.9 Erzählen Sie etwas über die Klassifikation von Betriebsmitteln. Betriebsmittel können wie folgt klassifiziert werden: • einmal benutzbar (Druckerpapier, Nachricht) • wiederholt benutzbar • parallel benutzbar (Datei mit lesenden Zugriff) • exklusiv benutzbar, unterbrechbar (Prozessor, Arbeitsspeicher) • exklusiv benutzbar, nicht-unterbrechbar (Drucker) 2.10 Was bedeutet es, wenn ein Petrinetz lebendig ist? In einem lebendigen Petrinetz kann jede Transition immer wieder schalten. Ein lebendiges Petrinetz ist verklemmungsfrei. 2.11 Erklären Sie das Erzeuger/Verbraucher-Problem. Ein Erzeuger-Prozeß E erzeugt Datenelement und schreibt sie in einen Puffer W. Der Verbraucher-Prozeß V liest Datenelement aus dem Puffer. Der Zugriff der beiden Element auf den Puffer ist zu synchronisieren. Zugriff auf Puffer wird durch Semaphor wa: semaphor(1) synchronisert, damit der Verbraucher nicht versucht vom leeren Puffer zu lesen gibt es noch das Semaphor zaehler: semaphor(0) Erzeuger E: while true do begin >>produziere<< wa.P; >>schreibe nach W<< wa.V; zaehler.V; end; Verbraucher V: while true do begin zaehler.P; wa.P; >>entnimm aus W<< wa.V; >>verarbeite<< end; Falls der Puffer beschränkte Kapazität hat, wird noch ein weiteres Semaphor benötigt. 2.12 Erklären Sie das Leser/Schreiber-Problem. Das Leser/Schreiber-Problem ist ein Beispiel für wechselseitigen Ausschluß. Das System umfaßt Leseaktivitäten, die in ihrem kritischen Abschnitt lesend auf eine wechselseitig ausgeschlossene Ressource zugreifen und Schreibaktivitäten, die in ihrem kritischen Abschnitt schreibend auf die w. a. Ressource zugreifen. Gefordert wird: • Leseaktionen können gleichzeitig stattfinden, wobei die Anzahl der Leser auf 3 beschränkt ist • Lese- und Schreibaktionen sind wechselseitig ausgeschlossen • Schreibaktionen untereinander sind wechselseitig ausgeschlossen Das folgende Petrinetz erfüllt diese Bedingungen: Eintritt Eintritt 3 Austritt http://www.deissenboeck.de/faqs Schreiber s kritischer Abschnitt kritischer Abschnitt Leser 3 Austritt Info- DVP 2-Faq v1.0 [5.09.2000] Seite 7 von 25 2.13 Erklären Sie das Problem der speisenden Philosophen. In einem Elfenbeinturm leben fünf Philosophen. Der Tageszyklus eines jeden Philosophen besteht abwechselnd aus Essen und Denken. Die fünf Philosophen essen an einem runden Tisch, auf dem in der Mitte eine Schüssel voller Spaghetti steht. Jeder Philosoph hat seinen festen Platz an dem Tisch und zwischen zwei Plätzen liegt genau ein Stäbchen. Das Problem der Philosophen besteht nun darin, daß die Spaghetti nur mit genau zwei Stäbchen zu essen zu sind. Darüber hinaus darf jeder Philosoph nur die direkt links und rechts neben ihm liegenden Stäbchen benutzen. Das bedeutet das zwei benachbarte Philosophen nicht gleichzeitig essen können. Zur Realisierung mit Semaphoren werden 6 Semaphore benötigt: stab_0, stab_1,..., stab_4: semaphor(1) Semaphore für die Stäbchen, mit diesen Semaphoren kommt man aber noch nicht aus, da es sein könnte, daß alle Philosophen gleichzeitg das rechte Stäbchen aufnehmen ⇒ Verklemmung tisch: semaphor(4) Semaphore für Tisch, damit nur 4 Philosophen auf einmal anfangen können zu essen Algorithmus für Philosophen: philosoph_j: while true do begin DENKEN; tisch.P; stab_i.P; mit i=j stab_i.P; mit i=j+1 mod 5 ESSEN; stab_i.V; mit i=j stab_i.V; mit i=j+1 mod 5 tisch.V; end while; 2.14 Erklären Sie den Bankiersalgorithmus. Der Bankiersalgorithmus verwendet das Prinzip der Verklemmungsverhinderung. Bei einer Anfrage eines Kunden wird der Betrag probeweise zugeteilt und dann überprüft der Algorithmus, ob in der entstehenden Situation einen Verklemmung möglich ist, wenn ja, verweigert er die Geldausgabe. Dafür ist aber nötig, daß der Algorithmus die zukünftigen Anforderungen der Prozesse (Kunden) abschätzen kann (Kreditrahmen). 2.15 Was versteht man unter Verklemmung? vollständige Verklemmung: Die Markierung M beschreibt eine vollständige Verklemmung, wenn es keine Transition T gibt, die unter M schalten kann lokale Verklemmung: Die Markierung M beschreibt eine lokale Verklemmung, falls es eine Transition t gibt, die nach erreichen von M, nie wieder Schalten kann 2.16 Wie sieht die einfachste Verklemmung aus? Im folgenden Betriebsmittelgraphen sind Prozesse als Kreise und Betriebsmittel als Quadrate dargestellt. Eine Kanten von einem Betriebsmittel auf einen Prozeß bedeutet, daß das Betriebsmittel von dem Prozeß belegt wird. Eine Kante von einem Prozeß auf ein Betriebsmittel bedeutet, daß er Prozeß blockiert ist und auf dieses Betriebsmittel wartet. Falls eine solcher Belegungsanforderunggraph einen Zyklus enthält, liegt ein Deadlock vor. D T U C 2.17 Erklären Sie Agenten. Die Sprache der Agenten ist eine Prozeßalgebra, wie Petrinetze eignet sie sich zur Beschreibung von Prozessen. http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 8 von 25 2.18 Was versteht man unter wechselseitigem Ausschluß? Ein Ressource wechselseitig auszuschließen bedeutet sicherzustellen, daß nur jeweils ein Prozeß zu einem gegeben Zeitpunkt diese Ressource belegt. Folgende Anforderungen sind an den w. A. zu stellen: • die kritischen Abschnitte sind wechselseitig ausgeschlossen • Eine Realisierung des w. A. darf nicht von einer Annahme über die Reihenfolge, in der die Prozesse ihre kritischen Abschnitte ausführen, abhängen • Eine Realisierung des w. A. darf nicht von Annahmen über die Ausführungszeit der Prozesse abhängen • Unter der Annahme, daß Prozesse nach endlicher Zeit ihre kritischen Abschnitte verlassen, muß gelten, daß kein Prozeß einen anderen Prozeß unendlich lange daran hindern darf, seinen kritischen Abschnitt auszuführen 2.19 Was ist der formale Unterschied zwischen Nebenläufigkeit und Parallelität? Eigentlich bezeichnet Parallelität die spezielle Form der Nebenläufigkeit, bei der mehrere Prozessoren zur Verfügung stehen. 2.20 Was ist die Sequentialisierung eines Prozesses? Ein Prozeß p1 = (E1, ≤1, α) heißt Sequentialiserung eines Prozesses p2 = (E2, ≤2, α), falls gilt: • E1 = E2 • ∀e,d ∈ E1 gilt: e ≤2 d → e ≤1 d • α1 = α2 Ist p1 sequentiell, so heißt die Sequentialisierung vollständig. 2.21 Welchen Methoden gibt es zur Behandlung des Verklemmungsproblems? • Vogel-Strauß-Alogrithmus: man hofft, daß keine Deadlocks auftreten. • Vermeidung: Man versucht Regeln so festzulegen, daß mindestens eine der DeadlockBedingungen verletzt ist, aber das ist nicht immer möglich. • Verhinderung: Man versucht zukünftige Betriebsmittelanforderungen von Prozesse abzuschätzen und die Zustände die zu Verklemmungen führen können zu verhindern. • Erkennung: Man versucht eine Verklemmung, dann wenn sie auftritt zu erkennen und zu beseitigen. 2.22 Welche Bedingung müssen erfüllt sein, damit eine Verklemmung auftreten kann? 1. Die Bedingung des wechselseitigen Ausschlusses. Jede Betriebsmittel wird entweder von genau einem Prozeß belegt oder ist verfügbar. 2. Die Belegungs- und Wartebedingung. Ein Prozeß, der bereits Betriebsmittel belegt, kann weitere Betriebsmittel anfordern 3. Die Ununterbrechbarkeitsbedingung. Die Betriebsmittel, die von einem Prozeß belegt werden, können nicht entzogen werden, sondern müssen explizit von Prozess freigegeben werden. 4. Die zyklische Wartebedingung. Es muß eine zyklische Kette aus zwei oder mehr Prozessen existieren, so daß jeder Prozeß ein Betriebsmittel anfordert, das von dem nächsten Prozeß in der Kette belegt wird. 2.23 Wie funktioniert Synchronisation in Java? Java bietet mit den Schlüsselwort synchronized eine Möglichkeit w.A. zu realisieren. Dazu gibt es die Methoden wait(), notify() und notifyAll() mit denen man die Möglichkeit hat Threads auf Ereignisse warten zu lassen und sie wieder aufzuwecken. 3. Prozess- und Prozessorverwaltung 3.1 Wie wird Mehr-Programm-Betrieb auf einem Single-Prozessor-System erreicht? Der Prozessor wird nach einer bestimmten Strategie den Prozessen abwechselnd zur Verfügung gestellt. Mögliche Strategien: • unterbrechend • Zeitscheibenstrategie: siehe Frage 3.4 • Prioritäten: Den Prozessen werden Prioritäten zugeordnet, der Prozessor führt die Prozesse mit der höchsten Priorität zuerst aus. Gefahr des Verhungers für Prozesse mit niedriger Priorität, daher empfiehlt sich dynamische Prioritätsvergabe • nicht-unterbrechend http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 9 von 25 • First-Come First-Serve: die Ready-Queue wird als FIFO-Liste verwaltet. Diese Methode ist einfach zu realisieren, aber die durchschnittliche Wartezeiten sind hoch • Shortes Job First: Diese Strategie ist anwendbar, falls die Dauer der nächsten Rechenphase bis Interrupt o.ä. bekannt ist. Somit für long-term Scheduling geeignett, wo Informationen über Rechenzeit zur Verfügung stehen In der Praxis wird oft eine Kombination aus Zeitscheibenstrategie und Prioritätenstrategie eingesetzt. 3.2 Was ist ein Betriebssystem? Ein Betriebssystem erfüllt folgende Hauptaufgabe: • Veredeln der Hardware (Virtualisierung) • Steuerung und Kontrolle der Programmausführung • Verwaltung der Ressourcen (Speicher, CPU, Platten,...) • Anbieten von Diensten in Form von Schnittstellen, so daß die Ressourcen genutzt werden können 3.3 Was ist das Unterbrechungskonzept? Bei einer Unterbrechung wird ein gerade aktiver Prozeß unterbrochen und eine Unterbrechungsbehandlung durchgeführt. Eine Unterbrechung muß so kontrolliert erfolgen, daß ein definierter Prozeßstatus festgehalten werden kann. Unterbrechungen können extern (Interrupts) oder intern (Exceptions) sein. Die Behandlung eines Interrupts läuft wie folgt ab: • Geräte-Controller meldet Unterbrechung über spezielle Interrupt-Leitung an CPU • CPU prüft im Befehlszyklus nach jedem Befehl, ob ein Interrupt gemeldet wurde • Falls Interrupt vorliegt: sichern u.a. des aktuellen PCs und Sprung zu einer Unterbrechungsbehandlungsroutine, die an einer festgelegten Speicheradresse steht • Routine untersucht Unterbrechungsursache, die vom Controller über Datenleitung gemeldet wird (Unterbrechungsnummer) • Über Unterbrechungsnummer: Auswahl der benötigten UBR, meist: Nummer ist Index in Tabelle: dem Unterbrechungsvektor • Vektor enthält Speicheradresse der Unterbrechungsbehandlung Mögliche Konflikte sind das Eintreten einer UB während einer UB und das gleichzeitige Eintreten mehrerer UBs. Ein mögliche Lösung ist es während einer Unterbrechung andere UBs zu maskieren. Die andere Möglichkeit ist, den UBs Prioritäten zu zuteilen. Eine UBH wird nur dann unterbrochen, falls eine UB mit höherer Priorität eintrifft. In diesem Falle müssen die Unterbrechungsroutinen reentrant sein. 3.4 Was ist ein Zeitscheibenverfahren? Das Zeitscheibenverfahren (Round Robin) ist eine preemtive Prozessorverwaltungsstrategie. Die Prozesse werden immer für ein festgelegtes Zeitquantum (z.B. 100 ms) an den Prozessor gebunden und danach wird den Prozessen der Prozessor wieder entzogen. 3.5 Was enthält der PCB und für was ist er gut. Ein Prozeß wird durch seinen Prozeßkontext und dieser durch den Prozeßkontrollblock (PCB) beschrieben. Ein PCB enthält in der Regel folgende Information: • eindeutiger Name (z.B. pid) • Name des Benutzers, dem der Prozeß zugeordnet ist • der Prozeßzustand (wartend, rechnend, rechenwillig,..) • falls der Prozeß rechnend ist, Angabe des Prozessorkerns • falls der Prozeß wartend ist, eine Spezifikation des Ereignisses, auf das der Prozeß wartet (z.B. Adresse eines Semaphors) • die Ablaufpriorität des Prozesses • die Inhalte der programmierbaren Register • die Inhalte der Register, in denen die Anfangsadresse und Länge der prozeßspezifischen Speicherabbildungstabellen enthalten ist • das Programmstatuswort. Das PSW enthält weitere Informationen, die der Rechnerkern über den Prozeß kennt Ein Prozeß muß als Verwaltungseinheit beschrieben, um die Prozeßverwaltung zu ermöglichen, dafür benötigt man den PCB. Je größer der PCB ist, desto teurer ist ein Kontextwechsel. http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 10 von 25 3.6 Was ist ein Kontextwechsel? Ein Kontextwechsel muß erfolgen falls einem Prozeß die CPU entzogen wird und ein neuer Prozeß in den Zustand rechnend überführt wird. Der aktuelle Ausführungskontext des Prozesses muß gerettet und der des neuen Prozesses geladen werden. 3.7 Was ist der Unterschied zwischen Benutzer- und Systemmodus? Im Benutzermodus stehen nur die nicht privilegierten Befehle zur Verfügung, Zugriff nur auf Prozeßadressraum und unkritische Register. Wird versucht, einen privilegierten Befehl auszuführen, so gibt es einen Befehlsalarm. Benutzerprozesse werden im Usermodus ausgeführt. Im Systemmodus sind auch die privilegierten Befehle verfügbar. Die Dienste des Betriebssystemkerns laufen im Systemmodus ab. 4. Speicherverwaltung 4.1 Erklären Sie virtuelles Speichermanagement. Virtuelles Speichermanagement wird benutzt um die drei Nachteile der direkten Adressierung, die Programmadressen direkt auf Maschinenadressen abbildet, zu umgehen: • Programme sind nicht verschiebbar • Programmgröße ist durch physikalischen Speicher begrenzt • die Lokalitätseigenschaft (z.B. Schleifen) der Programme wird nicht ausgenutzt Beim virtuellen Speichermanagement wird der Programmadreßraum (virtueller Adreßraum) in gleich große Seiten aufgeteilt. Der Maschinenadreßraum wird in Kachel (entweder gleiche Größe wie Seiten oder Seitengröße ist vielfaches der Kachelgröße) aufgeteilt. Die Seiten eines Prozesses können im ASP oder auf dem Hintergrundspeicher liegen. Die Seiten werden nun bei Bedarf in den ASP ein- bzw. ausgelagert. Dieses Verfahren behebt die drei o.g. Probleme. Ein zusätzlicher Vorteil ist die Seiten mit bestimmten Rechten zu verknüpfen. Außerdem können Speicherbereiche realisiert werden, auf die mehrere Prozesse Zugriff haben. 4.2 Was ist die Seitenkacheltabelle? Die SKT enthält die Seitendeskriptoren und ist für die Abbildung vom virtuellen in den physikalischen Adreßraum zuständig. virtueller Adreßraum von P1 Seite 1 von P1 Seiten-Kachel-Tabelle mit Deskriptoren Seite 2 von P1 Hauptspeicher mit Kacheln Kachel 1 Kachel 2 Hintergrundspeicher mit Blöcken Auslagern Kachel 3 Seite 1 von P2 Kachel 4 Kachel 5 Seite 2 von P2 Einlagern .... virtueller Adreßraum von P2 4.3 Gehen Sie auf verschiedene Strategien der Seitenersetzung ein. Welche Seite ist aus dem Speicher zu entfernen, wenn eine Seite nachgeladen werden und keine freie Kachel zur Verfügung steht. Mögliche Strategien: • FIFO: verdrängen der ältesten Seite. Problem: FIFO beachtet nicht wann auf eine Seite http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 11 von 25 zuletzt zugegriffen wurde. Seiten mit globalen Variable, die schon „alt“ sind, auf die aber noch immer zugegriffen wird, werden entfernt • LIFO: verdrängen der jüngsten Seite. Trägt der Lokalitätseigenschaft von Programm (z.B. häufiger Aufruf der selben Seiten in Schleife) keine Rechnung • LRU: verdrängen der am längsten nicht genutzten Seite. Das LRU-Verhalten muß approximiert werden, dies geschieht durch ein Referenzbit im Seitendeskriptor • optimale Strategie: entfernen der Seite, auf die Zukunft am längsten nicht zugegriffen wird. unrealistisch, da zukünftiges verhalten meist unbekannt. Diese Strategie ist trotzdem wichtig, da sie die Obergrenze für Erreichbares angibt. 4.4 Was ist Segment-Seitenaddressierung? Bei der Segment-Seitenaddressierung wird der Programmadreßraum in logische Einheiten unterschiedlicher Länge aufgeteilt, in Segmente. Ein Segment umfaßt inhaltliche oder logisch zusammengehörige Speicherbereich, z.B. Stack, Code, Daten. Jedes Segment wird durch einen Segmentdeskriptor beschrieben, der in einer Segmenttabelle steht. Jedes Segment besteht wiederum aus Seiten. Pro Segment wird eine SKT verwaltet. 4.5 Wie lassen sich zu große Seitentafeln verhindern? Man kann die SKT selbst wieder teilweise auslagern. Dann muß nicht die ganze Tabelle im Speicher gehalten werden, allerdings muß die mehrstufige Tabelle schrittweise durchlaufen werden (Page-Table Lookup). Da eine schnelle Umrechnung der virtuellen auf die realen Adressen nötig ist, werden oft benötigte Adressen in einem assoziativen Cache der MMU gehalten, dem Tranlation Lookaside Buffer. 4.6 Allgemeine Probleme beim Paging? Die Seitenfehlerrate muß möglichst gering gehalten werden, z.B. durch größere Seiten. Seitenflattern (Thrashing), bei vielen nebenläufigen Prozessen kann es passieren, daß das System nur noch mit ein und Auslagern von Seiten beschäftigt ist. 4.7 Was sind Seitendeskriptoren? Die Seitendeskriptoren werden in der SKT gespeichert, sie verwalten Informationen über die Seiten aller Prozesse. Ein Seitendeskriptor enthält u.a.: • Zugriffsrechte • existent, es muß nicht jede Seite existent sein • geladen, gibt an ob die Seite im Hauptspeicher ist oder auf dem Hintergrundspeicher • Zugriffsbit, wird für die Seitenersetzungsstrategie benötigt • Veränderungsbit, wird ebenfalls für SES benötigt, wird bei schreibend Zugriff gesetzt Informatik 4 5. Formale Sprachen und Automaten 5.1 Erklären Sie die Chomsky-Hierarchie. Die in der Sprachen-Spalte angegebenen Sprachen sind jeweils Beispiele, die genau vom entsprechenden Typ, so ist z.B. die Sprache L2 kontextfrei aber nicht regulär. Typ Typ 0 Typ 1 Typ 2 Typ 3 Produktionen keine Beschränkung Sprachen Berechnungsmodell rekursiv Aufzählbar Turingmaschinen L0=H, wobei H das Halteproblem ist kontextsensitiv linearbeschränkte, l→r, es gilt |l| ≤ |r| nichtdeterministische n n n Turingmaschinen (LBA) L1={a b c | n ≥ 1} kontextfrei endliche Automaten mit l→r, es gilt |l| ≤ |r| und l ist Variable Stack (Kellerautomaten) n n L2={a b | n≥1} endliche Automaten l→r, es gilt |l| ≤ |r| und l ist Variable regulär (DFA und NFA) und r ∈ Σ ∪ ΣV, d.h. die rechten Seiten der Regeln sind entweder L3={a*b*} http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 12 von 25 einzelne Terminale oder ein Terminal gefolgt von einer Variablen 5.2 Was ist das Pumping-Lemma (für reguläre Sprachen)? Das Pumping-Lemma wird benutzt um zu Zeigen, daß eine Sprache nicht regulär ist. Es besagt folgendes: Sei L eine reguläre Sprache. Dann gibt es eine Zahl n, so daß sich alle Wörter x ∈ L mit |x| ≥ n zerlegen lassen in x = uvw, so daß folgende Eigenschaft erfüllt sind: 1. |v| ≥ 1, 2. |uv| ≤ n, i 3. für alle i = 0, 1, 2,... gilt: uv w ∈ L 5.3 Was ist ein regulärer Ausdruck? Reguläre Ausdrücke sind spezielle Formeln mit denen reguläre Sprachen definiert werden können. Die Ausdrücke sind wie folgt definiert: - 0 ist ein regulärer Ausdruck - ε ist ein regulärer Ausdruck - für jedes a ∈ Σ ist a ein regulärer Ausdruck - wenn α und β reguläre Ausdrücke sind, dann auch αβ, (α|β) sowie (α)* Beispiel: Durch den regulären Ausruck (0|(0|1)*00) wird die Sprache beschrieben, deren Wörter entweder 0 sind oder auf 00 enden). 5.4 Wie geht die Umwandlung eines regulären Ausdrucks in einen endlichen Automaten? Man zerlegt den regulären Ausdruck ein kleinere reguläre Ausdrücke, aus diesen einzelnen regulären Ausdrücken baut man den Automaten: ε x Automat für die Sprache ε Automat der die Sprache x akzeptiert X Y gegebene Automaten für die die Sprachen der reg. Ausdr. X und Y ε X ε X ε ε Y ε Automat für den reg. Ausdruck (X|Y) ε Y Automat für (XY) 5.5 Automat für die leere Sprache ε X ε ε Automat für X* Wie kann man einen NFA in einen DFA umwandeln? Sei M=(Z, Σ, δ, S, E) ein NFA, man konstruiert einen DFA M‘=(Z‘, Σ, δ‘, z0‘, E‘)der ebenfalls T(M) akzeptiert wie folgt: n Z‘ = ℘(Z), (wenn |Z| = n, dann ist |℘(Z)| = 2 ) δ ' ( X , a) = U δ ( z, a ), X ∈ Z ' z∈X z0‘ = S E‘ = {X ⊆ Z | X ∩ E ≠ 0} Der entstandene Automat M‘ ist im allgemeinen nicht minimal. 5.6 Wie kann ein Automat minimalisiert werden? Ein DFA M (Zustände, die vom Startzustand aus nicht erreichbar sind, sind bereits entfernt) kann wie folgt minimalisiert werden: http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 13 von 25 • Stelle eine Tabelle aller Zustandspaare {z, z‘} mit z ≠ z‘ von M auf • Markiere alle Paare {z, z‘} mit z ∈ E und z‘ ∉ E (oder umgekehrt) • Für jedes noch unmarkierte Paar {z, z‘} und jedes a ∈ Σ test, ob {δ(z, a), δ(z‘, a) bereits markiert ist. Wenn ja: markiere auch {z, z‘} • Wiederholen den letzten Schritt bis sich keine Änderung in der Tabelle mehr ergeben • Alle jetzt noch unmarkierten Paare können jeweils zu einem Zustand verschmolzen werden 2 Der Algorithmus hat die Zeitkomplexität O(n ). 5.7 Was ist eine Grammatik? Eine Grammatik ist ein 4-Tupel G= (V, Σ, P, S), wobei V die endliche Menge der Variablen ist, Σ ist eine endliche Menge, das Terminalalphabet, P die Menge der Produktionen und S das Startsymbol ist. 5.8 Was ist eine formale Sprache? Sei Σ ein Alphabet, dann ist eine Sprache jede beliebige Teilmenge von Σ*. 5.9 Was ist der Unterschied zwischen einem DFA und einem NFA? Bei einem NFA gibt es im Gegensatz zum DFA ε-Übergänge und es dürfen zwei ausgehende Kanten einen Zustandes die selbe Markierung haben. 5.10 LR(k)-Sprachen? Eine kontextfreie Grammatik ist eine LR(k)-Grammatik, wenn man durch Lookaheads der Länge k erreichen kann, daß bei einer Reduktion von links nach rechts in jedem Schritt eine Regel anwendbar ist. Die LR(k)-Sprachen stimmen mit den deterministisch kontextfreien Sprachen überein. Sie spielen im Compilerbau eine wichtige Rolle. 5.11 Was versteht man unter links- bzw. rechtslinearität? Bei rechtslineare regulären Sprachen habe die Produktionen der entsprechenden Grammatiken die Form A → a und A → bB, bei linkslinearen die Form A → a und A → Bb. Eine Grammatik ist auch regulär, wenn sie durch linkslineare Produktionen angegeben werden kann. 5.12 Geben Sie eine kontextfreie Sprache an die nicht regulär ist. n n L = {a b | n ≥ 1} kann von einem endlichen Automaten ohne Keller nicht erkannt werden. Kann auch mit Pumping-Lemma gezeigt werden: Angenommen L sei regulär. Dann gibt es eine Zahl n, so daß sich alle Wörter x ∈ L der Länge n n ≥ n wie im Pumping-Lemma beschrieben zerlegen lassen. Betrachten wir das Wort a b der Länge 2n. Die entsprechende Zerlegung des uvw dieses Wortes ist aufgrund Bedingung 1 so, daß v nicht leer ist, und aufgrund Bedingung 2 kann v nur aus a’s bestehen. Nach Bedingung 3 n-|v| n wäre dann auch das Wort uw=a b in der Sprache, was im Widerspruch zur Definition von L steht. Daher ist L nicht regulär. 5.13 Geben Sie einen Automaten an, der erkennt ob eine Binärzahl durch drei teilbar ist. Der angegebene Automat liest die Zahl von links. Die Zustände stehen für die Rest der Division. 0 0mod3 1 1 1mod3 0 2mod3 5.14 Beispiel für eine kontextsensitive Sprache. n n n L = {a b c | n ≥ 1} kann auch von einem Automaten mit Keller nicht erkannt werden, da keine Speichermöglichkeit für die C’s vorhanden ist. 5.15 Was ist eine Satzform? Ein Wort, das im Verlauf einer Ableitung auftritt und noch Variablen enthält, heißt Satzform. http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 14 von 25 5.16 Was ist die Chomsky Normalform und wie erreicht man sie? Zu jeder ε-freien, kontextfreien Grammatik G gibt es eine Chomsky Normalform Grammatik G‘ mit L(G) = L(G‘). Bei der Chomsky Normalform haben alle Produktionen die Form A → BC oder A → a. Um eine Typ-2-Grammatik in Chomsky Normalform zu überführen müssen folgende Schritte ausgeführt werden (am Beispiel): G := ({S,A,B0,B1,B2,B3,C}, {a,b,e}, {S → a|ASB0b, A → C|a, B0 → C|B1, B1 → B2|B3, B2 → B0, B3 → b, C → ε|e}, S) • ε-Produktionen entfernen S → a|ASB0b|SB0b|ASb|Sb, A → C|a, B0 → C|B1, B1 → B2|B3, B2 → B0, B3 → b, C → e • Zyklen entfernen: Zyklus B0 → B1, B1 → B2, B2 → B0, Variablen im Zyklus durch B ersetzen und Produktion der Art B → B entfernen S → a|ASBb|SBb|ASb|Sb, A → C|a, B → C|B3, B3 → b, C → e • Produktionen der Art T→X entfernen: Reihenfolge festlegen: A, B, B3, C, „durchschleifen“ (überflüssige Produktionen entfernen) S → a|ASBb|SBb|ASb|Sb, A → e|a, B → e|b • Neue Variablen für Terminale auf der rechten Seite der Produktionen: Q → b einführen S → a|ASBQ|SBQ|ASQ|SQ, A → e|a, B → e|b, Q → b • Rechte Seiten normieren: Hilfsvariablen einführen S → a|H3Q|H2Q|H1Q|SQ, H1 → AS, H2 → SB, H3 → H1B, A → e|a, B → e|b, Q → b n n 5.17 Geben Sie eine Chomsky-2-Grammatik für die Sprache a b an. G:= ({S}, {a,b}, {S → ab, S → aSb}, S) 5.18 Wie lautet die formale Beschreibung eines endlichen Automaten? DFA: Ein DFA M wird spezifiziert durch ein 5-Tupel M=(Z, Σ, δ, z0, E). Hierbei bezeichnet Z die Menge der Zustände und Σ ist das Eingabealphabet, Z ∩ Σ = 0. Z und Σ müssen endliche Mengen sein. z0 ∈ Z ist der Startzustand. E ⊆ Z ist die Menge der Endzustände und δ: Z × Σ → Z heißt Überführungsfunktion. NFA: Ein NFA M wird spezifiziert durch ein 5-Tupel M=(Z, Σ, δ, S, E). Hierbei bezeichnet Z die Menge der Zustände und Σ ist das Eingabealphabet, Z ∩ Σ = 0. Z und Σ müssen endliche Mengen sein. S ⊆ Z ist die Menge der Startzustände. E ⊆ Z ist die Menge der Endzustände und δ: Z × Σ → ℘(Z) heißt Überführungsfunktion. 5.19 Was ist das Wortproblem? Unter dem Wortproblem versteht man, für einen gegeben Grammatik G und ein Wort w entscheiden zu können, ob w ∈ L(G) oder w ∉ L(G). Das Wortproblem ist für alle außer den Typ-0Sprachen entscheidbar. Für kontextsensitive Sprachen gilt |w1| ≤ |w2|, d.h. alle „Zwischenergebnisse“ einer Herleitung können die Länge n haben. Da es nur endliche viele Wörter über (V ∪ Σ)* ist klar, daß man durch systematisches Probieren in endlicher Zeit entscheiden kann, ob ein Wort w in L(G) liegt oder nicht. 5.20 Was ist ein Syntaxbaum? Für die Ableitung eines Wortes w kann ein Syntaxbaum angeben werden. Beispiel: G1 := ({S}, {v,+,(,)}, {S → v, S → S + S, S → (S)}, S) , der Syntaxbaum für das Wort http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 15 von 25 v+(v+v) sieht so aus: S S S S v + ( S S v + v ) 5.21 Was bedeutet Mehrdeutigkeit? Wenn es für eine Wort verschiedene Syntaxbäume gibt, so ist die Grammatik mehrdeutig. 5.22 Was ist BNF? BNF ist Formalismus zum kompakten Niederschreiben von kontextfreien Gramamtiken (eignet sich damit auch für Programmiersprachen), EBNF ist eine erweiterte Form: BNF bzw. EBNF... A → a1 | a2 | ... | a3 A → a[b]c ...steht für A → a1, A → a2,..., A → a3 A → ac A → abc A → a{b}c A → ac A → aBc B→b B → bB Bedeutung klar Das Wort b kann, muß aber nicht zwischen a und c eingefügt werden Das Wort b kann beliebig oft (auch 0-mal) zwischen a und c eingefügt werden 5.23 Abschlußeigenschaften der Sprachen. Typ3 Det. kf. Typ 2 Typ 1 Typ 0 Schnitt ja nein nein ja ja Vereinigung ja nein ja ja ja Komplement ja ja nein ja nein Produkt ja nein ja ja ja Stern ja nein ja ja ja 5.24 Äquivalenz von deterministischer und nichtdeterministischer Version der Automaten. Nichtdet. Automat NFA PDA LBA TM Determ. Automat DFA DPDA DLBA DTM äquivalent? ja nein ? ja 5.25 Wie lautet das Pumping-Lemma für kontextfreie Sprachen? Das Pumping-Lemma wird benutzt um zu Zeigen, daß eine Sprache nicht kontextfrei ist. Es besagt folgendes: Sei L eine kontextfreie Sprache. Dann gibt es eine Zahl n, so daß sich alle Wörter z ∈ L mit |z| ≥ n zerlegen lassen in z = uvwxy, so daß folgende Eigenschaft erfüllt sind: 1. |vx| ≥ 1, 2. |vwx| ≤ n, i i 3. für alle i = 0, 1, 2,... gilt: uv wx y ∈ L http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 16 von 25 5.26 Was ist der CYK-Algorithmus Der CYK-Algorithmus wird benutzt um das Wortproblem bei kontextfreien Sprachen effizient zu lösen, dafür muß die Grammatik in Chomsky Normalform gegeben sein. Die Komplexität des 3 Alogrithmus ist O(n ) 5.27 Was sind deterministisch kontextfreie Sprachen? Sprachen, die von einem deterministischen Kellerautomaten erkannt werden, heißen deterministisch kontextfrei. 5.28 Was ist eine Turingmaschine? Eine Turingmaschine (TM) ist gegeben durch ein 7-Tupel M= (Z, Σ, Γ, δ, z0, , E), hierbei sind Z die endliche Zustandsmenge, Σ das Eingabealphabet, Γ ⊃ Σ das Arbeitsalphabet, z0 der Startzustand, ∈ Γ - Σ das Blank und E ⊆ Z die Menge der Endzustände. Die Überführungsfunktion δ lautet im deterministischen Fall δ: Z × Γ → Z × Γ × {L;R;N} und im nichtdeterministischen Fall δ: Z × Γ → ℘(Z × Γ × {L,R,N}). 5.29 Was ist ein Kellerautomat und wozu braucht man ihn? Ein Kellerautomat ist ein endlicher Automat mit Stack. Er wird beim parsen von Programmiersprachen benutzt, da er Klammerstrukturen und ähnliche Konstrukte erkennen kann. 5.30 Wie kann aus einem Automaten die ε-Übergänge entfernen? Ein Automat kann wie folgt ein drei Schritten ε-frei gemacht werden. Ausgangsautomat: ε, a ε s0 ε ε, a ε, b b s1 s2 ε ε Schritt 1: Zusammenfassen der Knoten, die durch Zyklen verbunden sind, deren Kanten nur mit ε markiert sind, danach sieht der Automat so aus: b ε , a, b b a, b ε, a s0s 1 a s0s 1 s2 k ε s2 ε j s Schritt 2: Weglassen der ε-Schlingen, dadurch entsteht der rechte Automat Schritt 3: Es existiert jetzt ein Knoten k, von dem keine ε-Kanten ausgehen. ε-Kanten, die von j zum Knoten k führen werden ersetzt durch eine Menge von Kanten, die aus sich aus den von k ausgehenden Kanten ergibt. Für jede der Kanten die von k zu einem Zielknoten s ausgeht und mit a markiert ist, wird eine Kante von j nach s mit Markierung a eingeführt. Ist k Endzustand, so wird auch j Endzustand. Daraus ergibt sich der ε-freie Automat: b a, b a s0s1 s2 a, b 5.31 Wie überführt man eine Chomsky-2-Grammatik in einen Kellerautomaten? Mit Hilfe der Greibach Normalform. http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 17 von 25 6. Berechenbarkeit und Entscheidbarkeit 6.1 Was besagt die Churchsche These? Die durch die formale Definition der Turing-Berechenbarkeit (WHILE-Berechenbarkeit, GOTOBerechenbarkeit, µ-Rekursivität) erfaßte Klasse von Funktionen stimmt genau mit der Klasse der im intuitiven Sinne berechenbaren Funktionen überein. 6.2 Welche Bedeutung hat die Turingmaschine? Die Turingmaschine ist ein sehr mächtiges und allgemeines Berechenbarkeitsmodell, siehe Churche These. 6.3 Welche Berechenbarkeitmodelle kennen Sie? Turingmaschine, LOOP, WHILE, primitiv rekursiv, µ-Rekursivität. Turing, WHILE und µRekursivität sind äquivalent, LOOP und primitiv rekursiv sind äquivalent und echte Teilmenge der anderen. GOTO = WHILE = TM = µ− rekursiv 6.4 LOOP= primitiv rekursiv Was sind primitiv rekursive Funktionen? Die Klasse der primitiv rekursiven Funktionen (auf den natürlichen Zahlen) ist induktiv wie folgt definiert: 1. Alle konstanten Funktionen sind primitiv rekrusiv. 2. Alle identischen Abbildungen (Projektionen) sind primitiv rekursiv (Hierunter fällt beispielsweise auch eine dreistellige Funktion, die auf die zweite Komponente abbildet). 3. Die Nachfolgerfunktion s(n) = n +1 ist primitiv rekursiv 4. Jede Funktion die durch Einsetzung von p.r. Funktionen entsteht, ist selbst auch p.r. 5. Jede Funktion die durch primitive Rekursion aus p.r. Funktionen ensteht, ist selbs p.r. Primitive Rekursion bedeutet, daß die Definition von f(n+1,...) zurückgeführt wird auf f(n,...). D.h.f muß ein Gleichungssystem folgender Form erfüllen: f(0,...) = g(...) f(n+1,...) = h(f(n,...),...), wobei g, h p.r. Funktionen sind. Funktionen die nach 1.,2.,3. p.r. sind, nennt man Basisfunktionen. Weitere p.r. Funktionen sind die Addition und die Multiplikation. Beispiel für Addition: add(0,x) = x (identische Abbildung) add(n+1,x) = s(add(n,x)) (s ist Nachfolgerfunktion) 6.5 Was sind µ-rekursive Funktionen? Die Klasse der µ-rekursiven Funktionen stimmt mit den WHILE-, GOTO-, Turingberechenbaren Funktionen überein. Die p.r. Funktionen sind eine echte Teilmenge der µ.r. Funktionen. 6.6 Was ist Semi-Entscheidbarkeit? Eine Menge A ⊆ Σ* ist semi-entscheidbar falls nur die „halbe“ charakteristische Funktion berechenbar ist. 6.7 Was ist das Halteproblem? Das (allgemeine) Halteproblem ist die Sprache: H = {w#x | Mw angesetzt auf x hält}, H ist nicht entscheidbar. Sei K ein Klasse von Automaten. Das Halteproblem für K ist die Frage nach einem Algorithmus, mit dem man für jeden beliebigen Automaten A aus K und jedes Eingabewort x entscheiden kann, ob A bei der Abarbeitung von x nach endlich vielen Schritten stoppt oder nicht. Das Halteproblem für Turingmaschinen ist nicht entscheidbar. 6.8 Was ist die Ackermann-Funktion? Die Ackermann-Funktion ist WHILE-, aber nicht LOOP-berechenbar. http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 18 von 25 6.9 Wieso gibt es nicht berechenbare Funktionen? Es gibt überabzählbar viele Funktionen, aber nur abzählbar viele Rechenverfahren. Die Abzählbarkeit der Rechenverfahren ergibt sich daraus, daß Rechenverfahren durch einen endlichen Text beschrieben werden müssen. 6.10 Kennen Sie nicht berechenbare Funktionen? Das Halteproblem, das Wortproblem für Typ-0-Sprachen, das Postsche Korrespondenz Problem 6.11 Was bedeutet Entscheidbarkeit im Bezug auf Sprachen? Eine Sprache A heißt entscheidbar, wenn sowohl A als auch ¬A semi-entscheidbar sind. D.h. die charakteristische Funktion ist vollständig berechenbar. 6.12 Was ist die (semi-) charakteristische Funktion? Sie A ⊆ Σ*. Die charakteristische Funktion ist definiert als: χA: Σ* → {0,1} w→ 1 falls w ∈ A w→ 0 sonst Die semi-charakteristische Funktion ist definiert als: χ‘A: Σ* → {0,1} w→ 1 falls w ∈ A w→ undefiniert sonst 6.13 Zusammenfassend ergibt sich das folgende Aussagen äquivalent sind: • A ist rekursiv aufzählbar • A ist semi-entscheidbar • A ist vom Typ 0 • A=T(M) für eine Turingmaschine M • χ‘A ist (Turing- WHILE-, GOTO-) berechenbar • A ist Definitionsbereich einer berechenbaren Funktion • A ist Wertebereich einer berechenbaren Funktion 6.14 Entscheibarkeitsprobleme bei Sprachen. WortLeerheits- Äquivalenzproblem problem problem Typ 3 ja ja ja det. kf. ja ja ja Typ 2 ja ja nein Typ 1 ja nein nein Typ 0 nein nein nein Schnittproblem ja nein nein nein nein 6.15 Was ist das Postsche Korrespondenzproblem? + gegeben: Eine endliche Folge von Wortpaaren (x1,y1), (x2,y2),...,(xk,yk), wobei xi,yi ∈ Σ . gefragt: Gibt es eine Folge von Indizes i1,i2,...,in ∈ {1,2,...,k}, n ≥ 1, mit xi1,xi2,...,xin = yi1,yi2,...yin? Beispiel: Das PKP K= ((1,101),(10,00),(011,11)) besitzt die Lösung (1,3,2,3) denn es gilt: x1x3x2x3 = 101110011 = y1y3y2y3 Das PKP ist semi-entscheidbar, das heißt es gibt eine Verfahren, das bei Eingabe die eine Lösung besitzen nach endlichen vielen Schritten stoppt, aber bei Eingaben, die keine Lösung haben nicht stoppt. Damit ist das PKP ist das PKP unentscheidbar, dies gilt sogar auch, wenn man sich auf das Alphabet {0,1} beschränkt. 7. Effiziente Algorithmen und Datenstrukturen 7.1 Welche Sortieralgorithmen kennen Sie? 2 2 2 Insertsort (O(n )), Selectsort (O(n )), Bubblesort (O(n )); Mergesort (O(n⋅log n)), Heapsort (O(n⋅log n)), QuickSort (O(n⋅log n)) http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 19 von 25 7.2 Erklären Sie Quicksort. QuickSort(Sortieren durch zerlegen) ist das in der Praxis schnellste Sortierverfahren. Die Grundidee besteht darin, ein Element x der zu sortierenden Menge M auszuwählen, M in die Teilmengen M< = {u | u<x}, M= = {x} und M> = {u | u > x} zu zerlegen und dann die Gesamtlösung aus den sortierten Einzelmengen zusammenzusetzen. M M< M> x u<x u>x noch zu sortieren QuickSort hat einen durchschnittlichen Aufwand von O(n*ld(n)), im schlimmsten Fall kann er 2 O(n ) betragen. 7.3 Definieren Sie AVL-Bäume. Für alle Knoten x eines AVL-Baumes gilt, daß die Höhe des linken und rechten Unterbaumes von x sich höchstens um 1 unterscheiden. h 1+ 5 h +1 Ein AVL-Baum mit Höhe h enthält mindestens 2 und höchstens 2 viele Knoten. Ein AVL-Baum mit n Knoten hat die Höhe O(log n) ⇒ is_member(k) hat die Laufzeit O(log n). insert(k) und delete(k) haben die Komplexität O(log n). Dies gilt obwohl beim Einfügen und Löschen die Balanciertheit eventuell durch Rotation (bzw. Doppelrotation) wiederhergestellt werden muß. 7.4 Was ist der Warshall-Algorithmus? Der Warshall-Algorithmus löst das All-Pairs Shortest-Path Problem, d.h. er bestimmt den kürzesten Pfad zwischen je zwei Knoten. Der Algorithmus verwendet dynamische Programmierung 3 und hat die Komplexität O(|V| ). for k = 1 to |V| for i = 1 to |V| for j = 1 to |V| // let the shortest distance from i to j be // either the shortest distance from i to k // plus the shortest distance from k to j, // or the current known best distance from i to j // (whichever is smaller) temp = D[i][k] + D[k][j] if temp < D[i][j] then D[i][j] = temp 7.5 Erklären Sie Hashing. Die Hashfunktion h soll is_member effizient unterstützen. h ordnet jedem Element im Universum U ein festen Platz im Speicher zu. Da N >> m gibt es natürlich Mengen S, so daß deren Element auf den gleichen Speicherplatz abgebildet werden, man spricht von Kollisionen. Diese Kollisionen sind zu vermeiden. Hashing ist ein Kompromiß zwischen Zeit- und Platzbedarf. tatsächliche Schlüssel S Speicher M h |S| = n S |M| = m Universum U |U| = N http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 20 von 25 Was sind B-Bäume? B-Bäume sind (a,b)-Bäume mit b= 2a –1. B-Bäume eignen sich sehr gut um Daten zu verwalten die auf langsamen Massenmedien (z.B. Platten) gespeichert sind. Ein B-Baum der Ordnung m hat folgende Eigenschaften: • Jeder Knoten enthält höchstens 2m Schlüssel • Jeder Knoten (mit Ausnahme der Wurzel) enthält mindestens m Schlüssel • Ein Knoten mit k Schlüsseln hat genau k +1 oder 0 Söhne • Alle Blätter befinden sich auf dem selben Niveau • Suchbaumeigenschaft: Sind s1,s2,...,sk mit m ≤ k ≤ 2m die Schlüssel eines Knoten x, dann sind alle Schlüssel des ersten Sohnes von x kleiner als s1, und alle Schlüssel des (k+1)-ten Sohnes größer als sk und alle Schlüssel des i-ten Sohnes (1 < i < k+1) größer als si-1 und kleiner als si. Die Operation is_member, insert und delete haben die Komplexität logm+1 n. Ein B-Baum der Ordnung 2: 7.7 Welchen Aufwand hat Hashing? Die Tabelle zeigt die erwartete Anzahl der Proben beim erfolgreichen (S) und erfolglosen (U) Suchen in Abhängigkeit vom Belegungsfaktor λ = n/m. 101 108 122 135 69 83 41 45 50 8 16 24 31 57 100 7.6 0.25 0.5 0.75 0.9 0.95 0.99 λ 1.3 2.0 4.0 10.0 20.0 100.0 U(λ) 1.4 1.8 2.6 3.2 4.7 S(λ) 1.2 D.h. falls erfolgloses Suchen oft Auftritt, sollte die Tabelle nicht mehr als 75% gefüllt sein. 7.8 Welche Möglichkeiten gibt es Kollisionen beim Hashing zu vermeiden? • Verketten: Die Hashfunktion zeigt auf die Köpfe von Listen, in den die Daten abgelegt werden. • lineares Sortieren: Wird ein Element auf den i-ten Speicherplatz in M abgebildet und dieser ist bereits belegt, so wird es im (i+1)-ten Speicherplatz abgelegt. Diese Methode eignet sich nur falls m >> s • doppeltes Hashen: das Inkrement, das beim linearen Sortieren 1 ist wird über eine zweite Hashfunktion bestimmt. Diese Methode eignet sich nur, wenn keine deleteAnweisungen benötigt werden 7.9 Was ist Union-Find und wozu braucht man es? Gegeben sei eine endliche Menge S, die in Klassen Xi partitioniert ist: S = X1 ∪ X2 ∪...∪ Xl, für jede Klasse Xi, gibt es einen Repräsentanten ri ∈ Xi. Union-Find ist eine Datenstruktur, die folgende Operationen unterstützt: • Init(S): jedes Element bildet eine eigene Klasse mit sich selbst als Repräsentanten • Union(r,s): Vereinige die beiden Klassen den Repräsentanten r und s, wähle r als neuen Repräsentanten • Find(x): Bestimme zu x ∈ S den Repräsentanten der Klasse, die x enthält. Beispiel: http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 21 von 25 Klasse a b c f Union (c,g) e d h g c d g a b f e h Repräsentant Realisiert wird Union-Find als Vereinigung von zur Wurzel hin gerichteter Bäume. Dabei bilden die Repräsentanten die Wurzel und die restlichen Element der Klasse die restlichen Knoten. Wozu? Union-Find kann z.B. für eine effizient Implementierung von Kruskals Algorithmus für den minimalen Spannbaum verwenden. 7.10 Was ist ein greedy Algorithmus? Gierige Algorithmen verwenden eine lokale Bewertungsfunktion um die Qualität des gegenwärtigen Zustandes zu messen. Sie erzeugen danach Nachbarzustände und schreiten zu dem vor, der in einem einzigen Schritt den größten Gewinn verspricht. Gierige Algorithmen beenden die Suche in einem lokalen Optimum. Bei manchen Problemen ist dieses lokale Optimum auch ein globales Optimum. 7.11 Welche Komplexität hat die Suche nach einem Schlüssel in einem balancierten Binärbaum? Die Suche hat die Komplexität O(log n). 7.12 Was ist ein (a,b)-Baum? Ein (a,b)-Baum ist ein Suchbaum, so daß gilt: • alle Blätter haben gleiche Tiefe • Schlüssel sind nur in Blättern gespeichert (externer Suchbaum) • ∀ Knoten v außer der Wurzel und Blättern: a ≤ # Kinder(v) ≤ b • für Wurzel 2 ≤ # Kinder ≤ b • b ≥ 2a – 1 • für alle inneren Knoten v gilt: hat v l Kinder, so sind in v l – 1 Werte k1,...,kl-1 gespeichert und es gilt: ki-1 < key(w) ≤ ki ∀ Knoten w im i-ten Unterbaum von v (wobei k0 = -∞, kl = +∞) Es gilt: logb (n) ≤ Höhe H loga (½). In einem (a,b)-Baum gilt: is_member(k), insert(k), delete(k) haben die Komplexität O(log H). Die Wahl von a und b hängt wesentlich von der Größe des (a,b)-Baumes ab. Allgemein gilt: • Liegt der Baum im RAM, wählt man b klein, dadurch hat man geringe Kosten für das finden des „richtigen“ Teilbaumes. • Liegt der Baum auf Sekundärspeichern, wählt man a groß. Der Baum hat dann geringe Höhe, dadurch ist die Anzahl der Zugriffe auf den Sekundärspeicher gering. 7.13 Was ist ein Wörterbuch? Ein Wörterbuch ist eine Datenstruktur in der große Datenmengen gespeichert werden können und die die Funktionen is_member(k), insert(k) und delete(k) unterstützt. die einzelnen Datensätze werden durch einen Schlüssel (String, Integer,...) referenziert. Zur Realisierung werden entweder Suchbäume oder Hashing verwendet. 7.14 Was ist ein binärer Suchbaum? Ein Baum in dem für jeden Knoten x gilt: • key(x) > größter Schlüssel im linken Unterbaum von x • key(x) < kleinster Schlüssel im rechten Unterbaum von x Zeitkomplexität: is_member(k): O(log n), insert(k): O(log n), delete(k): O(log n), trotz Reorg. Damit der Baum effizient ist, muß er möglichst gut balanciert sein. 7.15 Was ist eine Vorrangwarteschlange (Priority Queue)? Das ist eine Datenstruktur die folgende Operationen unterstützt: • Insert • DeleteMin finden und löschen des Elementes mit dem kleinsten Schlüssel http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 22 von 25 • DecreaseKey Verkleinern eines Schlüssels • Union Vereinigung zweier Datenstrukturen Vorrangwarteschlange kann als Binomial Heap oder besser als Fibonacci Heap realisert werden. 7.16 Was muß eine Hash-Funktion leisten? Sie sollte die Hash-Adressen gleich-verteilen und jede Ordnung innerhalb der Daten zerstören (Randomisierung). 7.17 Was ist ein Binomial-Baum? Ein Baum mit einem Knoten ist der Binomial-Baum B0. Entsprechend ist der Binomial-Baum mit zwei Knoten der B1. Man erhält den Binomial-Baum Bk, indem man die Wurzeln der zwei Binomial-Bäume Bk-1 mit einer Kante verbindet. Es gilt ebenso, daß man Bk erhält, wenn man die Wurzeln der Binomial-Bäume Bk-1...B0 mit einem neuen Wurzelknoten verbindet. B0 B1 B2 B3 Bk B k-1 Bk B k-1 B k-1 B k-2 B2 B1 B0 Für einen Binomial-Baum Bk gilt: k • er enthält 2 Knoten, Höhe k • es gibt genau k Knoten mit Tiefe i i • die Wurzel hat Grad k, alle anderen haben Grad ≤ k –1 7.18 Was ist ein Binomial-Heap? Ein Binomial-Heap ist eine Menge H von Binomial-Bäumen so dass gilt: 1. jeder Biomial-Baum ∈ H erfüllt die Heap-Bedingung: key(x) ≤ key(y) ∀ x,y mit y ist Vater von x 2. ∀ k ∈ N: H enthält höchstens einen Bk Aus Eigenschaft (2) folgt, Sind in H n Schlüssel gespeichert, so besteht H aus höchstens log n vielen Bäumen. Aus Eigenschaft (1) folgt: In jedem Baum ist der kleinste Schlüssel in der Wurzel gespeichert. Komplexität: • Insert(H,k): O(log(# Schlüssel in H)) • DeleteMin(H): O(log(#Schlüssel in H)) • Union(H1,H2): O(log(# Schlüssel in H1) + log(# Anzahl Schlüssel in H2)) • DecreaseKey(H,x,k): O(log(# Schlüssel in H) 7.19 Beschreiben Sie Insert Sort. Beim Sortieren durch Einfügen, nimmt man die Elemente einer Liste und fügt sie in eine zweite 2 (anfangs leere) Liste an der richtigen Stelle ein. Zeitkomplexität t(n)=O(n ) 7.20 Beschreiben Sie Bubble Sort. Beim Sortieren wird das ganze Feld immer wieder von vorne nach hinten durchsucht und benachbarte Zahlen werden vertauscht, wenn Sie in der falschen Reihenfolge stehen. Offensichtlich kommt die gößte Zahl bereits im ersten Schritt ganz nach hinten, so daß man im nächsten Schritt nur noch bis zum vorletzten Feld vergleichen muß. Somit ergibt sich auch, wann man abbrechen kann. Zusätzlich kann man nach jeden Ablauf abfragen, ob überhaupt getauscht 2 wurde, und andernfalls abbrechen. Die Zeitkomplexität beträgt t(n)=O(n ) 7.21 Beschreiben Sie Merge Sort. Auch damit läßt sich ein Sortieralgorithmus beschreiben. Man teilt das Feld zunächst in zwei (etwa) gleichgroße Hälften und läßt jede für sich (nach diesem Algorithmus) sortieren. Dann fügt man die beiden Hälften nach dem Mischalgorithmus zusammen und erhält somit das sor- http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 23 von 25 tierte Feld. Als Spezialfall ergibt sich hier, daß ein Feld der Größe 1 bereits sortiert ist. Die Zeitkomplexität beträgt t(n)=O(n ⋅ log n) 7.22 Beschreiben Sie Heap sort. Ein Baum B heißt Heap, wenn für alle Knoten des Baumes k Pk gilt: Pk : k ≥ k.l ∧ k ≥ k.r, also k ≥ max(k.l,k.r), soweit k.l und k.r existieren, wobei k.l und k.r die Söhne von k sind. Wir nehmen an wir können die Liste M durch einen Heap repräsentieren. Die Wurzel w=k0 ist somit das Element mit maximalen Schlüssel. Zur Bestimmung des zweitgrößten Elements benötigen wir nur einen einzigen Vergleich unter den beiden Söhnen der Wurzel. Nehmen wir fortlaufend die Wurzel w aus B heraus und fügen sie in eine neue Liste L ein, so ist B kein Heap mehr (B ist nicht mal mehr ein Baum). Wir müssen B wieder zum Heap umformen (sinken), dann können wird den Vorgang wiederholen. Zeitkomplexität t(n)=O(n*ld(n)) 8. Komplexitätstheorie 8.1 P und NP Problemklassen? P ist die Klasse der Problem die eine deterministische Turingmaschine in polynomieller Zeit lösen kann P= U DTIME ( p(n)) . p Polynom NP ist die Klasse der Problem die eine nicht-deterministische Turingmaschine in polynomieller Zeit lösen kann NP = U NTIME ( p(n)) . p Polynom 8.2 Was bedeutet NP-Vollständigkeit? Eine Sprache (Problem) L ist NP-vollständig, wenn gilt: • L ∈ NP • für alle Sprachen L‘ ∈ NP gilt: L‘ ≤ L, d.h. jede Sprache L‘ aus NP ist polynomiell reduzierbar auf L 8.3 Was ist das Traveling Salesman Problem? Ein Handlungsreisender soll n Städte nacheinander besuchen, aber jede nur einmal. Am Ende der Reise soll er wieder in seiner Ausgangsstadt ankommen. Sei p eine vorgegebene Schranke. Gibt es einen Rundweg der kleiner oder gleich p. Oder, wie lang ist die kürzeste Route? Das Handlungsreisenden-Problem ist NP-vollständig. Näherungslösung mit branch&bound oder einem gierigen Algorithmus. 8.4 Kann es effiziente Algorithmen für NP-vollständige Probleme geben? Höchstwahrscheinlich nicht aber falls P = NP sein sollte, wäre dies möglich. 8.5 Was ist branch&bound? Branch&bound ist eine Methode zur Lösung NP-vollständiger Probleme, die aus dem Backtracking abgeleitet ist. Ein Optimierungsproblem wird dabei nach gewissen Regeln schrittweise in Teilprobleme zerlegt (branch). Die einzelnen Probleme bilden einen Baum. Jedem Knoten des Baumes wird ein Wert zugewiesen, der eine Schranke (bound) für den Wert der Zielfunktion des Optimierungsproblems darstellt. Es werden nun zunächst diejenigen Zweige, die den größtmöglichen Zielfunktionswert erwarten lassen. Nach Bearbeitung eines Zweiges werden alle Zweige desselben Teilbaumes vom Gesamtbaum entfernt, deren Schranke unterhalb des bereits besten Wertes der Zielfunktion liegt. Die Leistungsfähigkeit des branch&bound-Verfahrens hängt entscheidend von der Geschwindigkeit und Genauigkeit ab, mit der die Schranken berechnet werden. Ist die Genauigkeit gering, müssen im schlimmsten Fall trotzdem alle Teilprobleme bearbeitet werden. Das branch&bound-Verfahren wird z.B. beim HandlungsreisendenProblem eingesetzt. 8.6 Nennen Sie NP-vollständige Probleme. • Färbungsproblem • Hamiltonsches Problem • Rucksackproblem • Problem des Handlungsreisenden http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 24 von 25 • Erfüllbarkeitsproblem • Cliquenproblem 8.7 Was ist Backtracking? Backtracking ist ein Lösungsverfahren für NP-vollständige Probleme. Man versucht Teillösungen eines Problems systematisch zur Gesamtlösung auszubauen. Falls in einem gewissen Stadium ein Ausbau einer Teillösung nicht mehr möglich ist (Sackgasse), werden einer oder mehrere Schritte der bisherigen Lösung rückgängig gemacht. Dieses verfahren wird angewendet, bis man eine Lösung gefunden hat oder erkennt, daß es keine gibt. Da die Rechenzeit exponentiell mit der Suchtiefe anwächst, eignen sich Backtracking-Verfahren, wenn man vorab möglichst viele Sackgassen ausschließen kann (branch&bound). 8.8 Was ist dynamisches Programmieren? Wenn man zur Lösung eines Problems, das Problem in Teilprobleme zerlegt um die Gesamtlösung aus den Teillösungen zusammenzusetzen und die Teilprobleme nicht wie bei Divide&Conquer unabhängig sind, so bietet sich dynamische Programmierung an. Bei der dynamischen Programmierung speichert man bereits berechnete Lösungen in einer Tabelle ab, um Mehrfachberechnung zu vermeiden. Dies erhöht den Speicheraufwand. Dynamische Programmierung wird z.B. beim Rucksackproblem und beim Warschall-Algorithmus verwendet. 8.9 Geben Sie einen grafischen Überblick über NP,P, LOOP-berechenbar usw. semi-entscheidbar entscheidbar LOOP-berechenbar NP-vollständig NP P http://www.deissenboeck.de/faqs Info- DVP 2-Faq v1.0 [5.09.2000] Seite 25 von 25