`
litaoshoujiao
  • 浏览: 22442 次
  • 来自: 深圳
社区版块
存档分类
最新评论

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]);
				}
                        }

 

 

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics