Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Q←V
Belmman-Ford
2. For each u ∈ Q: Pseudo-código:
3. key[u]←∞ 1. for each v ∈ V – {s} |
4. key[r]←0 for some arbitrary s ∈ V 2. do d[v]←∞ | Inicialização
5. π[r]←NIL 3. d[s]←0 |
6. while Q≠: 4. for i←1 to |V(G)| - 1
7. do u←Extract-Min(Q) 5. do for each edge (u,v) ∈ E[G]
8. for each v ∈ Adj[u] 6. do if d[v]>d[u]+w(u,v) Passo de
9. do if v ∈ Q and w(u,v)<keys[v] 7. then d[v]←d[u]+w(u,v) relaxamento
10. then key[v]←w(u,v) ► Decrease-Key 8. for each eadge (u,v) ∈ E[G]
11. π[v]←u 9. do if d[v]>d[u]+w(u,v)
10. then return FALSE (report that a negative-weight
Análise do algoritmo: cycle exists)
Usando matriz de adjacência: O(V2) 11. return TRUE (if no negative-weight cycles:
Usando heaps binárias: O((V+E log (V)) = O(E log(v)) d[v]=(s,v)
Usando heap de Fibonacci e listas de adjacência: O(E
+ log(V)) Análise do algoritmo:
O algoritmo de Bellman-Ford possui um tempo de
execução de O(VE), desde que a inicialização nas
linhas 1-3 tomar um tempo de Θ(V), cada um dos |V|-1
passos sobre os arcos nas linhas 4-7 tomarem um
tempo de O(E), e o ciclo for nas linhas 8-10 tomar um
tempo de O(E).
Sociologia
Complexidade temporal: n2
vistos = []
ordem = []
def dfs(g,u):
global vistos ► DFS ao grafo G
vistos.append(u)
for v in g[u]:
if v not in vistos: dfs(g,v)
ordem.append(u)
def gt(g):
gr={}
for i in g: ► Determinar Gt
adj=[j for j in g for k in g[j] if k==i]
gr[i]=adj
return gr
def dfs2(g,u):
if u not in g: return 0
vistos.append(u)
c = 1 ► DFS ao grafo Gt,e cálculo dos
grupos e pessoas s/ grupo
for v in g[u]:
if v not in vistos:
c += dfs2(g,v)
return c