double mutual2(deque<deque<int>> en, deque<deque<int>> ten) { if (en.size() == 0 || ten.size() == 0) return 0; // en e ten are two partitions of integer numbers int dim; { map<int, int> all; // node, index for (int i = 0; i < ten.size(); i++) { for (int j = 0; j < ten[i].size(); j++) { all.insert(make_pair(ten[i][j], all.size())); } } for (int i = 0; i < en.size(); i++) { for (int j = 0; j < en[i].size(); j++) { all.insert(make_pair(en[i][j], all.size())); } } dim = all.size(); for (int i = 0; i < ten.size(); i++) { for (int j = 0; j < ten[i].size(); j++) ten[i][j] = all[ten[i][j]]; sort(ten[i].begin(), ten[i].end()); } for (int i = 0; i < en.size(); i++) { for (int j = 0; j < en[i].size(); j++) en[i][j] = all[en[i][j]]; sort(en[i].begin(), en[i].end()); } } return (0.5 * (2. - H_x_given_y(ten, en, dim) - H_x_given_y(en, ten, dim))); }
double H_x_given_yz (int idx0, int idx1, int idx2) { double h_x_given_z = H_x_given_y (idx0, idx1); double h_joint_xz = H_joint_xy (idx0, idx2); double h_joint_yz = H_joint_xy (idx1, idx2); double h_joint_xyz = H_joint_xyz (idx0, idx1, idx2); double h_z = H_x (idx2); return h_x_given_z - h_joint_xz - h_joint_yz + h_joint_xyz + h_z; }
double mutual2(deque<deque<int> > en, deque<deque<int> > ten) { if(en.size()==0 || ten.size()==0) return 0; // en e ten are two partitions of integer numbers int dim; //printm(ten); //printm(en); { map <int, int> all; // node, index //set <int> ten_; //set <int> en_; for (int i=0; i<int(ten.size()); i++) { for (int j=0; j<int(ten[i].size()); j++) { all.insert(make_pair(ten[i][j], all.size())); //ten_.insert(ten[i][j]); } } for (int i=0; i<int(en.size()); i++) { for (int j=0; j<int(en[i].size()); j++) { all.insert(make_pair(en[i][j], all.size())); //en_.insert(en[i][j]); } } dim=all.size(); /* for (map<int, int>::iterator its=all.begin(); its!=all.end(); its++) { if(ten_.find(its->first)==ten_.end()) { deque <int> first; first.push_back(its->first); ten.push_back(first); } if(en_.find(its->first)==en_.end()) { deque <int> first; first.push_back(its->first); en.push_back(first); } } */ for (int i=0; i<int(ten.size()); i++) { for (int j=0; j<int(ten[i].size()); j++) ten[i][j]=all[ten[i][j]]; sort(ten[i].begin(), ten[i].end()); } for (int i=0; i<int(en.size()); i++) { for (int j=0; j<int(en[i].size()); j++) en[i][j]=all[en[i][j]]; sort(en[i].begin(), en[i].end()); } } return (0.5*( 2. - H_x_given_y(ten, en, dim) - H_x_given_y(en, ten, dim))); }
double H_xy_given_z (int idx0, int idx1, int idx2) { double h_y_given_xz = H_x_given_yz(idx1, idx0, idx2); double h_x_given_z = H_x_given_y (idx0, idx2); return h_y_given_xz + h_x_given_z; }