indigoX
treedecomp.hpp
Go to the documentation of this file.
1 //
2 // tree_decomposition.hpp
3 // indigox
4 //
5 // Created by Welsh, Ivan on 11/01/18.
6 // Copyright © 2017 Allison Group. All rights reserved.
7 //
8 
9 #ifndef INDIGOX_CLASSES_TREEDECOMP_HPP
10 #define INDIGOX_CLASSES_TREEDECOMP_HPP
11 
12 #include "../utils/graph.hpp"
13 #include "permutablegraph.hpp"
14 
15 #include <map>
16 #include <set>
17 #include <string>
18 
19 namespace indigox {
20 
21  struct TDVertProp {
22  std::set<PermVertex> bag;
23  };
24 
25  typedef utils::Graph<TDVertProp, utils::NoProperty, utils::UndirectedGraph>
27 
28  typedef _TDGraph::VertType TDVertex;
29  typedef _TDGraph::VertIter TDVertexIter;
30  typedef _TDGraph::EdgeType TDEdge;
31  typedef _TDGraph::EdgeIter TDEdgeIter;
32  typedef _TDGraph::NbrsIter TDNeighboursIter;
33  typedef _TDGraph::PredIter TDPredecessorsIter;
34 
35  typedef _TDGraph::VertTypePair TDVertPair;
36  typedef _TDGraph::VertIterPair TDVertIterPair;
37  typedef _TDGraph::EdgeIterPair TDEdgeIterPair;
38  typedef _TDGraph::NbrsIterPair TDNbrsIterPair;
39  typedef _TDGraph::PredIterPair TDPredIterPair;
40  typedef _TDGraph::VertBool TDVertBool;
41  typedef _TDGraph::EdgeBool TDEdgeBool;
42 
43  // class _TDecomp
44 
45  class _TDecomp : public _TDGraph {
46  public:
47  _TDecomp();
49 
51  std::string ToString();
52  size_t GetWidth() const { return upperBound_; }
53  inline PermutableGraph GetSourceGraph() { return originalG_; }
54 
55  private:
56  void FromOrder(ElimOrder &, size_t);
57 
58  private:
59  PermutableGraph permG_, originalG_;
60  std::map<PermVertex, TDVertex> bagMap_;
61  std::map<PermVertex, uid_t> elimiIndex_;
62  size_t upperBound_;
63  };
64  typedef std::shared_ptr<_TDecomp> TDecomp;
65 
66 } // namespace indigox
67 
68 #endif /* INDIGOX_CLASSES_TREEDECOMP_HPP */
std::vector< PermVertex > ElimOrder
Definition: permutablegraph.hpp:34
utils::Graph< TDVertProp, utils::NoProperty, utils::UndirectedGraph > _TDGraph
Definition: treedecomp.hpp:26
_TDGraph::EdgeIter TDEdgeIter
Definition: treedecomp.hpp:31
_TDGraph::VertBool TDVertBool
Definition: treedecomp.hpp:40
_TDGraph::PredIter TDPredecessorsIter
Definition: treedecomp.hpp:33
_TDGraph::NbrsIterPair TDNbrsIterPair
Definition: treedecomp.hpp:38
_TDGraph::EdgeIterPair TDEdgeIterPair
Definition: treedecomp.hpp:37
std::set< PermVertex > bag
Definition: treedecomp.hpp:22
Namespace for all graph related functionality.
Definition: access.hpp:7
size_t GetWidth() const
Definition: treedecomp.hpp:52
_TDGraph::EdgeBool TDEdgeBool
Definition: treedecomp.hpp:41
_TDGraph::VertType TDVertex
Definition: treedecomp.hpp:28
_TDGraph::VertIterPair TDVertIterPair
Definition: treedecomp.hpp:36
void SetInput(PermutableGraph, ElimOrder &)
_TDGraph::EdgeType TDEdge
Definition: treedecomp.hpp:30
PermutableGraph GetSourceGraph()
Definition: treedecomp.hpp:53
std::shared_ptr< _PermutableGraph > PermutableGraph
Definition: permutablegraph.hpp:24
_TDGraph::VertTypePair TDVertPair
Definition: treedecomp.hpp:35
Definition: treedecomp.hpp:21
_TDGraph::PredIterPair TDPredIterPair
Definition: treedecomp.hpp:39
std::shared_ptr< _TDecomp > TDecomp
Definition: treedecomp.hpp:64
_TDGraph::NbrsIter TDNeighboursIter
Definition: treedecomp.hpp:32
std::string ToString()
_TDGraph::VertIter TDVertexIter
Definition: treedecomp.hpp:29
Definition: treedecomp.hpp:45