Upload
buiduong
View
223
Download
1
Embed Size (px)
Citation preview
1
Aula 20 – Conjuntos disjuntos (Union-find)
MC3305Algoritmos e Estruturas de Dados II
Prof. Jesús P. [email protected]
2Q-2015
2
Números de Ackermann
3
Ackermann
A função de Ackermann é definida recursivamente para números inteiros não negativos, m e n, como:
4
ackermann.c
5
ackermann.c
$ gcc ackermann.c o ackermann.exe$ time ./ackermann.exe real 0m21.221suser 0m21.152ssys 0m0.056s
$ gcc ackermann.c o ackermann.exe Ofast$ time ./ackermann.exe real 0m2.446suser 0m2.444ssys 0m0.000s
$ clang ackermann.c o ackermann.exe O4$ time ./ackermann.exe real 0m6.365suser 0m6.357ssys 0m0.004s
6
Conjuntos disjuntos aplicado para a identificação de ciclos em grafos
7
grafo1.txt
330 11 20 2
0
1
2
8
grafo2.txt
1070 10 20 66 56 44 37 8
0 1
2
8
7
3
4
6
59
9
grafo3.txt
1080 10 20 66 56 44 37 82 3
0 1
2
8
7
3
4
6
59
10
uf1.c
11
uf1.c
12
uf1.c
13
$ gcc uf1.c o uf1.exe
$ ./uf1.exe < grafo1.txtGrafo contem ciclo
$ ./uf1.exe < grafo2.txtGrafo nao contem ciclo
$ ./uf1.exe < grafo3.txtGrafo contem ciclo
time ./uf1.exe < arvore1.txtGrafo nao contem cicloreal 0m9.007suser 0m8.908ssys 0m0.060s
$ time ./uf1.exe < arvore2.txtGrafo contem cicloreal 0m8.910suser 0m8.852ssys 0m0.044s
14
uf2.c
15
uf2.c
Path compression
Union by rank
16
uf2.c
17
gcc uf2.c o uf2.exe
$ time ./uf2.exe < arvore1.txtGrafo nao contem cicloreal 0m0.023suser 0m0.020ssys 0m0.000s
$ time ./uf2.exe < arvore2.txtGrafo contem cicloreal 0m0.022suser 0m0.020ssys 0m0.000s
18
EmailEnron.txt
19
Atividade 1 tidia-ae→
Crie um programa uf3.c que permita calcular o número de componentes conexas de um grafo.
Considere conjuntos disjuntos com as melhoras:- Union by rank- Path compression
grafo1.txt → 1grafo2.txt → 3grafo3.txt → 3arvore1.txt → 2arvore2.txt → 3EmailEnron.txt → 1065
20
Atividade 1 tidia-ae→
21
Atividade 1 tidia-ae→
22
Atividade 2 tidia-ae→
Crie um programa uf4.c que permita calcular o tamanho da maior componentes conexa de um grafo.
Considere conjuntos disjuntos com as melhoras:- Union by rank- Path compression
grafo1.txt → 3grafo2.txt → 7grafo3.txt → 7arvore1.txt → 65534arvore2.txt → 65533EmailEnron.txt → 33696
23
Atividade 2 tidia-ae→
24
25
Lista 05
(Questão única) Implemente uma função para calcular o custo total de uma árvore geradora mínima. Sua solução deve estar baseadas nas estruturas vistas em aula (Conjuntos disjuntos)
→ Envio até 20/08 (23h50-Tidia)
→ Pode ser elaborado por até 2 alunos.
→ Envie um relatório e o código fonte contendo alguns exemplos de execução.
330 1 10 2 31 2 3
Exemplo de entrada:
Saida = 4
460 1 20 3 40 2 11 3 3 1 2 33 2 2
Exemplo de entrada:
Saida = 5