Aufgaben zur Veranstaltung Algorithmen und Datenstrukturen, SS 2017 H. Pflug, J. Poniatowski FH Aachen, Campus Jülich; IT Center, RWTH Aachen Übungsblatt 3 18.04.2017 Präsenzaufgaben Aufgabe 1 Hashtabelle Setzen Sie die folgenden Zahlen in die untenstehende, bereits teilweise gefüllte Hashtabelle mit 20 Elementen ein. Die Hashfunktion ist h(x)=x%20. Benutzen Sie a) Lineare Sondierung b) Quadratische Sondierung c) Doppeltes Hashing. Die zweite Hashfunktion ist ℎ2 (𝑥) = ⌊ 𝑥 ⌋ (also die 100 erste der drei Ziffern der Zahl) Die Zahlen sind: 400, 212, 734, 161, 358 Index Lineare Sondierung Quadratische Sondierung Doppeltes Hashing 0 220 220 220 1 541 541 541 464 464 464 249 249 249 12 492 492 492 13 573 573 573 14 974 974 974 15 695 695 695 16 336 336 336 479 479 479 2 3 4 5 6 7 8 9 10 11 17 18 19 Aufgabenblatt Algorithmen und Datenstrukturen Aufgabe 2 SS 17; H. Pflug, J. Poniatowski Kreuzworträtsel Eine Anzahl vorgegebener Worte soll zu einem möglichst kompakten Kreuzworträtsel zusammengesetzt werden. Alle Worte müssen miteinander in Verbindung stehen. Beispiel: Die Worte ANANASSALAT, ARBEITSABLAUFPLAN, BANANENSCHALE, DATENAUTOBAHN und NACHRICHTENSATELLIT lassen sich am kompaktesten wie unten gezeigt anordnen (11x19=209 Felder). BANANENSCHALE∙∙∙∙∙∙ ∙N∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ DATENAUTOBAHN∙∙∙∙∙∙ ∙N∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ NACHRICHTENSATELLIT ∙S∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ ∙S∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ ∙ARBEITSABLAUFPLAN∙ ∙L∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ ∙A∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ ∙T∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ Der eigentliche Algorithmus benötigt Backtracking, was noch nicht Teil der Vorlesung war. In dieser Aufgabe geht es nur darum, in welcher Datenstruktur man das Kreuzworträtsel am besten abgelegt. Folgende Operationen müssen auf dieser Datenstruktur möglichst effizient funktionieren: Das Anfügen neuer Wörter. Das Kreuzworträtsel kann sich dabei in alle Richtungen ausdehnen. Das Auslesen des Felds an einer Koordinate (x/y). Die Bestimmung der Größe des aktuellen Kreuzworträtsels. Für den Backtracking-Algorithmus muss man außerdem ein bereits eingesetztes Wort auf dem Koordinatensystem lokalisieren können. Welche Datenstruktur kann diese Möglichkeiten effizient bieten? Felder? Dynamische Felder (ArrayLists)? Verkettete Listen? Zirkuläre Felder? Hashtabellen? Speichert man besser wort- oder buchstabenweise ab? Berücksichtigen Sie auch Probleme, die sich eventuell bei der Größenbestimmung des Rätsels ergeben. 2