示例#1
0
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)));
}
示例#2
0
 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)));
		
}
示例#4
0
 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;
 }