00001 /* 00002 * Copyright (C) 2005 Maarten Keijzer 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of version 2 of the GNU General Public License as 00006 * published by the Free Software Foundation. 00007 * 00008 * This program is distributed in the hope that it will be useful, 00009 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00011 * GNU General Public License for more details. 00012 * 00013 * You should have received a copy of the GNU General Public License 00014 * along with this program; if not, write to the Free Software 00015 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00016 */ 00017 00018 #ifndef NODESELECTOR_H 00019 #define NODESELECTOR_H 00020 00021 #include <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) {} // 3: for binary trees 87.5% chance of selecting an internal node 00060 BiasedNodeSelector(unsigned n) : nRounds(n) {} 00061 00062 NodeSelection select_node(Sym sym) const; 00063 }; 00064 00065 #endif
1.4.7