`
ikeycn
  • 浏览: 146595 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java实现生成集合的所有非空子集

阅读更多
/**
	 *  生成集合的所有子集(本算法中没有把空集作为子集返回,如果需要,请自行添加)
	 * 本算法采用递归实现
	 * @param sourceSet
	 * @param result
	 */
	public void buildSubSet(List<String> sourceSet, List<List<String>> result) {
                //仅有一个元素时,递归终止。此时非空子集仅为其自身,所以直接添加到result中
		if (sourceSet.size() == 1) {
			List<String> set = new ArrayList<String>();
			set.add(sourceSet.get(0));
			result.add(set);
		} else if (sourceSet.size() > 1) {
        //当有n个元素时,递归求出前n-1个子集,在于result中
			buildSubSet(sourceSet.subList(0, sourceSet.size() - 1), result);
			int size = result.size();  //求出此时result的长度,用于后面的追加第n个元素时计数
        //把第n个元素加入到集合中
			List<String> single = new ArrayList<String>();
			single.add(sourceSet.get(sourceSet.size() - 1));
			result.add(single);          
                        //在保留前面的n-1子集的情况下,把第n个元素分别加到前n个子集中,并把新的集加入到result中;
        //为保留原有n-1的子集,所以需要先对其进行复制
			List<String> clone;
			for (int i = 0; i < size; i++) {
				clone = new ArrayList<String>();
				for (String str : result.get(i)) {
					clone.add(str);
				}
				clone.add(sourceSet.get(sourceSet.size() - 1));

				result.add(clone);
			}
		}
	}
1
2
分享到:
评论
1 楼 541732025 2010-06-28  
顶!沙发!

相关推荐

    apriori算法的java代码

    Apriori算法的核心思想是基于“频繁项集”的封闭性:如果一个项集是频繁的,那么它的所有非空子集也必须是频繁的。这个性质允许我们通过迭代的方式逐步降低项集的大小,直到找到所有的频繁项集。以下是Apriori算法的...

    基于Java的频繁项集提取算法设计与实现.pdf

    该算法基于一个重要的原则:一个频繁项集的所有非空子集也必须是频繁的。这一特性极大地减少了搜索空间,从而提高了算法效率。 在Java实现中,算法设计涉及到多个类的创建和定义。例如,Item类用于表示单个数据项,...

    数据挖掘Apriori算法源代码 Java

    3. **Apriori性质**:这是算法的核心原则,指出如果一个项集是频繁的,那么它的所有非空子集也必须是频繁的。这允许算法在早期阶段排除不可能成为频繁项集的候选集,减少计算量。 4. **生成候选集**:通过连接频繁项...

    数据挖掘apriori-java.

    关联规则通常表示为:“如果项集X发生,那么项集Y也倾向于发生”,其中Y是X的非空子集。关联规则的强度由两个度量决定:支持度和支持度基础上的置信度。置信度是X和Y同时出现的概率,计算公式为:`置信度 = 支持度(X...

    数据挖掘中的Apriori算法

    2. 生成候选集:根据Apriori性质(如果一个项集是频繁的,那么它的所有非空子集也必须是频繁的)生成更大长度的候选集。 3. 计算支持度:对每个候选集计算其在数据集中出现的频率,即支持度。 4. 确定频繁集:如果候...

    关联规则 apriori

    关联规则通常表示为“如果X发生,那么Y也会发生”,其中X和Y是频繁项集,且Y是X的非空子集。规则的可信度(置信度)是规则发生的频率除以X发生的频率。 在Java代码中,`Apriori.java`文件可能会包含以下关键组件: ...

    Java实现洗牌发牌的方法

    在Java编程中,实现洗牌发牌的过程涉及到数组的操作、随机数生成以及列表的管理。这里我们将深入探讨如何使用Java来创建一个简单的扑克牌洗牌和发牌系统。 首先,我们需要定义扑克牌的结构。在这个例子中,我们使用...

    java的要点

    将另一个非空子序列剩余的部分复制到result中。 - **复杂度分析:**时间复杂度为O(n),空间复杂度为O(n)。 #### 八皇后问题 八皇后问题是经典的回溯算法应用示例。目标是在8×8的棋盘上放置八个皇后,使得任意两...

    Data Structures and Algorithms in C++ 2nd Edition

    6. 树是一种分层的数据结构,它包含一个根节点以及0个或多个非空子树,这些子树被统称为原始树的子节点。在C++中,树结构可以使用节点指针来创建。 7. 图是一种由节点(称为顶点)和连接顶点的边组成的非线性数据...

    算法:算法解决方案

    - **最长公共子序列(LCS)**:找出两个序列的最长非空子序列,不考虑子序列的相对位置。 - **斐波那契数列**:通过前两项之和得到下一项,经典的动态规划实例。 6. **贪心算法**: - **Prim算法**:最小生成树...

Global site tag (gtag.js) - Google Analytics