From 1e16e671eaef8859b87f5e26814a7a3a2d17f3f9 Mon Sep 17 00:00:00 2001 From: stefiosif Date: Mon, 13 Jun 2022 12:57:09 +0300 Subject: [PATCH] Make RodittyZwick class abstract --- algorithm/decremental_maintenance.h | 61 +++++++++++++++++++++++++++++ algorithm/roditty_zwick.h | 41 ++++--------------- test/algorithm_test.cc | 5 ++- 3 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 algorithm/decremental_maintenance.h diff --git a/algorithm/decremental_maintenance.h b/algorithm/decremental_maintenance.h new file mode 100644 index 0000000..ab54e59 --- /dev/null +++ b/algorithm/decremental_maintenance.h @@ -0,0 +1,61 @@ +#ifndef DECREMENTAL_MAINTENANCE_H_ +#define DECREMENTAL_MAINTENANCE_H_ + +#include "graph/digraph.h" +#include "graph/scc.h" +#include "algorithm/tarjan.h" +#include "algorithm/bfs.h" +#include "algorithm/roditty_zwick.h" + +using namespace graph; + +namespace algo { + +template +class DecrementalMaintenance : public RodittyZwick { +public: + DecrementalMaintenance(Digraph G) : G(G) {} + + // + void init(); + + // + void query(); + + // + void remove(); +private: + Digraph G; +}; + +template +void DecrementalMaintenance::init() { + std::map A; + Tarjan tarjan(G); + + auto sccs = tarjan.run(); + + for (auto& scc : sccs) { + const auto& root = scc.representative(); + BFS bfs(scc); + auto spt = bfs.run(root); + for (const auto& vertex : scc.vertices) { + A[vertex] = root; + } + + } +} + +template +inline void DecrementalMaintenance::query() +{ +} + +template +inline void DecrementalMaintenance::remove() +{ +} + +}; // namespace algo + +#endif \ No newline at end of file diff --git a/algorithm/roditty_zwick.h b/algorithm/roditty_zwick.h index b6e61ec..1ee077d 100644 --- a/algorithm/roditty_zwick.h +++ b/algorithm/roditty_zwick.h @@ -1,55 +1,30 @@ #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 - using namespace graph; namespace algo { -// A randomized decremental algorithm for maintaining SCCs template class RodittyZwick { public: - RodittyZwick(Digraph G) : G(G) {} + ~RodittyZwick(); // - void sccDecrementalMaintenance(); + virtual void init() =0; // - void tcDecrementalMaintenance(); -private: - Digraph G; + virtual void query() =0; + + // + virtual void remove() =0; }; template -void RodittyZwick::sccDecrementalMaintenance() { - std::map A; - Tarjan tarjan(G); - - auto sccs = tarjan.run(); - - for (auto& scc : sccs) { - const auto& root = scc.representative(); - BFS bfs(scc); - auto spt = bfs.run(root); - for (const auto& vertex : scc.vertices) { - A[vertex] = root; - } - - } -} - -template -void RodittyZwick::tcDecrementalMaintenance() { +RodittyZwick::~RodittyZwick() { } }; // namespace algo -#endif \ No newline at end of file +#endif diff --git a/test/algorithm_test.cc b/test/algorithm_test.cc index 40c25c4..9782bd5 100644 --- a/test/algorithm_test.cc +++ b/test/algorithm_test.cc @@ -5,6 +5,7 @@ #include "algorithm/tarjan.h" #include "algorithm/bfs.h" #include "algorithm/roditty_zwick.h" +#include "algorithm/decremental_maintenance.h" using namespace graph; @@ -130,7 +131,7 @@ TEST_SUITE("Algorithm") { G.insert(6, 3); G.insert(7, 2); - algo::RodittyZwick rz(G); - rz.sccDecrementalMaintenance(); + algo::DecrementalMaintenance rz(G); + rz.init(); } } \ No newline at end of file