00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __RS_H
00031 #define __RS_H
00032
00038 namespace DDG{
00039 class EN;
00040 }
00041
00042 namespace leda {
00048 int compare(const DDG::EN& u1, const DDG::EN& u2);
00049 }
00050
00051
00052 #include "DDG.h"
00053 #include <list>
00054 using namespace std;
00055 using namespace leda;
00056 namespace DDG{
00061 class CBC{
00062 public:
00063 set<node> S, T;
00064 set<edge> E_CB;
00065 CBC(): S(), T(), E_CB(){}
00066 void clear(){T.clear();S.clear(); E_CB.clear();}
00067 friend ostream& operator<<(ostream &os, const CBC & x){}
00068 friend istream& operator>>(istream &is, CBC& x) {}
00069 };
00070
00075 class EN{
00076 public:
00077 node t;
00078 rational rho;
00079 friend istream& operator>>(istream &is, EN& x){
00080 is>>x.t>>x.rho;
00081 }
00082 friend ostream& operator<<(ostream &os, const EN & x){
00083 os<<"("<<x.t<<" , "<<x.rho<<")";
00084 }
00085 };
00086
00093 LEDA::list<CBC> decompose_into_cbc(const DAG &PKG);
00094
00102 std::list<CBC> override_decompose_into_cbc(const DAG &G);
00103
00117 void SKS_greedy(const DAG &G, const DAG & PKG, const node_map<node> original_node, const node_map<node> pk_node, const CBC cb, node_array<node> &k);
00118
00119
00131 void SKS_greedy(const DAG &G, int t, const DAG & PKG, const node_map<node> original_node, const node_map<node> pk_node, const CBC cb, node_array<node> &k);
00132
00133
00146 rational rho(const DAG &G, const set<node> X, const set<node> Y, const node t, const set<node> GammaMinus_t);
00147
00148
00149
00161 rational rho(const DAG &G, int regtype, const set<node> X, const set<node> Y, const node t, const set<node> GammaMinus);
00162
00177 void compute_children_cost(const set<node> X, const set<node> Y, leda::list<EN> &T, const DAG &G, const DAG &PKG, const node_map<node> original_node, const node_map<node> pk_node);
00178
00192 void compute_children_cost(int regtype, const set<node> X, const set<node> Y, leda::list<EN> &T, const DAG &G, const DAG &PKG, const node_map<node> original_node, const node_map<node> pk_node);
00193
00205 void get_PKG(const DAG &G, DAG &PKG, node_map<node> &original_node, node_map<node> &pk_node);
00206
00217 void get_PKG(const DAG &G, int t, DAG &PKG, node_map<node> &original_node, node_map<node> &pk_node);
00218
00231 void get_DVG(const DAG &G, const node_array<node> kill, DAG &DVG, node_map<node> &original_node, node_map<node> &dvg_node);
00232
00243 void get_DVG(const DAG &G, int t, const node_array<node> k, DAG &DVG, node_map<node> &original_node, node_map<node> &dvg_node);
00244 }
00245
00246 #endif