【问题标题】:find all possible element combinations containing the last element in matlab在matlab中找到包含最后一个元素的所有可能元素组合
【发布时间】:2014-08-01 12:26:30
【问题描述】:

我有一个向量 [x1, x2,...xn]。有没有办法找到包含最后一个元素 xn 的元素的所有可能组合?例如,如果我有 4 个元素,我想要组合:

x1,x4

x2,x4

x3,x4

x1,x2,x3,x4

x1,x2,x4

x1,x3,x4

x2,x3,x4

实际上,虽然我有多达数百个元素。

感谢您的宝贵时间!

【问题讨论】:

  • 您只需要排列的数量还是排列本身?如果你有数千个元素并且需要所有排列,你也需要很大的耐心:p
  • 第二个@Ghaul,你也需要很多内存。仅仅 100 个元素,就有超过 6e29 种可能的组合......
  • 你需要这些组合做什么?
  • 1000 个元素有 2^999-1 = 5.35e300 这些组合。你可能想对每个组合做一些事情。即使每个组合只需要几皮秒,这也比宇宙的年龄要大得多。你需要重新考虑你的问题

标签: matlab vector combinations elements


【解决方案1】:

你真的只需要选择所有元素除了最后一个。

C = cell(length(x)-1,1);
for n = 1:length(x)-1
    C{n} = nchoosek(x(1:end-1),n);
end

C 的每个元素都包含带有n 元素的所有可能向量。您所要做的就是将x(end) 添加到每个人,以获得您想要的东西。例如,如果combo=C{4}(7,:) 是一个没有x 的最后一个元素的解集,那么您想要的输出是combo=[combo x(end)]。要对所有解决方案执行此操作,只需在上面的循环中添加这行代码:

C{n} = [C{n} x(end)*ones(size(C{n},1),1)];

警告:有数千个元素会很快耗尽内存。仅 100 个元素就可以为您提供超过 6e29 种可能的组合!

【讨论】:

  • 抛开实际问题不谈,因为我要过滤我的数据,所以 od 元素的数量会急剧减少,你能解释一下''tack on x(end)''是什么意思吗?谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多