Heuristiken

Werbung
Heuristiken
Problem TSP Ein Handlungsreisender hat n Städte zu besuchen, jede Stadt dabei genau einmal, und kehrt danach wieder zur Ausgangsstadt zurück. Die Reiselänge (-zeit, -kosten) ist zu
minimieren.
Algorithmus SB
Eingabe Ein Graph G, der die Dreiecksungleichung erfüllt.
Schritt 1 Bestimme ein Minimalgerüst T für G.
Schritt 2 Verdopple alle Kanten von T und erhalte so einen eulerschen Graphen.
Schritt 3 Bestimme eine Eulertour in G.
Schritt 4 Streiche aus der Eulertour alle doppelt besuchten Knoten und erhalte eine TSP-Tour.
Ausgabe Eine TSP-Tour.
Algorithmus NEAREST INSERTION
Eingabe Ein Graph G, der die Dreiecksungleichung erfüllt.
Schritt 1 Starte mit einer beliebigen Stadt s1 und setze k = 1, T1 = (s1 ).
Schritt 2 Sei Tk = (s1 , s2 , . . . , sk , s1 ) die aktuelle (Teil)Tour mit k Städten. Wähle eine Stadt sk+1 , die
noch nicht zu Tk gehört, und eine Stadt si aus Tk , so dass d(si , sk+1 ) minimal ist. Streiche
eine der Kanten von Tk , die mit si inzidieren und verbinde deren Endknoten mit sk+1 . Füge
sk+1 zu Tk hinzu und setzte k = k + 1.
Schritt 3 Ist k < n gehe zu Schritt 2, sonst STOP.
Ausgabe Eine TSP-Tour.
Algorithmus NEAREST NEIGHBOUR
Eingabe Ein Graph G, der die Dreiecksungleichung erfüllt.
Schritt 1 Starte mit einer beliebigen Stadt s1 und setze k = 1, T1 = (s1 ).
Schritt 2 Sei Tk = (s1 , s2 , . . . , sk ) der aktuelle Weg mit k Städten. Wähle eine Stadt sk+1 , die noch
nicht zu Tk gehört, so dass d(sk , sk+1 ) minimal wird. Verbinde sk mit sk+1 und füge sk+1
zu Tk hinzu. Setze k = k + 1.
Schritt 3 Ist k < n gehe zu Schritt 2, sonst verbinde s1 mit sn und STOP.
Ausgabe Eine TSP-Tour.
Problem VC In einem Graphen G = (V, E) soll eine Teilmenge C der Knotenmenge V so bestimmt werden, dass für jede Kante e = {x, y} ∈ E gilt, x ∈ C ∨ y ∈ C.
Algorithmus LARGEST DEGREE / MAXIMUM DEGREE
Eingabe Ein Graph G.
Schritt 1 Setze C = ∅.
Schritt 2 Wähle einen Knoten v ∈ V mit maximalem Knotengrad und füge ihn zu C hinzu. Lösche v
und alle zu ihm inzidenten Kanten aus G.
Schritt 3 Ist E 6= ∅ gehe zu Schritt 2, sonst STOP.
Ausgabe Eine Knotenüberdeckung C.
Problem MM In einem Graphen G = (V, E) soll eine Teilmenge M der Kantenmenge E so
bestimmt werden, dass für jeden Knoten v ∈ V eine zu v inzidente Kante in M existiert.
Algorithmus APPROX-MATCHING
Eingabe Ein Graph G mit V = {v1 , v2 , . . . , vn }.
Schritt 1 Setze M = ∅ und i = 1.
Schritt 2 Gibt es eine Kante e = {vi , w}, welche mit keiner Kante aus M einen gemeinsamen Knoten
hat, füge e zu M hinzu. Setze i = i + 1.
Schritt 3 Ist i < n gehe zu Schritt 2, sonst STOP.
Ausgabe Ein gesättigtes Matching M .
Problem Bin Packing Gegeben ist eine Menge von Gütern {a1 , . . . , an }, die in Kisten Bj verpackt werden soll.
PDabei sind die ai ∈ Q ∩ (0, 1] Gewichte und es gilt für alle in die Kiste Bj
gepackten Güter ai ∈Bj ai ≤ 1. Es ist also eine Partition {B1 , . . . , Bk } der ai ’s so zu finden, dass
k minimal wird.
NEXT FIT
Eingabe {a1 , . . . , an } mit ai ∈ Q ∩ (0, 1].
Schritt 1 Setze j = 1, i = 1.
Schritt 2 Sei Bj die zuletzt befüllte Kiste. Dann packe ai in Bj , falls |Bj | + ai ≤ 1, sonst packe ai in
Bj+1 und setze j = j + 1.
Schritt 3 Falls i < n, setze i = i + 1 und gehe zu Schritt 2, sonst STOP.
Ausgabe Eine Partition {B1 , . . . , Bk } der ai ’s.
Problem Knotenfärbung Die Knoten eines Graphen G sollen so gefärbt werden, dass adjazente
Knoten unterschiedlich gefärbt sind. Gesucht ist die kleinst mögliche Anzahl von benötigten
Farben.
Damit ein approximierender Algorithmus möglich ist, betrachten wir nicht das eigentliche Minimierungsproblem, sondern das folgende Maximierungsproblem: Zur Färbung eines Graphen
G mit n Knoten haben wir n Farben zur Verfügung. Ziel ist es nun möglichst viele der Farben
nicht zu benutzen, also ein c zu finden, sodass n − c maximal wird und G mit c Farben färbbar
ist. Daraus ergibt sich, dass OP T (G) = n − χ(G) und für einen Färbungsalgorithmus A, der
χA (G) Farben verwendet, ist A(G) = n − χA (G). Somit berechnet sich die Approximationsgüte
n−χ(G)
T (G)
aus OP
A(G) = n−χA (G) .
Algorithmus 1
Eingabe Ein Graph G mit n Knoten.
Schritt 1 Bestimme im Komplementärgraphen G ein gesättigtes Matching M mit |M | = z.
Schritt 2 Sei M = {e1 , . . . , ez }, dann färbe die Endknoten jeder Kante ei mit der Farbe i.
Schritt 3 Färbe die restlichen Knoten in G paarweise disjunkt mit den Farben {z + 1, . . . , n − z}.
Ausgabe Eine Knotenfärbung des Graphen G mit n − z Farben.
Algorithmus 2 nach R. Hassin und A. Lahar
Eingabe Ein Graph G mit n Knoten.
Schritt 1 Bestimme eine nicht erweiterbare Menge Z von disjunkten, 3-elementigen, unabhängigen
Mengen in G (|Z| = z). Die Menge der restlichen Knoten in G sei X.
Schritt 2 Bestimme in maximales Matching M in G[X]
Schritt 3 Sei M = {e1 , . . . , ek }, dann färbe die Endknoten jeder Kante ei mit der Farbe i.
Schritt 4 Färbe alle verbleibenden Knoten in X mit den Farben {k + 1, . . . , x}, wobei x = χ(G[X]).
Schritt 5 Färbe alle Knoten aus jeder unabhängigen Menge in Z so, dass Knoten aus verschiedenen
Mengen in Z unterschiedlich gefärbt sind.
Ausgabe Eine Knotenfärbung des Graphen G mit x + z Farben.
Herunterladen