3

我有两个数组,一个包含顶级类别,另一个包含子类别,其中子类别的长度 > 顶级类别的长度。

我正在尝试编写一个递归算法,为我提供所有可能的方式,我可以将子类别放入顶级类别中。因此,例如,如果我有顶级类别[A,B,C]和子类别,[W,X,Y,Z]我会得到:

A->WXYZ, B->null, C->null
A->XYZ,  B->W,    C->null
A->WYZ,  B->X,    C->null
...
A->null, B->Z,    C->WXY
A->null, B->null, C->WXYZ

乍一看,我认为这个问题不能用典型的置换算法来解决,但我可能错了;我不太擅长递归。

谢谢!

4

2 回答 2

6

你不需要排列,也不需要递归,你只需要计数。假设您有 N 个类别和 M 个子类别 - 您需要遍历以 N 为底的所有 M 位数字。

让我们采用您的 3 个类别,但称它们为 0、1 和 2 - 即所有以 3 为底的数字。现在让我们看看以 3 为底的所有 4 位数字:

0000, 0001, 0002, 0010, 0011, 0012, ... , 2212, 2220, 2221, 2222

每个数字代表子类别对类别的分配,如下所示 - 第一个数字用于子类别 W,第二个数字用于子类别 X,第三个数字用于子类别 Y,最后一个数字用于子类别 Z。

因此,0000 表示 WXYZ 属于第一类(示例中的第一行)。1000 是您的第二行,2222 是您的最后一行,依此类推。

于 2012-06-08T21:43:10.323 回答
1

这实际上是一个排列问题,就像你想象的那样。

您有 N 个子类别需要放入 M 个类别中。这与星级和酒吧问题非常相似。

我可以写一些代码,但我认为你读一读会很好。

于 2012-06-08T19:25:44.243 回答