25
1 Aula 20 – Conjuntos disjuntos (Union-find) MC3305 Algoritmos e Estruturas de Dados II Prof. Jesús P. Mena-Chalco [email protected] 2Q-2015

Conjuntos disjuntos (Union-Find)

Embed Size (px)

Citation preview

Page 1: Conjuntos disjuntos (Union-Find)

1

Aula 20 – Conjuntos disjuntos (Union-find)

MC3305Algoritmos e Estruturas de Dados II

Prof. Jesús P. [email protected]

2Q-2015

Page 2: Conjuntos disjuntos (Union-Find)

2

Números de Ackermann

Page 3: Conjuntos disjuntos (Union-Find)

3

Ackermann

A função de Ackermann é definida recursivamente para números inteiros não negativos, m e n, como:

Page 4: Conjuntos disjuntos (Union-Find)

4

ackermann.c

Page 5: Conjuntos disjuntos (Union-Find)

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

Page 6: Conjuntos disjuntos (Union-Find)

6

Conjuntos disjuntos aplicado para a identificação de ciclos em grafos

Page 7: Conjuntos disjuntos (Union-Find)

7

grafo1.txt

330 11 20 2

0

1

2

Page 8: Conjuntos disjuntos (Union-Find)

8

grafo2.txt

1070 10 20 66 56 44 37 8

0 1

2

8

7

3

4

6

59

Page 9: Conjuntos disjuntos (Union-Find)

9

grafo3.txt

1080 10 20 66 56 44 37 82 3

0 1

2

8

7

3

4

6

59

Page 10: Conjuntos disjuntos (Union-Find)

10

uf1.c

Page 11: Conjuntos disjuntos (Union-Find)

11

uf1.c

Page 12: Conjuntos disjuntos (Union-Find)

12

uf1.c

Page 13: Conjuntos disjuntos (Union-Find)

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

Page 14: Conjuntos disjuntos (Union-Find)

14

uf2.c

Page 15: Conjuntos disjuntos (Union-Find)

15

uf2.c

Path compression

Union by rank

Page 16: Conjuntos disjuntos (Union-Find)

16

uf2.c

Page 17: Conjuntos disjuntos (Union-Find)

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

Page 18: Conjuntos disjuntos (Union-Find)

18

Email­Enron.txt

Page 19: Conjuntos disjuntos (Union-Find)

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   → 3Email­Enron.txt  → 1065

Page 20: Conjuntos disjuntos (Union-Find)

20

Atividade 1 tidia-ae→

Page 21: Conjuntos disjuntos (Union-Find)

21

Atividade 1 tidia-ae→

Page 22: Conjuntos disjuntos (Union-Find)

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   → 65533Email­Enron.txt  → 33696

Page 23: Conjuntos disjuntos (Union-Find)

23

Atividade 2 tidia-ae→

Page 24: Conjuntos disjuntos (Union-Find)

24

Page 25: Conjuntos disjuntos (Union-Find)

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