如何在matlab中访问幂集?

How to access a power set in matlab?

给定一个数据集 {1,2,...,50},我想编写一个 for 循环,以便在每个循环中,我可以访问一个向量,该向量可能表示 {1,2, ...,50}。例如,在第一次迭代中,我可能会得到一个向量 [1,0,...,0] 并且我知道它等效于取一个元素 1 形成一个子集。在第二次迭代中,我可能会得到一个向量 [0,1,0,...,0] 这样它就相当于取一个元素 2 形成一个子集。我希望 for 循环可以 运行 遍历幂集中的所有子集,这样在每个循环中,它都会给出一个条目为 0 或 1 的向量,以便我可以知道相应的子集。可以吗?

首先,关于

的说法

I hope the for loop can run over all the subsets in the power set

我不确定这是否是个好主意,因为即使在您给出的情况下, {1, 2, ..., 50},也有 2^50(请注意,这大于 1e15) 子集,这只是您无法在合理时间内进行的迭代次数。

虽然对于较小的集合(对于 {1,...,18} 来说工作得足​​够快),我认为一种可能的方法是使用类似于此的递归解决方案:

function v=subsets(x)
    %%% x should be of size Mx1, with size(x,1)>0

    if ((size(x,1))==1)
        v={x,[]};

    else
        u=subsets(x(2:end,1));
        N=size(u,2);
        for i=1:N
            u{end+1}=[x(1,1) u{i}];
        end
        v=u;
    end

我已经使用元胞数组编写了它,但我认为使用与您描述的二进制变量向量类似的解决方案不会有太大困难。