Code Documentation 3.6
Social Network Visualizer
Loading...
Searching...
No Matches
distance_engine.h
Go to the documentation of this file.
1
15
16#ifndef SOCNETV_DISTANCE_ENGINE_H
17#define SOCNETV_DISTANCE_ENGINE_H
18
21
22#include <QVector>
23
24class Graph;
25
27{
28public:
29 explicit DistanceEngine(Graph &g);
30 void compute(const bool computeCentralities,
31 const bool considerWeights,
32 const bool inverseWeights,
33 const bool dropIsolates);
34
35private:
37
38 void initRun(const bool computeCentralities,
39 const bool considerWeights,
40 const bool inverseWeights,
41 const bool dropIsolates,
42 struct DistanceScratch &ds,
43 struct CentralityScratchSSSP &csssp,
44 struct CentralityScratchFinalize &csfin,
46
47 // Parallel SSSP source loop (Phase 2).
48 // Distributes source vertices across CPU cores via QtConcurrent::blockingMap.
49 // Each thread owns a ThreadLocalState; unsafe graph writes (BC, SC, distance
50 // sum, geodesics count, diameter) are accumulated into per-thread state and
51 // reduced into graph-global state in a single-threaded step after the map.
52 void runAllSources(const bool computeCentralities,
53 const bool considerWeights,
54 const bool inverseWeights,
55 const bool dropIsolates,
56 struct DistanceScratch &ds,
58
59 void finalize(const bool computeCentralities,
60 const bool dropIsolates,
61 struct DistanceScratch &ds,
62 struct CentralityScratchFinalize &csfin,
64
65 // Breadth-First Search SSSP for unweighted graphs.
66 // Writes distances and sigma to pss; accumulates unsafe graph-wide values into
67 // pss.sourceDistanceSum / sourceGeodesicsCount / sourceDiameter instead of calling
68 // graph methods directly (safe for parallel execution from multiple threads).
69 // SC increments go into partialSC[ui] rather than vertex->setSC() to avoid races
70 // on intermediate vertices that may be visited by concurrent source threads.
71 void bfsSSSP(const int &s, const int &si,
72 const bool &computeCentralities,
73 const bool &dropIsolates,
75 QVector<qreal> &partialSC);
76
77 // Dijkstra SSSP for weighted graphs (directed or not).
78 // Same thread-safety contract as bfsSSSP: unsafe graph-wide writes go to
79 // pss scratch fields and partialSC instead of touching graph/vertex state directly.
80 void dijkstraSSSP(const int &s, const int &si,
81 const bool &computeCentralities,
82 const bool &inverseWeights,
83 const bool &dropIsolates,
85 QVector<qreal> &partialSC);
86};
87
88#endif // SOCNETV_DISTANCE_ENGINE_H
Graph & graph
Definition distance_engine.h:36
void initRun(const bool computeCentralities, const bool considerWeights, const bool inverseWeights, const bool dropIsolates, struct DistanceScratch &ds, struct CentralityScratchSSSP &csssp, struct CentralityScratchFinalize &csfin, IDistanceProgressSink &sink)
Definition distance_engine.cpp:181
void finalize(const bool computeCentralities, const bool dropIsolates, struct DistanceScratch &ds, struct CentralityScratchFinalize &csfin, IDistanceProgressSink &sink)
Definition distance_engine.cpp:647
void bfsSSSP(const int &s, const int &si, const bool &computeCentralities, const bool &dropIsolates, PerSourceScratch &pss, QVector< qreal > &partialSC)
Definition distance_engine.cpp:977
void dijkstraSSSP(const int &s, const int &si, const bool &computeCentralities, const bool &inverseWeights, const bool &dropIsolates, PerSourceScratch &pss, QVector< qreal > &partialSC)
Definition distance_engine.cpp:1159
DistanceEngine(Graph &g)
Definition distance_engine.cpp:86
void runAllSources(const bool computeCentralities, const bool considerWeights, const bool inverseWeights, const bool dropIsolates, struct DistanceScratch &ds, IDistanceProgressSink &sink)
Definition distance_engine.cpp:400
void compute(const bool computeCentralities, const bool considerWeights, const bool inverseWeights, const bool dropIsolates)
Runs the full geodesic distance (and optionally centrality) computation pipeline.
Definition distance_engine.cpp:111
The Graph class This is the main class for a Graph, used in conjuction with GraphVertex,...
Definition graph.h:73
Definition distance_progress_sink.h:21
Declares the GraphDistanceProgressSink class that implements IDistanceProgressSink to receive progres...
Per-source scratch state for the Brandes SSSP / centrality computation.
Definition distance_engine.cpp:76
Definition distance_engine.cpp:57
Definition distance_engine.cpp:30
Definition per_source_scratch.h:25