Conjuntos disjuntos (Union-Find)

Preview:

Citation preview

1

Aula 20 – Conjuntos disjuntos (Union-find)

MC3305Algoritmos e Estruturas de Dados II

Prof. Jesús P. Mena-Chalcojesus.mena@ufabc.edu.br

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

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

Recommended