TU Wien:Algorithmen und Datenstrukturen VU (Szeider)/Algorithmen als Pseudocode
Zur Navigation springen
Zur Suche springen
Selectionsort[Bearbeiten | Quelltext bearbeiten]
Selectionsort(A): for i ← 0 bis n − 2 smallest ← i for j ← i + 1 bis n − 1 if A[j] < A[smallest] smallest ← j Vertausche A[i] mit A[smallest]
Insertionsort[Bearbeiten | Quelltext bearbeiten]
Insertionsort(A): for i ← 1 bis n − 1 key ← A[i], j ← i − 1 while j ≥ 0 und A[j] > key A[j + 1] ← A[j] j ← j − 1 A[j + 1] ← key
Breitensuche[Bearbeiten | Quelltext bearbeiten]
Implementierung: Graph G = (V,E), Startknoten s, Array Discovered, Queue Q.
BFS(G,s): Discovered[v] ← false für alle Knoten v ∈ V Discovered[s] ← true Q ← {s} while Q ist nicht leer Entferne ersten Knoten u aus Q Führe Operation auf u aus foreach Kante (u,v) inzident zu u if !Discovered[v] Discovered[v] ← true Füge v zu Q hinzu
Tiefensuche[Bearbeiten | Quelltext bearbeiten]
Implementierung: Graph G = (V,E), Startknoten s, globales Array Discovered.
DFS(G,s): Discovered[v] ← false für alle Knoten v ∈ V DFS1(G,s) DFS1(G,u): Discovered[u] ← true Führe Operation auf u aus foreach Kante (u,v) inzident zu u if !Discovered[v] DFS1(G,v)
Dijkstra[Bearbeiten | Quelltext bearbeiten]
Dijkstra(G,s): Discovered[v] ← false für alle Knoten v ∈ V d[s] ← 0 d[v] ← ∞ für alle anderen Knoten v ∈ V \ {s} L ← V while L ist nicht leer wähle u ∈ L mit kleinstem Wert d[u] lösche u aus L Discovered[u] ← true foreach Kante e = (u,v) ∈ E if !Discovered[v] d[v] ← min(d[v],d[u]+‘e)
Heapify-up[Bearbeiten | Quelltext bearbeiten]
Heapify-up(H,i): if i > 1 j ← ⌊i/2⌋ if H[i] < H[j] Vertausche die Array-Einträge H[i] und H[j] Heapify-up(H,j)
Heapify-down[Bearbeiten | Quelltext bearbeiten]
Heapify-down(H,i): n ← length(H)-1 if 2 · i > n return elseif 2 · i < n left ← 2 · i, right ← 2 · i + 1 j ← Index des kleineren Wertes von H[left] und H[right] else j ← 2 · i if H[j] < H[i] Vertausche die Arrayeinträge H[i] und H[j] Heapify-down(H,j)
Prim[Bearbeiten | Quelltext bearbeiten]
Annahme: Alle Kantengewichte sind unterschiedlich.
Prim(G, c): foreach (v ∈ V ) A[v] ← ∞ Initialisiere eine leere Priority Queue Q foreach (v ∈ V ) Füge v in Q ein S ← ∅ while Q ist nicht leer u ← entnehme minimales Element aus Q S ← S ∪ {u} foreach Kante e = (u, v) inzident zu u if v ∉ S und ce < A[v] Verringere die Priorität A[v] auf ce
Mergesort[Bearbeiten | Quelltext bearbeiten]
Merge(A,l,m,r): i ← l, j ← m + 1, k ← l while i ≤ m und j ≤ r if A[i] ≤ A[j] B[k] ← A[i], i ← i + 1 else B[k] ← A[j], j ← j + 1 k ← k + 1 if i > m for h ← j bis r B[k] ← A[h], k ← k + 1 else for h ← i bis m B[k] ← A[h], k ← k + 1 for h ← l bis r A[h] ← B[h]
Binäre Suchbäume[Bearbeiten | Quelltext bearbeiten]
Inorder(p) if p ≠ null Inorder(p.left) Bearbeite p Inorder(p.right)
Search(p,s): while p ≠ null und p.key ≠ s if s < p.key p ← p.left else p ← p.right return p
Minimum(p): if p = null return null while p.left ≠ null p ← p.left return p
Maximum(p): if p = null return null while p.right ≠ null p ← p.right return p
Successor(p): if p.right ≠ null return Minimum(p.right) else q ← p.parent while q ≠ null und p = q.right p ← q q ← q.parent return q
Predecessor(p): if p.left ≠ null return Maximum(p.left) else q ← p.parent while q ≠ null und p = q.left p ← q q ← q.parent return q
Insert(root, q): r ← null, p ← root while p ≠ null r ← p if q.key < p.key p ← p.left else p ← p.right q.parent ← r, q.left ← null, q.right ← null if r = null root ← q else if q.key < r.key r.left ← q else r.right ← q
Remove(root, q): if q.left = null oder q.right = null r ← q else r ← Successor(q), q.key ← r.key, q.info ← r.info if r.left ≠ null p ← r.left else p ← r.right if p ≠ null p.parent ← r.parent if r.parent = null root ← p else if r = r.parent.left r.parent.left ← p else r.parent.right ← p