【问题标题】:Printing n choose k combinations in matlab在matlab中打印n选择k个组合
【发布时间】:2019-12-01 12:50:16
【问题描述】:

我需要在 matlab 中创建一个algorithm,它返回 k 集中 n 个子集的任意组合。例如,我有一个集合 {1,2,3,4,5},我需要包含在这个集合中的 3 个数字的任意组合。所以这个函数应该返回:

[[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]]

我曾尝试自己写,但没有成功,我放弃了。它部分有效,但会造成无限循环。

for i=1:n
    if(firstTime)
        lastComb=min //123
        firstTime=false
    else
        for d=k:-1:1
            while(lastComb(:,end) < n-k+d && lastComb(:,end)<=n)
                newComb=lastComb
                newComb(d)=lastComb(d)+1
                combos= [combos; newComb]
                lastComb=newComb
            end
            while(lastComb(:,end) > n-k+d && lastComb(:,end)<=n)
                newComb=lastComb
                for p=d:-1:1

                    if(newComb(p)+1 <=n)
                        newComb(p)=newComb(p)+1
                        combos= [combos; newComb]
                    end
                end
            end
        end
    end
end

【问题讨论】:

  • // 不是有效的 MATLAB 语法。你确定你在这里运行代码吗?还请包括变量的初始化。您需要复制粘贴我们可以运行的完整代码。见minimal reproducible example
  • 如果您需要的只是一个可以完成您可以使用的工作的函数:nchoosek
  • 你试过nchoosek(1:5,3)吗?

标签: matlab combinations


【解决方案1】:

总体而言,您的语法有点混乱(正如其他人之前所说的那样)。如果您在此处发布问题,最好包含所有代码,包括定义的变量,以便于帮助您。

我看到的一些主要问题如下:

(1) 您似乎只得到“n”个组合与您正在编写的内容,我认为这是 3 个组合。相反,您应该得到 10 种组合。这个函数的开头大概应该有一个组合计算[nCk = n!/((n-k)!*k!)]。

(2) 您将第一个组合定义为 1,2,3,但随后您没有将其添加到您正在制作的“组合”集合中。取而代之的是,在它达到“组合”之前将其替换为其他东西。

还有一些,但尝试修复这些部分,其他部分可能会自然而然。

总的来说,这个功能已经存在。如果遇到困难,只需在 MATLAB 中输入“open nchoosek”即可查看您正在尝试的改进版本!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多