00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef NODESELECTOR_H
00019 #define NODESELECTOR_H
00020
00021 #include <sym/Sym.h>
00022
00024 class NodeSelector {
00025 public:
00026
00027 class NodeSelection {
00028 Sym root_;
00029 unsigned subtree_index_;
00030 Sym subtree_;
00031
00032 public :
00033 NodeSelection(Sym r, unsigned idx, Sym s)
00034 : root_(r), subtree_index_(idx), subtree_(s) {}
00035
00036 Sym root() const { return root_; }
00037 unsigned idx() const { return subtree_index_; }
00038 Sym subtree();
00039
00040 };
00041
00042 virtual ~NodeSelector() {}
00043
00044 virtual NodeSelection select_node(Sym sym) const = 0;
00045 };
00046
00047
00049 class RandomNodeSelector : public NodeSelector {
00050 public:
00051 NodeSelection select_node(Sym sym) const;
00052 };
00053
00055 class BiasedNodeSelector : public NodeSelector {
00056 public:
00057 unsigned nRounds;
00058
00059 BiasedNodeSelector() : nRounds(3) {}
00060 BiasedNodeSelector(unsigned n) : nRounds(n) {}
00061
00062 NodeSelection select_node(Sym sym) const;
00063 };
00064
00065 #endif