使用递归的可能分类

时间:2012-06-08 18:21:50

标签: algorithm recursion

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

我正在尝试编写一个递归算法,为我提供了将子类别放入顶级类别的所有可能方法。因此,举例来说,如果我有顶级类别[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

乍一看,我不认为这个问题可以通过典型的排列算法来解决,但我可能是错的;递归时我不太好。

谢谢!

2 个答案:

答案 0 :(得分:5)

您不需要排列,也不需要递归,只需要计算。假设您有N个类别和M个子类别 - 您需要查看基数N中的所有M位数字。

让我们看看你的3个类别,但称它们为0,1和2 - 即base-3中的所有数字。现在让我们看看基数3中的所有4位数字:

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

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

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

答案 1 :(得分:1)

这实际上是你想象的排列问题。

您有N个子类别需要放入M类别。这与stars and bars problem非常相似。

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