1 #ifndef SRC_ALGORITHMS_T_SKIM_DIJKSTRA_H_
2 #define SRC_ALGORITHMS_T_SKIM_DIJKSTRA_H_
11 class TSkimApproxSeedExactCover :
public TSkimBase<Z> {
14 int K_all_distance_sketch,
15 int min_influence_for_seed,
16 std::vector<std::vector<int>>* reverse_refernce,
19 K_all_distance_sketch_ = K_all_distance_sketch;
21 reverse_refernce_ = reverse_refernce;
22 TSkimBase<Z>::InitTSkimBase(T, min_influence_for_seed, cover, graph);
26 graph_sketch_ = graph_sketch;
29 int AddSeed(
int seed, std::unordered_map<int, int>* influence_change) {
30 LOG_M(DEBUG3,
"seed node = " << seed);
31 return TSkimBase<Z>::UpdateCover(seed, influence_change, (*reverse_refernce_)[seed]);
34 const std::vector<int>& CalculateVisitedNodes(
int source_node_id) {
35 NodeIdRandomIdData source_node_details(source_node_id, graph_sketch_->GetNodeRandomId(source_node_id));
36 NodeSketch * source_sketch = graph_sketch_->GetNodeSketch(source_node_details);
37 double distance = source_sketch->GetDistanceCoverNeighborhood(this->T_);
38 typename Z::TNode source(source_node_id);
39 LOG_M(DEBUG3,
"Running from node=" << source_node_id <<
" T=" << this->T_ <<
" Distance=" << distance);
40 call_backs_.InitTSkimDijkstraCallBacksDistancePrune(distance);
41 PrunedDijkstra< Z, TSkimDijkstraCallBacksDistancePrune<Z> > (source,
45 return call_backs_.get_visited_nodes();
49 TSkimBase<Z>::PreRunInit();
51 this->graph_->Transpose(&graph_transpose_);
52 if (graph_sketch_ == NULL) {
53 graph_sketch_ = &local_graph_sketch;
54 graph_sketch_->
InitGraphSketch(K_all_distance_sketch_, this->graph_->GetMxNId());
55 CalculateGraphSketch<Z>(&graph_transpose_, graph_sketch_);
57 reverse_rank_call_backs_.InitTSkimReverseRankCallBacks(this->T_);
58 reverse_rank_call_backs_.SetWantedNodes(this->wanted_nodes_);
59 call_backs_.SetWantedNodes(this->rankees_nodes_);
60 return TSkimBase<Z>::Run(
false);
64 int K_all_distance_sketch_;
67 TSkimReverseRankCallBacks<Z> reverse_rank_call_backs_;
68 DijkstraParams param_;
69 TSkimDijkstraCallBacksDistancePrune<Z> call_backs_;
70 std::vector<std::vector<int>>* reverse_refernce_;
74 class TSkimExactComputationBased :
public TSkimBase<Z> {
78 std::vector<std::vector<int> >* reachable_nodes,
79 std::vector<std::vector<int> >* reverse_refernce,
81 reverse_refernce_ = reverse_refernce;
82 reachable_nodes_ = reachable_nodes;
83 TSkimBase<Z>::InitTSkimBase(T, INT_MAX, cover, graph);
86 int AddSeed(
int seed, std::unordered_map<int, int>* influence_change) {
87 LOG_M(DEBUG3,
"seed node = " << seed <<
" seed cover size=" << (*reverse_refernce_)[seed].size());
88 int num_covered = TSkimBase<Z>::UpdateCover(seed, influence_change, (*reverse_refernce_)[seed]);
89 LOG_M(DEBUG3,
"seed node = " << seed <<
" num_covered=" << num_covered);
93 const std::vector<int>& CalculateVisitedNodes(
int source_node_id) {
94 return (*reachable_nodes_)[source_node_id];
98 std::vector<std::vector<int> >* reachable_nodes_;
99 std::vector<std::vector<int> >* reverse_refernce_;
104 class TSkimApproxVsExact :
public TSkimBase<Z> {
106 void InitTSkim(
int T,
107 int K_all_distance_sketch,
108 int min_influence_for_seed,
109 std::vector<std::vector<int>>* reverse_refernce,
112 K_all_distance_sketch_ = K_all_distance_sketch;
113 graph_sketch_approx = NULL;
114 TSkimBase<Z>::InitTSkimBase(T, min_influence_for_seed, cover, graph);
117 int AddSeed(
int seed, std::unordered_map<int, int>* influence_change) {
118 LOG_M(DEBUG3,
"seed node = " << seed);
119 std::vector<int> ranking;
120 return TSkimBase<Z>::UpdateCover(seed, influence_change, reverse_rank_call_backs_.get_visited_nodes());
123 const std::vector<int>& CalculateVisitedNodes(
int source_node_id) {
124 NodeIdRandomIdData source_node_details(source_node_id, graph_sketch_approx->GetNodeRandomId(source_node_id));
125 NodeSketch * source_sketch = graph_sketch_approx->GetNodeSketch(source_node_details);
126 double distance = source_sketch->GetDistanceCoverNeighborhood(this->T_);
127 typename Z::TNode source(source_node_id);
128 LOG_M(DEBUG3,
"Running from node=" << source_node_id <<
" T=" << this->T_ <<
" Distance=" << distance);
129 call_backs_.InitTSkimDijkstraCallBacksDistancePrune(distance);
130 PrunedDijkstra< Z, TSkimDijkstraCallBacksDistancePrune<Z> > (source,
131 TSkimBase<Z>::graph_,
134 return call_backs_.get_visited_nodes();
138 TSkimBase<Z>::PreRunInit();
140 graph_sketch_approx = &local_graph_sketch_approx;
142 this->graph_->Transpose(&graph_transpose_);
143 CalculateGraphSketch<Z>(&graph_transpose_, graph_sketch_approx);
144 reverse_rank_call_backs_.InitTSkimReverseRankCallBacks(this->T_);
145 reverse_rank_call_backs_.SetWantedNodes(this->wanted_nodes_);
146 call_backs_.SetWantedNodes(this->rankees_nodes_);
147 return TSkimBase<Z>::Run(
false);
151 int K_all_distance_sketch_;
154 TSkimReverseRankCallBacks<Z> reverse_rank_call_backs_;
155 DijkstraParams param_;
156 TSkimDijkstraCallBacksDistancePrune<Z> call_backs_;
157 std::unordered_map<int , std::set<int> > coveres;
158 std::unordered_map<int, int> exact_influence_;
159 std::vector<std::vector<int>>* reverse_refernce;
166 std::vector<std::vector<NodeIdDistanceData> >* reachable_nodes) {
167 reachable_nodes->resize(graph->GetMxNId());
168 CollectorNodesUpToTRank<Z> collect_nodes_call_backs;
170 for (
auto it = graph->BegNI(); it != graph->EndNI(); it++) {
173 std::cout << j <<
"/" << graph->GetMxNId() << std::endl;
175 int node_id = it.GetId();
176 DijkstraParams params;
177 typename Z::TNode source(node_id);
178 collect_nodes_call_backs.InitCollectorNodesUpToTRank(T+1);
179 PrunedDijkstra<Z, CollectorNodesUpToTRank<Z> > (source,
181 &collect_nodes_call_backs,
183 (*reachable_nodes)[node_id] = collect_nodes_call_backs.get_nodes_found();
192 #endif // SRC_ALGORITHMS_T_SKIM_DIJKSTRA_H_
void InitGraphSketch(unsigned int K, int max_node_id, const std::vector< int > *nodes_id=NULL)
Init the class.
Definition: graph_sketch.h:28
Single node sketch.
Definition: node_sketch.h:204
Contains all TSkim influence maximization algorithms.
const std::vector< RandomId > * GetNodesDistributionLean() const
returns the random id that was given to each node
Definition: graph_sketch.h:366
Data structure for the graph sketch.
Definition: graph_sketch.h:17
Cover extracted by the influence maximization algorithms.
Definition: t_skim.h:34