0 Daumen
804 Aufrufe

Aufgabe:

Distanzen spielen in der Graphentheorie eine sehr große Rolle. In dieser Aufgabe wollen wir einen Algorithmus entwerfen, der den Durchmesser eines Graphen bestimmt, d.h. die maximale kürzeste Distanz zwischen zwei Knoten. Dazu definieren wir folgendes.

 • Die Distanz dist(v, w) zwischen zwei Knoten v, w ∈ V im einem Graphen G ist die Anzahl an Kanten auf einem kürzesten Weg zwischen v und w in G. Gibt es keinen Weg zwischen v und w, so ist dist (v, w) = ∞.

• Die Erzentrizität ex(v) eines Knotens v E V bezeichnet die Länge eines kürzesten Pfades zu dem am weitesten entfernten Knoten, d.h. ex(v) := maxw∈v  (dist (v, w).

• Der Durchnesser eines Graphen G entspricht dem Maximum über die Exzentrizitäten, d.h. diam(G):= maxv∈V (ex(v)).


Entwirf einen Algorithmus EXZENTRIZITÄT in Pseudocode (maximal 10 Zeilen') mit Laufzeit O(n + m), der für einen gegebenen Graphen G und Knoten v ∈ V den Wert ex(v) bestimmt. Begründe kurz, warum die Laufzeit eingehalten wird.

20211218_085449.jpg

Abbildung: Darstellung des Graphen \( H \).

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Begründung der Laufzeit

Um die Aufgabe und die dazugehörige Laufzeitbegründung bearbeiten zu können, beginnen wir mit dem Entwurf eines Algorithmus namens EXZENTRIZITÄT. Da der Algorithmus die Exzentrizität eines Knotens in einem Graphen bestimmen soll, können wir eine Breitensuche (Breadth-first search, BFS) als Grundlage nehmen. Diese Wahl ist dadurch begründet, dass eine BFS von einem Startknoten \(v\) aus die kürzesten Wege zu allen erreichbaren Knoten des Graphen findet. Die BFS hat eine Laufzeit von \(O(n + m)\), wobei \(n\) die Anzahl der Knoten und \(m\) die Anzahl der Kanten im Graphen \(G\) ist. Der Grund für diese Laufzeit ist, dass jeder Knoten und jede Kante genau einmal besucht wird.

Pseudocode für Algorithmus EXZENTRIZITÄT

plaintext
Algorithmus EXZENTRIZITÄT(G, v):
1. Erstelle ein Array DIST mit Länge n, initialisiere jedes Element mit ∞
2. DIST[v] = 0 // Distanz von v zu sich selbst ist 0
3. Erstelle eine Queue Q und füge v hinzu
4. Solange Q nicht leer ist:
   4.1. Entferne den Knoten u von Q
   4.2. Für jeden Nachbarn w von u:
        4.2.1. Wenn DIST[w] = ∞:
              a. DIST[w] = DIST[u] + 1 // Setze die Distanz von v zu w
              b. Füge w zu Q hinzu
5. maxDistanz = max(DIST)
6. Gib maxDistanz zurück // Dies ist die Exzentrizität ex(v)


Begründung warum die Laufzeit \(O(n + m)\) eingehalten wird:

- Zeile 1-2: Die Initialisierung des Arrays und das Setzen eines einzelnen Werts benötigen lediglich \(O(n)\) Zeit.
- Zeile 3: Das Erstellen der Queue und das Hinzufügen eines Elements ist in \(O(1)\).
- Zeile 4-4.2.1b: Die Breitensuche iteriert über jeden Knoten und jede Kante genau einmal. Für jeden Knoten \(u\), wird für jeden seiner Nachbarn \(w\) geprüft, ob \(w\) schon besucht wurde (d.h., ob DIST[w] \(=\infty\)). Da jeder Knoten und jede Kante nur einmal in die Queue aufgenommen und untersucht wird, benötigen wir insgesamt \(O(n + m)\) Zeit.
- Zeile 5-6: Die Berechnung des Maximums des Arrays DIST benötigt \(O(n)\), da alle \(n\) Elemente überprüft werden müssen.

Zusammengenommen erfordern die Operationen des Algorithmus EXZENTRIZITÄT insgesamt eine Laufzeit von \(O(n + m)\), da die Schritte, die mehr als konstante Zeit benötigen (Breitensuche und Maximumsfindung), jeweils \(O(n)\) und \(O(n + m)\) Zeit benötigt. Die Laufzeit von \(O(n + m)\) wird somit eingehalten.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community