2劃分的實現

1. 定義

 2劃分,是指多個事物作爲一個集合S,把集合S的事物分成兩部分。而這樣的不同劃分有多少個,即爲2劃分數。

 

例如,S={A,B,C}。則2劃分有[A] | [B,C]  ,  [B] | [A,C] ,   [C] | [A, B] .2劃分數爲3.

 

2. 算法實現

假設S的大小爲n,即有n個元素。那麼相對於S的不同劃分有 2的(n-1)次方 減 1 個。

所以,用一個n位的二進制字符串表示一個劃分,其中二進制字符串中每一位對應代表S集合中的元素,位爲1的對應元素在劃分的一部分,位爲0的對應元素在劃分的另一部分。這個二進制字符串首位爲0,其他n-1位表示 的數從1開始,一直到2的(n-1)次方 減 1 爲止。

 

2.1 生成對應2進制的字符串代碼

 

int int_size = (int)Math.pow(2, int_attr_val_num-1)- 1; 		// 求2的n次冪,再減1
		String[] strarr_binary = new String[int_size];
		for (int i = 1; i <= int_size; i++) {
			StringBuffer sb = new StringBuffer(Integer.toBinaryString(i)); 		//整型數據轉化爲二進制字符串
			int length = sb.length();
			if (length < int_attr_val_num) {
				//填補位,使位數與n一樣
				for (int j = 0; j < int_attr_val_num - length; j++) {
					sb.insert(0, "0");
				}
			}
			strarr_binary[i-1] = sb.toString();
		}

 

 

 

2.2 根據匹配2進制字符串,獲得一個劃分

 

for(int int_i=0; int_i<str_bi.length(); int_i++) {
				if(str_bi.charAt(int_i) == '0') {
					//在str_bi中字符爲0的,分爲一組
					set_part_0.add(strarr_attr_val[int_i]);
				} else {
					set_part_1.add(strarr_attr_val[int_i]);
				}
                        }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章