Add roditty and zwick class
This commit is contained in:
55
algorithm/roditty_zwick.h
Normal file
55
algorithm/roditty_zwick.h
Normal file
@@ -0,0 +1,55 @@
|
||||
#ifndef RODITTY_ZWICK_H_
|
||||
#define RODITTY_ZWICK_H_
|
||||
|
||||
#include "graph/digraph.h"
|
||||
#include "graph/scc.h"
|
||||
#include "algorithm/tarjan.h"
|
||||
#include "algorithm/bfs.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
using namespace graph;
|
||||
|
||||
namespace algo {
|
||||
|
||||
// A randomized decremental algorithm for maintaining SCCs
|
||||
template<typename T>
|
||||
class RodittyZwick {
|
||||
public:
|
||||
RodittyZwick(Digraph<T> G) : G(G) {}
|
||||
|
||||
//
|
||||
void sccDecrementalMaintenance();
|
||||
|
||||
//
|
||||
void tcDecrementalMaintenance();
|
||||
private:
|
||||
Digraph<T> G;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
void RodittyZwick<T>::sccDecrementalMaintenance() {
|
||||
std::map<T, T> A;
|
||||
Tarjan<T> tarjan(G);
|
||||
|
||||
auto sccs = tarjan.run();
|
||||
|
||||
for (auto& scc : sccs) {
|
||||
const auto& root = scc.representative();
|
||||
BFS<T> bfs(scc);
|
||||
auto spt = bfs.run(root);
|
||||
for (const auto& vertex : scc.vertices) {
|
||||
A[vertex] = root;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void RodittyZwick<T>::tcDecrementalMaintenance() {
|
||||
|
||||
}
|
||||
|
||||
}; // namespace algo
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user