Professional Documents
Culture Documents
Algoritmi Na Grafovima - Minimalna Udaljenost I MST
Algoritmi Na Grafovima - Minimalna Udaljenost I MST
Predrag Brođanac
Što je graf?
5
• bridovi imaju težine (udaljenosti, 2
12 9
10
cijene,…)
• težinska matrica grafa
3
– Primov 2
9
– Kruskalov
3
𝑂 𝐸 𝑙𝑜𝑔 𝑉
Strukture podataka i algoritmi 15
Kruskalov algoritam
• gradi se šuma
• u svakom koraku uzima najkraći brid
vodeći računa da se ne napravi ciklus
• pohlepni (greedy)
3
0
3
3 5
4
2 4
4 3
2 2 4
𝑂 𝐸 𝑙𝑜𝑔 𝐸
Strukture podataka i algoritmi 23
Problem najkraćih puteva
• usmjereni graf
• težina puta od čvora u do čvora v zbroju težina
bridova na putu od čvora u do čvora v
• najkraći put – put kod kojega je zbroj težina
bridova kroz koje prolazimo od čvora u do čvora
v najmanji
10 0 0 -1
0 1 ∞ -1
0 2 3
9 4 6
2 ∞ -1
3 ∞ -1
5 7
4 ∞ -1
3 4
2
∞ ∞
10 0 0 -1
0 1 10 0
0 2 3
9 4 6
2 ∞ -1
3 5 0
5 7
4 ∞ -1
3 4
2
5 ∞
10 0 0 -1
0 1 8 3
0 2 3
9 4 6
2 14 3
3 5 0
5 7
4 7 3
3 4
2
5 7
10 0 0 -1
0 1 8 3
0 2 3
9 4 6
2 13 4
3 5 0
5 7
4 7 3
3 4
2
5 7
10 0 0 -1
0 1 8 5
0 2 3
9 4 6
2 9 1
3 5 0
5 7
4 7 5
3 4
2
5 7
10 0 0 -1
0 1 8 5
0 2 3
9 4 6
2 9 1
3 5 0
5 7
4 7 5
3 4
2
5 7
𝑂 𝐸 𝑙𝑜𝑔 𝑉
Strukture podataka i algoritmi 32
Dijkstrin algoritam – implementacija
def dijkstra(a, v):
distance = [float('inf')] * len(a)
distance[v] = 0
parent = [-1] * len(a)
done = []
while len(done) < len(a):
mini = 0
minv = float('inf')
for i in range(len(a)):
if not i in done and distance[i] < minv:
minv = distance[i]
mini = i
done.append(mini)
for i in range(len(a)):
if a[mini][i] + distance[mini] < distance[i]:
distance[i] = a[mini][i] + distance[mini]
return distance
Hvala na pozornosti!