Component ❏ Linked List ❏ DoubleLinkedList ❏ Queue ❏ Stack 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
❏ LinkedList ❏ Hashtable ❏ ( . . . ) (Não conseguimos tempo para a implementação adequada) 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
propriamente dito. Nvector, Matrix e demais estruturas armazenam os dados do grafo na memória. Eles contém os mesmos métodos e elementos, que são acessados e chamados pelos métodos de Graph Classes e estruturas
Grafo de 1kk NVector 0,02268 s 0,41308 s 3,61556 s Matrix 0,41824 s -- -- Estruturas / Grafo Grafo de 30k Grafo de 100k Grafo de 1kk NVector 0,03668 s 0,1634 s 2,647 s Matrix 1,30544 s -- -- Estruturas / Grafo Grafo de 30k Grafo de 100k Grafo de 1kk NVector 1.8MiB 8.9MiB 83.2MiB Matrix 1000.2MiB 12500MiB(?) 125000MiB(?) Tempo médio para carregamento do grafo: Memória ocupada pelo grafo: Tempo médio de execução de 10 BFSs: Estruturas / Grafo Grafo de 30k Grafo de 100k Grafo de 1kk NVector 0,0178 s 0,057 s 1,10748 Matrix 1,1448 s -- -- Tempo médio de execução de 10 DFSs:
100k Grafo de 1kk Tempo de Execução 1m 13,044 s 25m 2,9028 s 4 dias(?) Com o crescimento do tempo de execução limitado por O(n2), a tomada do diâmetro é muito lenta. Uma das ideias para otimizar esse resultado seria a utilização de computação paralela, visto que as diversas BFSs necessárias para a execução do algoritmo não são interdependentes.
podem ser otimizados de maneiras diferentes para se adequarem à sua estrutura de dados! Grafos Dinâmicos Acessa lista de vizinhos em O(1) Modifica arestas em O(1)