29 #ifndef GUM_DFS_TREE_H 30 #define GUM_DFS_TREE_H 37 #include <agrum/tools/core/math/math_utils.h> 38 #include <agrum/tools/core/bijection.h> 39 #include <agrum/tools/core/sequence.h> 40 #include <agrum/tools/core/set.h> 42 #include <agrum/tools/graphs/diGraph.h> 44 #include <agrum/tools/graphs/algorithms/triangulations/partialOrderedTriangulation.h> 46 #include <agrum/PRM/gspan/edgeGrowth.h> 47 #include <agrum/PRM/gspan/interfaceGraph.h> 48 #include <agrum/PRM/gspan/pattern.h> 50 #include <agrum/PRM/gspan/searchStrategy.h> 55 template <
typename GUM_SCALAR >
59 template <
typename GUM_SCALAR >
69 template <
typename GUM_SCALAR >
70 class DFSTree:
private DiGraph {
79 DFSTree(
const InterfaceGraph< GUM_SCALAR >& graph,
80 SearchStrategy< GUM_SCALAR >* strategy = 0);
91 const InterfaceGraph< GUM_SCALAR >& graph()
const;
95 explicit PatternData(Pattern* p);
97 PatternData(
const PatternData& from);
103 std::list< NodeId > children;
107 NodeProperty< Sequence< PRMInstance< GUM_SCALAR >* >* > iso_map;
109 Set< NodeId > max_indep_set;
117 std::list< NodeId >& roots();
120 const std::list< NodeId >& roots()
const;
123 Pattern& parent(
const Pattern& p);
126 const Pattern& parent(
const Pattern& p)
const;
129 std::list< NodeId >& children(
const Pattern& p);
132 const std::list< NodeId >& children(
const Pattern& p)
const;
135 Pattern& pattern(NodeId id);
138 const Pattern& pattern(NodeId id)
const;
146 void addRoot(LabelData& data);
163 Pattern& growPattern(Pattern& p, EdgeGrowth< GUM_SCALAR >& edge_growth, Size min_freq);
187 UndiGraph& iso_graph(
const Pattern& p);
213 Sequence< PRMInstance< GUM_SCALAR >* >& iso_map(
const Pattern& p, NodeId node);
222 Set< NodeId >& max_indep_set(
const Pattern& p);
226 double frequency(
const Pattern& p)
const;
229 PatternData& data(
const Pattern& p);
231 const PatternData& data(
const Pattern& p)
const;
234 SearchStrategy< GUM_SCALAR >& strategy();
237 const SearchStrategy< GUM_SCALAR >& strategy()
const;
243 struct NeighborDegreeSort {
245 explicit NeighborDegreeSort(UndiGraph& graph);
247 NeighborDegreeSort(
const NeighborDegreeSort& source);
249 ~NeighborDegreeSort();
251 bool operator()(NodeId i, NodeId j);
260 const InterfaceGraph< GUM_SCALAR >* _graph_;
263 std::list< NodeId > _roots_;
267 Bijection< NodeId, Pattern* > _node_map_;
270 HashTable< Pattern*, PatternData* > _data_;
273 SearchStrategy< GUM_SCALAR >* _strategy_;
276 void _checkGrowth_(Pattern& p, Pattern* child, EdgeGrowth< GUM_SCALAR >& edge_growth);
279 void _addChild_(Pattern& p, Pattern* child, EdgeGrowth< GUM_SCALAR >& edge_growth);
282 bool _is_new_seq_(Sequence< PRMInstance< GUM_SCALAR >* >& seq,
283 NodeProperty< Sequence< PRMInstance< GUM_SCALAR >* >* >& iso_map);
288 void _initialiaze_root_(Pattern* p, Sequence< EdgeData< GUM_SCALAR >* >& seq);
291 bool _test_equality_(HashTable< PRMClassElement< GUM_SCALAR >*, Size >& x,
292 HashTable< PRMClassElement< GUM_SCALAR >*, Size >& y);
296 #ifndef GUM_NO_EXTERN_TEMPLATE_CLASS 297 extern template class DFSTree<
double >;
305 #include <agrum/PRM/gspan/DFSTree_tpl.h>