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]); } }
相关推荐
实现2-7集合划分问题.cpp
整数划分问题的实现代码 整数划分问题是将一个正整数 n 拆成一组数连加并等于 n 的形式,且这组数中的最大加数不大于 n。这是一种经典的组合数学问题,具有重要的理论价值和实践应用价值。 在解决整数划分问题时,...
这通常在递归算法中实现,但也可以与动态规划结合,通过记录划分过程中的决策路径来实现。 总结来说,整数划分问题的C语言实现涉及到递归和动态规划两种主要方法。虽然递归算法更直观,但动态规划在效率和空间...
例如,整数4可以划分为{4}、{3,1}、{2,2}、{2,1,1}和{1,1,1,1}等几种方式。 在中国科学技术大学软件学院开设的《算法设计与分析》课程中,整数划分问题被设为实验题,目的在于引导学生深入探索算法的设计、实现以及...
在这个Python3实现的压缩包中,包含了多种社区划分算法,包括KL算法、COPAR、Louvain算法、LFM算法以及InfoMap算法。这些算法各有特点,下面我们将详细探讨它们的原理和应用。 1. KL算法(Kernighan-Lin算法): ...
2. 当集合为空时,表示当前子集是一个有效的划分,将其添加到结果列表中。 3. 对集合中的每个元素,递归调用自身:将元素添加到当前子集,然后处理剩下的元素;再创建一个新的子集,处理剩下的元素。 4. 在递归返回...
此外,这个简单的实现没有考虑部分的顺序,也就是说,(1, 2, 3) 和 (3, 2, 1) 被视为不同的划分。如果需要去除重复的划分,可以在递归过程中加入排序的步骤。 以上就是整数划分问题的C语言实现基础介绍。这个算法...
若要将这个网络划分为4个子网,我们可以通过增加子网位来实现,如借用3位主机位作为子网位,这样新的子网掩码就是255.255.255.224。 子网掩码计算器可以自动完成这些复杂的计算。用户只需要输入原始的IP地址和所需...
集合划分问题 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++代码示例来进行说明。递归方法是一种非常强大的工具,它允许我们通过解决更小规模的...
在MATLAB中实现Delaunay三角划分,可以帮助我们进行各种科学计算、数据可视化和几何建模。以下是关于这个主题的详细知识: 1. **Delaunay三角网的概念**: Delaunay三角网是一种特殊的三角剖分,其中每个三角形的...
2. 网格生成算法:如Delaunay三角化、Advancing Front方法、Frontal方法等,用于将几何模型划分为一系列的元素,如四面体、六面体等。 3. 网格优化:通过移动节点或调整元素形状,改善网格质量,使其更均匀、无扭曲...
- 需要额外的子网位来划分更多的子网,假设我们决定使用3位作为子网位(即`27`位掩码),那么可以将原始的C类地址块划分为8个子网(2^3 = 8)。 - 每个子网的可用主机数变为`2^(8-3)-2 = 30`(减去网络地址和广播...
### 整数划分问题概述 整数划分问题是一种经典的组合数学问题,主要研究如何将一个正整数表示为若干个正整数之和的方式。在本问题中,我们需要找到一个正整数\( n \)的所有可能的划分方式,并计算出这些划分的数量...