bitwalker / bitwalker/libgraph
Poor performance of Graph.replace_vertex/2 for large graphs
- Vorherrschende Sprache
- Elixir
- Sterne
- 571
- Forks
- 76
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Similar to #80 with likely similar fix. ~25x speedup for graph with 1M vertices/edges in iex for:
```
g = (Graph.new() |> Graph.add_edges(Enum.map(1..1_000_000, fn i -> {i, 1_000_000 - i} end)))
:timer.tc(fn -> Graph.replace_vertex(g, Enum.random(1..1_000_000), 1_000_001) end, :millisecond)
# {56, #Graph}
:timer.tc(fn -> Graph.replace_vertex_old(g, Enum.random(1..1_000_000), 1_000_001) end, :millisecond)
# {1399, #Graph}
```
Will add to PR #84 as related issues. Would like someone to double check that I haven't mixed up the in-edges and out-edges definitions.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne mit dem Vergleich von Graph.replace_vertex/2 und Graph.replace_vertex_old/2 und prüfe Issue #80 sowie PR #84 auf den zugehörigen Fix. Reproduziere den IEx-Benchmark mit einem Graphen mit 1.000.000 Knoten und Kanten und überprüfe anschließend die Definitionen von in-edge und out-edge. Erledigt bedeutet, dass der Austausch wesentlich schneller ist, ohne diese Kantensätze zu vermischen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- elixir
- Bereich
- performance
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100