[概率与数理统计] 对于子集和二进制的关系论述

对于子集和二进制的关系论述


前言:

最近在力扣刷题的时候总是碰到需要遍历子集的类似问题,然后看到了一个比较巧妙的方式在这里总结论述一下


子集:

现有集合U,若存在集合A切A中的所有元素在U中都可以找到,那么集合A为元素U的子集。

根据上述内容来说,我们可以了解到对于一个集合的子集,我们可以对每一个元素进行选择,每一个元素都有选择或者不选择两种状态,而对于两种状态来说,我们可以类比到二进制的0和1,所以我们可以构建一个长度为集合U元素个数的二进制数来进行集合子集遍历。即从0到2^U.length的遍历,而二进制的1代表集合中选中的元素。

代码实现-遍历

遍历
       for(int i=0;i< 1<<nums.length;i++){//遍历集合
            for(int j =0 ;j<nums.length;j++){//查找选中的元素
                if(((i >> j)&1)==1){
                    /**
                     * 选择的元素nums[j]
                     */
                }
            }
        }

代码实现-递归

递归
     dfs(int x){
        if(x == set.length){
        /**
           *边界回溯条件
           */
        }
        dfs(x+1,true);//true和false根据题目完成对应需求
        dfs(x+1,false);
    }
posted @ 2022-03-15 16:00  什么塞瓦定理啊  阅读(107)  评论(0)    收藏  举报