Randomisierter Minidisc Algorithmus in O(n)Gegeben: n Punkte in Euklidischer Ebene Gesucht: kleinerster Kreis, der alle Punkte enthält Der Algorithmus funktioniert wie folgend: |
Zunächst bestimme Permutation aller Punkte. Finde Minidisc der zwei ersten Punkte (trivial). Für alle Punkte 1..n ist entweder pi schon in der aktuellen Minidisc enthalten oder er muss auf dem Rand einer MD liegen, der alle bisherigen Punkte enthält -> Rufe MD1P({p1,...,pi-1},pi) auf. MD1P(P',fester Punkt p)Zunächst bestimme Permutation aller Punkte aus P'.Finde Minidisc von p1 und p. Für alle Punkte aus P': p2..pn ist entweder pi schon in der aktuellen Minidisc enthalten oder er muss auf dem Rand einer MD liegen, der alle bisherigen Punkte enthält und auf deren Rand p liegt -> Rufe MD2P({p1,...,pi-1},pi,q) auf. MD2P(P'',feste Punkte p,p')Zunächst bestimme Permutation aller Punkte aus P''.Finde Minidisc von p und p'. Für alle Punkte aus P'': p1..pn ist entweder pi schon in der aktuellen Minidisc enthalten oder die MD ist definiert durch pi,p,p'. |
Den Algorithmus kann man gleich anhand eines Applets nachvollziehen:
|