Leitor aceita u v peso, valida IDs, descarta laços e os contabiliza
Uma interface, estruturas trocáveis; pesos negativos → aviso de “não implementado”
Caminho completo por destino, grafias exatas dos pesquisadores
Heap medido em todos os grafos; vetor medido no Grafo Ponderado 3
| Grafo | Vértices | Arestas | δ (%) | Comp. | Grau med. | Peso méd. | Pesos 0 |
|---|---|---|---|---|---|---|---|
| Ponderado 3 | 100.000 | 6.099.941 | 0,122 | 1 | 122 | 4,96 | 3.074 |
| Ponderado 4 | 1.000.000 | 30.999.978 | 0,0062 | 1 | 62 | 4,92 | 15.950 |
| Ponderado 5 | 10.000.000 | 39.999.995 | 0,00008 | 1 | 8 | 4,37 | 24.894 |
| Ponderado 6 | 10.000.000 | 73.403.372 | 0,00015 | 4 | 15 | 5,00 | 36.410 |
| Ponderado 7 | 50.000.000 | 59.999.999 | 0,0000048 | 1 | 2 | 2,92 | 55.177 |
| Rede colab. | 722.385 | 2.272.543 | 0,00087 | 77.486 | 3 | 5,18 | 0 |
dos pares possíveis, em todos os seis: grafos esparsos.
Ponderados 3–7 têm pesos zero; a rede vai de 0,0037 a 113. Nenhum peso negativo nas entradas.
double por par de vértices; não cabe nem no menor grafoLayout e memória em detalhe: apêndice A1 e A2.
template<weighted_graph G>shortest_paths<typename G::weight_type>dijkstra_heap(const G& g, vertex_id source){ detail::check_dijkstra_input(g, source); auto sp = detail::init_shortest_paths(g, source); indexed_min_heap<W> heap(g.vertex_count()); heap.push(source, W{ 0 }); while (!heap.empty()) { const vertex_id u = heap.pop(); g.for_each_edge(u, [&](vertex_id v, W w) { const W nd = sp.dist[u] + w; if (nd < sp.dist[v]) { sp.dist[v] = nd; sp.parent[v] = u; if (heap.contains(v)) heap.update_key(v, nd); else heap.push(v, nd); } }); } return sp;}
Peso negativo → std::invalid_argument: a biblioteca ainda não implementa esse caso. Checagem em O(1).
dist = +∞, parent = 0, dist[s] = 0. Igual nas três versões.
Com pesos ≥ 0, quem sai do heap tem distância final.
Empate não troca o pai. Já no heap: update_key em O(log N).
{source, dist, parent}; reconstruct_path segue os pais.
| Grafo | Comp. | Maior comp. | Heap · média | Heap · mediana | Obsol. · média | Obsol. · mediana |
|---|---|---|---|---|---|---|
| Ponderado 3 | 1 | 100.000 | 0,118 | 0,118 | 0,154 | 0,154 |
| Ponderado 4 | 1 | 1.000.000 | 2,14 | 2,13 | 2,04 | 2,04 |
| Ponderado 5 | 1 | 10.000.000 | 23,69 | 23,71 | 12,83 | 12,83 |
| Ponderado 6 | 4 | 9.999.997 | 27,75 | 27,79 | 17,95 | 17,99 |
| Ponderado 7 | 1 | 50.000.000 | 110,91 | 111,10 | 40,93 | 40,96 |
| Rede colab. | 77.486 | 576.309 | 0,374 | 0,474 | 0,241 | 0,308 |
segundos por origem · 100 origens, semente 2025
Revisão da Parte 1: dist, parent, key_ e pos_ têm tamanho N, então toda busca paga a inicialização, mesmo numa componente pequena.
dos vértices da rede estão fora da componente gigante: essas origens terminam cedo e puxam a média para baixo.
| Parte 1 dizia | Parte 2 | Situação |
|---|---|---|
| BFS mais rápida que DFS | Confirmado na nova rodada em CSR, nos 12 grafos | mantido |
| Matriz inviável nos Grafos 3 a 6 | Com bitmask (1 bit por par), 3 e 4 cabem em ≈ 16,4 GiB; 5 e 6 pediriam ≈ 2.731 GiB | ampliado |
| Busca custa O(Ncc + Mcc) | O(N + Nc + Mc): os vetores têm tamanho N e são inicializados em toda busca | corrigido |
| Arestas como lidas do arquivo | Laços descartados e contados (Grafo 2: 65 laços, 1.299.729 válidas) | corrigido |
| “Algoritmos viram métodos de Graph” | Funções livres sobre conceitos (slide 3) | mudou o plano |
| Diâmetro inversamente ligado ao grau mediano | Sem generalizar: densidade maior não garante diâmetro menor entre grafos distintos | restrito |
Execução Linux com sanitizadores
As versões concordam; com pesos unitários, distância = nível da BFS
11 grafos: pesos zero/negativos, empates, paralelas, inalcançáveis, reduções de chave
O tempo da versão por vetor nos Grafos Ponderados 4 a 7 ainda precisa de uma rodada própria. “Não medido” não é zero nem estimativa, e a versão com entradas obsoletas não preenche essa lacuna.
graph_like e weighted_graph: conceitos, não classes abstratasClique numa linha do gráfico. Eixo em escala log, potências de 1024.
4 vCPUs AMD EPYC 7763 · 32 GiB · belgiumcentral · g++ 13.3 · commit b414456
Mesma sequência para as três versões; a ordem das versões alterna a cada origem
Inclui alocações da busca; exclui leitura, descompactação, validação e exportação
Grafos: Ponderados 3 a 7 (10⁵ a 5·10⁷ vértices, até 7,3·10⁷ arestas) e a rede de colaboração (722.385 pesquisadores). Todos em CSR.
| ← → espaço | navegar |
| Home / End | primeiro / último |
| T | iniciar/pausar cronômetro |
| R R | zerar cronômetro |
| N | notas do apresentador |
| F | tela cheia |
| D | tema claro/escuro |
| P | exportar PDF (com keyframes) |
| ? | esta ajuda |
| Esc | fechar painéis |