首页 > 代码库 > 产生可能集合
产生可能集合
理论:
给定一组数字或符号,產生所有可能的集合(包括空集合),例如给定1 2 3,则可能的集合為:{}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。
解法;
如果不考虑字典顺序,则有个简单的方法可以產生所有的集合,思考二进位数字加法,并注意1出现的位置,如果每个位置都对应一个数字,则由1所对应的数字所產生的就是一个集合,例如:
000 | {} |
001 | {3} |
010 | {2} |
011 | {2,3} |
100 | {1} |
101 | {1,3} |
110 | {1,2} |
111 | {1,2,3} |
瞭解这个方法之后,剩下的就是如何產生二进位数?有许多方法可以使用,您可以使用unsigned型别加上&位元运算来產生,这边则是使用阵列搜寻,首先阵列内容全為0,找第一个1,在还没找到之前将走访过的内容变為0,而第一个找到的0则变為 1,如此重复直到所有的阵列元素都变為1為止,例如:
000 => 100 => 010 => 110 => 001 => 101 => 011 => 111
package 经典;public class PossibleSet2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub char[] b={‘a‘,‘b‘,‘c‘}; possibleSet(b); } public static void possibleSet(char[] b){ int[] a=new int[b.length]; for(int each:a) each=0; while(true) { int i; System.out.print("{"); for(int k=0; k<a.length; k++) { if(a[k]==1) System.out.print(b[k]); } System.out.println("}"); for(i=0; i<a.length && a[i]==1; a[i]=0, i++) ; if(i==a.length) break; else { a[i]=1; } } }}
产生可能集合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。