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

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
分享到:
评论

相关推荐

    实现2-7集合划分问题.cpp

    实现2-7集合划分问题.cpp

    整数划分问题(实现代码)

    整数划分问题的实现代码 整数划分问题是将一个正整数 n 拆成一组数连加并等于 n 的形式,且这组数中的最大加数不大于 n。这是一种经典的组合数学问题,具有重要的理论价值和实践应用价值。 在解决整数划分问题时,...

    整数划分问题、具体算法实现

    这通常在递归算法中实现,但也可以与动态规划结合,通过记录划分过程中的决策路径来实现。 总结来说,整数划分问题的C语言实现涉及到递归和动态规划两种主要方法。虽然递归算法更直观,但动态规划在效率和空间...

    整数划分问题java源码

    例如,当n=4时,有效的划分有{4}、{3,1}、{2,2}、{2,1,1}和{1,1,1,1}。 在Java中解决这个问题通常采用递归或动态规划的方法。递归方法会自顶向下地尝试所有可能的划分,但可能会产生大量的重复计算。相比之下,动态...

    社区划分算法的python3实现, 包括KL算法、 COPAR、Louvain 算法、LFM算法、InfoMap算法等

    在这个Python3实现的压缩包中,包含了多种社区划分算法,包括KL算法、COPAR、Louvain算法、LFM算法以及InfoMap算法。这些算法各有特点,下面我们将详细探讨它们的原理和应用。 1. KL算法(Kernighan-Lin算法): ...

    集合划分算法java源码

    2. 当集合为空时,表示当前子集是一个有效的划分,将其添加到结果列表中。 3. 对集合中的每个元素,递归调用自身:将元素添加到当前子集,然后处理剩下的元素;再创建一个新的子集,处理剩下的元素。 4. 在递归返回...

    整数划分(C语言实现)

    此外,这个简单的实现没有考虑部分的顺序,也就是说,(1, 2, 3) 和 (3, 2, 1) 被视为不同的划分。如果需要去除重复的划分,可以在递归过程中加入排序的步骤。 以上就是整数划分问题的C语言实现基础介绍。这个算法...

    子网掩码计算器(子网划分)

    若要将这个网络划分为4个子网,我们可以通过增加子网位来实现,如借用3位主机位作为子网位,这样新的子网掩码就是255.255.255.224。 子网掩码计算器可以自动完成这些复杂的计算。用户只需要输入原始的IP地址和所需...

    集合划分问题 java实现

    集合划分问题 Java 实现 集合划分问题是计算机科学和数学领域中一个重要的问题,它是指将一个集合划分成多个非空子集的所有可能的方式。这种问题在许多领域都有应用,如数据挖掘、机器学习和数据库管理等。 在 ...

    子网划分的两个实例

    同时,正确划分子网可以提高网络管理效率,减少广播域,提高网络安全,并有助于实现VLAN(虚拟局域网)等高级网络功能。 总结一下,子网划分的关键在于: 1. 确定需要的子网数量,通过2的n次方来决定需要借用的...

    动态规划集合划分

    具体来说,对于一个包含`n`个元素的集合`{1,2,...,n}`,我们需要计算其能够划分为多少个不同的非空子集的方式。例如,当`n = 4`时,集合`{1,2,3,4}`可以被划分为15种不同的非空子集组合。 #### 二、问题解析 **...

    子网划分工具

    2. 输入子网数或主机数:根据需求,用户可以选择期望的子网数量或是每个子网内的主机数。 3. 自动计算:工具会自动计算出所需的子网掩码、子网IP范围和可用主机数。 4. 显示结果:清晰地列出所有计算出的子网信息,...

    整数划分问题

    3. 第三行:将5划分成最大数不超过2的划分数为3(1+1+1+1+1, 1+1+1+2, 1+2+2)。 4. 第四行:将5划分成若干奇正整数之和的划分数为3(5, 1+1+3, 1+1+1+1+1)。 5. 第五行:将5划分成若干不同整数之和的划分数为3(5,...

    归纳法实现整数划分问题

    利用归纳法实现整数划分,如:6=6+0=5+1=4+2=4+1=...=1+1+1+1+1+1。

    集合划分问题C语言实现

    非常完美 ,它的时间空间复杂度很小,我上大二时编的

    递归方法实现整数的划分

    ### 递归方法实现整数的划分 #### 知识点概述 本篇文章将深入探讨如何使用递归算法来实现整数的划分问题,并通过一个具体的C++代码示例来进行说明。递归方法是一种非常强大的工具,它允许我们通过解决更小规模的...

    Delaunay三角划分的Matlab实现

    在MATLAB中实现Delaunay三角划分,可以帮助我们进行各种科学计算、数据可视化和几何建模。以下是关于这个主题的详细知识: 1. **Delaunay三角网的概念**: Delaunay三角网是一种特殊的三角剖分,其中每个三角形的...

    整数划分问题 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。

    ### 整数划分问题概述 整数划分问题是一种经典的组合数学问题,主要研究如何将一个正整数表示为若干个正整数之和的方式。在本问题中,我们需要找到一个正整数\( n \)的所有可能的划分方式,并计算出这些划分的数量...

    有限元三维网格自动划分(源程序)

    2. 网格生成算法:如Delaunay三角化、Advancing Front方法、Frontal方法等,用于将几何模型划分为一系列的元素,如四面体、六面体等。 3. 网格优化:通过移动节点或调整元素形状,改善网格质量,使其更均匀、无扭曲...

    子网子网划分方法划分方法

    - 需要额外的子网位来划分更多的子网,假设我们决定使用3位作为子网位(即`27`位掩码),那么可以将原始的C类地址块划分为8个子网(2^3 = 8)。 - 每个子网的可用主机数变为`2^(8-3)-2 = 30`(减去网络地址和广播...

Global site tag (gtag.js) - Google Analytics