子集树

定义:子集树顾名思义就是一个集合s的子集的集合,当一个问题是从n个元素中找出满足某种性质的子集时,相应的解空间即成为子集树,时间复杂度为O(n^2)
下边我们我们用一段简单的递归回溯代码比创建一颗树(类似于BST树的遍历方式):

 public static void main(String[] args) {int[] arr = {1, 2, 3};backstrace(arr, 0, arr.length);System.out.println();}public static void backstrace(int[] arr, int i, int length) {if (i == length) {for (int j = 0; j < arr.length; j++) {System.out.print(arr[j] + " ");}}else {backstrace(arr, i + 1, length);backstrace(arr, i + 1, length);}}

输出结果:

"C:\Program Files\Java\jdk1.8.0_121\bin\java.exe" -javaagent:C:\IDEA\lib\idea_rt.jar=31950:C:\IDEA\bin -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;C:\IDEAproject\HellloWorld\out\production\HellloWorld" 数据结构之子集树.childTree
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Process finished with exit code 0


{1,2,3}的子集分别为{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3};
因此我们需要在上边的代码中加入状态位0和1:0代表是右孩子的节点,1代表左孩子的节点,做上标记之后的树

因此只输出带有1标记的元素,最后会输出所有的子集
改进代码如下

 public static void main(String[] args) {int[] arr = {1, 2, 3};int []x=new int [arr.length];//记录状态位backstrace(arr, 0, arr.length,x);System.out.println();}public static void backstrace(int[] arr, int i, int length,int[]x) {if (i == length) {for (int j = 0; j < arr.length; j++) {if (x[j]==1){System.out.print(arr[j] + " ");}}System.out.println();}else {x[i]=1;//状态位1,向左孩子遍历backstrace(arr, i + 1, length,x);x[i]=0;//状态位0,向左孩子遍历backstrace(arr, i + 1, length,x);}}

运行结果如下:

"C:\Program Files\Java\jdk1.8.0_121\bin\java.exe" -javaagent:C:\IDEA\lib\idea_rt.jar=32116:C:\IDEA\bin -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;C:\IDEAproject\HellloWorld\out\production\HellloWorld" 数据结构之子集树.childTree
1 2 3
1 2
1 3
1
2 3
2
3
Process finished with exit code 0

数据结构算法之子集树相关推荐

  1. 数据结构及算法 | Java数据结构——回溯算法之子集树

    1.介绍一下子集树,什么是子集树? 当所给问题是从n个元素的集合S中找出满足某些条件或者性质的子集时,解空间是子集树: 比如典型的0-1背包问题-----and-----轮船装载问题: 解空间 就是指 ...

  2. 回溯子集树与排列树——装载问题旅行售货员问题(算法设计课题)

    *对回溯法不是很理解的请移步博客http://blog.csdn.net/sm9sun/article/details/53244484 掌握了回溯法以后,我们给出两种定义: 当所给问题是从n个元素的 ...

  3. 目录树 删除 数据结构_互联网发布:最详细的《数据结构算法核心总结》,图文并茂超清晰...

    数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作.算法是为求解一个问题需要遵循的.被清楚指定的简单指令的集合. 而算法是对解题方案的准确而完整的描述,是一系列解决 ...

  4. 数据结构—回溯法、子集树、排列树

    文章目录 回溯法 问题的解空间 递归回溯 迭代回溯 子集树与排列树简单介绍 轮船装载问题 0-1背包问题 八皇后问题 整数求和(1) 整数求和(2) 全排列 回溯法 回溯法是一种以深度优先方式系统搜索 ...

  5. 算法与数据结构07:前缀树,计数排序与桶排序

    算法与数据结构07:前缀树,计数排序与桶排序 前缀树 计数排序 桶排序 前缀树 Trie 1.根据字符串数组中,每个字符串的字符作为路径,组成而成的一个多叉树结构 2.每个节点都有一个paths数组, ...

  6. 数据结构与算法之2-3-4树

    数据结构与算法之2-3-4树 原文来自个人博客(求访问/关注/收藏): https://bbing.com.cn/ CSDN个人博客不定期转载 平衡树 [外链图片转存失败,源站可能有防盗链机制,建议将 ...

  7. 『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)!

    『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)! 文章目录 一. 树 1.1. 树的定义 1.2. 树的基本术语 1.3. 树的性质 二. 二叉树 2.1. 二叉树的定义 2. ...

  8. 静态树表查找算法及C语言实现,数据结构算法C语言实现(三十二)--- 9.1静态查找表...

    一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...

  9. 数据结构之查找算法:B+树

    查找算法:B+树 B+树的定义:(数据库中应用) B树与B+树的区别: B+树的定义:(数据库中应用) 例: ps:这是一颗四阶树,所以每个节点最多可以有4颗子树 ps:每个节点的关键字都不能小于2 ...

最新文章

  1. Excel百万数据导入oracle,excel表数据导入oracle的方法!(超级有用)
  2. 曾经案例中问题 与 工厂模式解耦
  3. Github用户注册流程
  4. react生命周期函数_如何优雅的消灭掉react生命周期函数
  5. 循环的各种形式(不拘一格编程序之四)
  6. javascript实现jsonp跨域问题+原理
  7. 大数据_Hbase_面试题0001
  8. 微机课设 | 基于STC15单片机的简易数字密码锁设计
  9. Java中涉及到和金钱有关的属性的类型
  10. SpringBoot2——web开发(组件使用)
  11. 《雪鹰领主3D》昨日腾讯玩吧首发! HTML5进入3D游戏时代!
  12. 我的世界服务器信号下面是红,适用于服务器的红石抽奖机我的世界抽奖机电路图...
  13. 什么叫做社交电商,社交电商怎么做?
  14. 用Python获取Amazon亚马逊的商品信息
  15. Python-实现语音识别并批处理标注(重命名)文件
  16. QRowTable表格控件-支持hover整行、checked整行、指定列排序等
  17. migo初始化库存 s4_SAP项目用户操作手册-MIGO 货物移动.docx
  18. linux下WMB通过ODBC连接DB2数据库
  19. matlab2012仿真电路图,MATLAB电路仿真搭建教程
  20. 滚石30年演唱会全纪录

热门文章

  1. 推荐几款优秀的网页聊天工具
  2. c语言出现开头结尾多空格,C语言除去字符串开头和末尾空格之trim()函数的实现...
  3. Openstack中使用iso安装系统并启动vm
  4. 英语人机考试计算机算分吗,过来人跟你说说英语人机对话考试的经验
  5. matlab凯塞窗低通fir滤波器,基于Matlab的FIR滤波器设计与实现
  6. test_and_set_bit
  7. 小米实习生笔试题风口的猪-中国牛市Java代码
  8. Java 编程技巧之样板代码
  9. 美国总统拜登下令降半旗悼念枪击案遇难者
  10. TreeView添加treeView1_NodeMouseClick----多么痛的领悟。。。