bitwalker / bitwalker/libgraph

Poor performance of Graph.replace_vertex/2 for large graphs

Offen
#85 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.