【发布时间】:2012-11-28 05:37:30
【问题描述】:
对于 k 的某些值,我需要在所有 combinations 上迭代从包含 N 个项目的向量 V 中取出 k 个项目。例如,如果 N = 6 和 k = 3,那么我必须在项目 V1、V2 和 V[3] 上调用 F(),然后在项目 V1、V2 和 V[ 上调用 F() 4],以V[4]、V[5]和V[6]结尾。
现在,浏览索引的所有组合很容易。假设 k = 3 和 N = 6。那么第一个元素可以从 1 到 N-(k-1),第二个从 2 到 N-(k-2),第 k 个从 k 到 N(即 N -(k-k))。
因此,对于 k = 3,循环将是:
for (uint a = 1, a <= N-2, a++)
for (uint b = a + 1, b <= N-1, b++)
for (uint c = b + 1, c <= N, c++)
F(V[a], V[b], V[c])
并且,对于 k = 4,迭代将是:
for (uint a = 1, a <= N-3, a++)
for (uint b = a + 1, b <= N-2, b++)
for (uint c = b + 1, c <= N - 1, c++)
for (uint d = c + 1, d <= N, d++)
F(V[a], V[b], V[c], V[d])
然而,问题是:如何在不硬编码(或使用代码生成)的情况下为任意 k 完成 k 级嵌套?
编辑:关于背景(又名这不是家庭作业 :))请参阅 Hans Engler 对我的 Math Stackexchange 问题的回答: 0-1 knapsack like - the set of all non-contained affordable binary selections
编辑:我将提供一个示例。假设 V= {1,2,3,4,5}。
对于 k=2,我希望按以下顺序调用 F:F(1,2), F(1,3), F(1,4), F(1,5), F(2, 3)、F(2,4)、F(2,5)、F(3,4)、F(3, 5) 和 F(4,5)。
对于 k=3,我希望按以下顺序调用 F:F(1,2,3), F(1,2,4), F(1,2,5), F(2,3 ,4,), F(2,3,5), F(3,4,5)
【问题讨论】:
-
做自己的功课可能意味着你实际上对手头的问题有所了解。#
-
我必须承认我没有完全理解这个问题,但听起来你需要一个递归函数来解决这个问题。只需传入
k的值以及循环之间不同的任何其他值。 -
@ChrisBint 我希望我还年轻,甚至可以做作业 :)
标签: combinations