Sortieralgorithmen mit Prolog

Aus Informatik
Wechseln zu: Navigation, Suche

Sortierverfahren gehören zum klassischen Bestand der Informatik und sind daher auch Bestandteil des Informatikunterrichts, u. a. im Bereich Objektorientierte Modellierung. Die Grundideen einiger Sortierverfahren lassen sich allerdings auch in Prolog sehr elegant ausdrücken. Wir werden uns hier allerdings auf das Sortieren von Zahlenlisten beschränken.

Liste von Zufallszahlen

Beim Testen der zu entwickelnden Sortierverfahren wird es auf Dauer mühselig und ineffektiv sein, die zu ordnenden Listen immer explizit einzugeben. Daher soll hier ein Prädikat randomliste geschaffen werden, welches Zufallslisten erzeugt.

Zufallszahlen

SWI-Prolog bietet von Haus aus die Möglichkeit, Zufallszahlen (und auch Listen mit Zufallszahlen) zu erzeugen:

Prädikat Beschreibung
random(-Z) Es wird eine rationale Zufallszahl Z generiert mit 0 <= Z < 1.
random(+L,+H,-Z) Es wird eine ganzzahlige Zufallszahl Z generiert mit L < Z < H.
randset(+S,+M,-L) Es wird eine sortierte Liste L mit ganzzahligen Zufallszahlen erzeugt. S gibt die Anzahl der Elemente an und M das wertige Maximum jeder Zufallszahl.

Weshalb müssen wir uns nun noch eine neues Prädikat randomliste erarbeiten? Nach einem kurzen Test des Prädikats randset sollte die Antwort nicht schwer fallen ...

Das Prädikat random/3 soll aber im Weiteren Verlauf Verwendung finden.

Liste von Zufallszahlen

Nun benötigen wir nur noch ein Prädikat, welches für eine bestimmten Maximalwert H und eine gewünschte Anzahl S eine Liste zufälliger Zahlen erstellt:

% randomliste(+S,+H,-L) -- Liste von Zufallszahlen der Mächtigkeit S und H als Maximalwert
randomliste(0,_,[]).
randomliste(N,H,[Z|Zs]) :-
  N > 0,
  N1 is N - 1,
  random(0,H,Z),
  randomliste(N1,H,Zs).

Prädikat sort

SWI-Prolog besitzt ein Standard-Prädikat sort, welches Listen sortiert. Uns geht es an dieser Stelle allerdings darum, die klassischen (schon bekannten) Sortierverfahren in Prolog umzusetzen.

Sortierverfahren

Folgende Sortierverfahren werden diskutiert:

Bubblesort
Insertionsort
Selectionsort
Quicksort