n个空间中4个对象排列的递归算法

时间:2011-09-16 04:42:35

标签: java recursion permutation

我已经解决了下面显示的以下算法。

public static long park(int n)
{
   // precondition:  n >= 1
   // postcondition: Return the number of ways to park 3 vehicles,
   //   designated 1, 2 and 3 in n parking spaces, without leaving
   //   any spaces empty. 1 takes one parking space, 2 takes two spaces,
   //   3 takes three spaces. Each vehicle type cannot be distinguished
   //   from others of the same type, ie for n=2, 11 counts only once.
   //   Arrangements are different if their sequences of vehicle types,
   //   listed left to right, are different.
   //   For n=1:  1 is the only valid arrangement, and returns 1
   //   For n=2:  11, 2                     are arrangements and returns 2
   //   For n=3:  111, 12, 21, 3            are arrangements and returns 4
   //   For n=4:  1111,112,121,211,22,13,31 are arrangements and returns 7


    if(n==1)
        { return 1; }
    else if(n==2)
        { return 2; }
    else if(n==3)
        { return 4; }
    else
        {
        return (park(n-1) + park(n-2) + park(n-3));
        }
}

我需要帮助的是找出一个后续问题,即在排列中包括空的停车位。这应该以递归方式解决。

Let's designate a single empty space as E.
For n=1:  1,E                and returns 2
For n=2:  11,2,EE,1E,E1      and returns 5
For n=3:  111,12,21,3,EEE,EE1,E1E,1EE,11E,1E1,E11,2E,E2     and returns 13
For n=4:  there are 7 arrangements with no E, and 26 with an E, returns 33

我花了很多时间在这上面。我知道有多少安排,没有上述算法的空白空间。所以我一直试图找出有多少个空位的安排。这两套联合应该给我答案。 对于n,具有一个或多个空空格的单个空间排列的数量是2 ^ n-1。 但我认为这不会帮助我进行递归解决方案。

任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为这有效:

public static long park(int n)
{
    if(n==1)
        { return 2; }
    else if(n==2)
        { return 5; }
    else if(n==3)
        { return 13; }
    else
        {
        return (park(n-1) + park(n-1) + park(n-2) + park(n-3));
        }
}

答案 1 :(得分:0)

为了简单起见,我将解释N< 3使用递归。

对于一个空格,有两种情况,E和1,所以当n = 1时,它应该是2.

当它为2时,它应该返回1 + park(1)+ park(1),因为2是2,1E,E1,11,当它是2时仍然可以。

当它是3时,它应该返回1 + park(2)+ park(1)+ park(1)+ park(2)+ park(1)+ park(1)+ park(1)但是你可以看,在公园(1)+公园(2)和公园(2)+公园(1)将不止一次计算一些情况。你必须删除所有这些重复。

我认为这不是处理这个问题的好方法。

数学会更容易。

考虑空槽是N1,1槽槽车是N2,2槽车是N3,3槽车是N4。

N1 + N2 + 2 * N3 + 3 * N4 = N

我认为你可以自己解决其余问题。