Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Trabalho Prático Parte 2 Teoria dos Grafos

Trabalho Prático Parte 2 Teoria dos Grafos

Pedro Boueke

November 01, 2014
Tweet

More Decks by Pedro Boueke

Other Decks in Programming

Transcript

  1. Estruturas: -Tuple -Element -DoubleElement -HeapElement -Queue -Stack -Linked List Todas

    são declaradas com template<class T> Permitem a utilização de uma classe Graph genérica para qualquer tipo de estrutura de dados Estruturas -Ordered Linked List -Double Linked List -Degenerate Double Linked List with Vector -Degenerate MinHeap -Degenerate MaxHeap -ConnectedComponent -GraphPath
  2. Graph é declarado com template<class T> de modo que possa

    ser instanciado como de qualquer tipo de estrutura de dados escolhida para representar o grafo Classe Graph Seguindo a ideia da primeira parte do trabalho...
  3. Classe Graph Métodos: -Default constructor and destructor -LoadGraphFromFile -GenerateGraphFile -GetNeighbors

    -GetSides -BFS -FastBFS (private) -VeryFastBFS (private) -DFS -VeryFastDFS (private) -GetConnectedComponents -GetDiameter -Dijkstra (new) -Dijkstra(dst) (new) -VeryFastDijkstra (private) (new) -MST (new) -GetAverageDistance (new)
  4. Classe NVector Funciona como na implementação para a primeira parte

    do trabalho. Consiste de uma lista de adjacência. Implementamos por meio de um vetor de vetores estático. O vetor i contem Tuplas com os vizinhos do vértice i e os respectivos pesos das arestas que os ligam.
  5. Heap Faz uso do HeapElement, que mantem um ponteiro para

    seu pai e um para cada um de seus dois filhos. “Degenerate MinHeap” (estrutura escolhida) ❏ Fila de prioridade para elementos de menor chave ❏ Todas as operações O(log2 n) ❏ Vetor auxiliar é mantido com os ponteiros de cada elemento, acessando-os em O(1) Pode adicionar, remover e editar elementos.
  6. Estudo de caso Grafo 1 Grafo 2 Grafo 3 Grafo

    4 Grafo 5 dblp Memória Usada 212 KiB 10.5 MiB 3.2 mIb 11.7 MiB 11.9 MiB 89.5 MiB Tempo de Alocação 0.004s 0.224s 0.064s 0.256s 0.232s 2.240s Memória ocupada e tempo de alocaçao Execução de Dijkstra 10 vezes em todos os vértices Tempo de execução 0.000s 0.028s 0.040s 0.340s 0.808s 13.632s
  7. Estudo de caso Dijkstra entre os vértices 1 e 10,

    20, 30, 40 e 50 Grafo 1 Grafo 2 Grafo 3 Grafo 4 Grafo 5 dblp 10 0.000s 0.004s 0.000s 0.040s 0.052s 0.352s 20 0.000s 0.012s 0.008s 0.028s 0.092s 0.204s 30 0.000s 0.012s 0.004s 0.048s 0.028s 0.288s 40 0.000s 0.012s 0.004s 0.028s 0.088s 0.444s 50 0.000s 0.012s 0.000s 0.020s 0.028s 0.212s
  8. Rede de colaboração Estudo de caso Turing Kruskal Kleinberg Tardos

    Figueiredo Marroquim Tempo 1.380s 0.476s 0.244s 0.228s 0.272s 0.220s Distância ∞ 3.02914 1.73413 1.83347 2.28844 2.17618
  9. MST Estudo de caso Grafo 1 Grafo 2 Grafo 3

    Grafo 4 Grafo 5 dblp Memória 10 KiB 0.1 MiB 0.8 MiB 4.2 MiB 8.6 MiB 61.3 MiB Tempo 0.000s 0.008s 0.012s 0.084s 0.164s 1.592s Resultado 336 999 31947 216236 608677 1274200* *Notamos que, pelo fato da rede de colaboradores ser desconexa, esse resultado nos informa o peso da MST da componente conexa em que rodamos o grafo, e esse resultado se torna impreciso.
  10. Estudo de caso Distância Média Grafo 1 Gafo 2 Grafo

    3 Grafo 4 Grafo 5 dblp Memória 10 KiB 0.1 MiB 0.7 MiB 3.4 MiB 6.9 MiB ~ 40 MiB Tempo 0.000s 1.396s 40.386s 26min 55s 2h 10min 26s ~ 7 dias Resultado 13.0192 2.0859 16.0108 24.6289 57.1552 ???
  11. Otimizações possíveis Heap de Fibonacci - Eficiência máxima em Dijkstra

    e Prim (http://www.growingwiththeweb.com/2014/06/fibonacci-heap.html) Inserção e Redução de chave em O(1) Remoção em O(logn) Dijkstra: O((m + n) logn) ---> O(m + nlogn) Computação Paralela - Open MP