Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# N个元素子集划分为K个桶的算法_C#_Algorithm - Fatal编程技术网

C# N个元素子集划分为K个桶的算法

C# N个元素子集划分为K个桶的算法,c#,algorithm,C#,Algorithm,我尝试实现的方法如下 /* e.g. {1, 2, 3}, k = 2 ---> [ (), () ], [ (1), () ], [ (), (1) ], [ (2), () ], [ (), (2) ], [ (3), () ], [ (), (3) ], [ (1), (2) ], [ (2), (1) ],

我尝试实现的方法如下

/*
    e.g. {1, 2, 3}, k = 2

    ---> 

        [ (), () ],
        [ (1), () ],
        [ (), (1) ],
        [ (2), () ],
        [ (), (2) ],
        [ (3), () ],
        [ (), (3) ],
        [ (1), (2) ],
        [ (2), (1) ],
        [ (1), (3) ],
        [ (3), (1) ],
        [ (2), (3) ],
        [ (3), (2) ],
        [ (1,2), () ],
        [ (2,3), () ],
        [ (1,3), () ],
        [ (), (1,2) ],
        [ (), (1,3) ],
        [ (), (2,3) ],
        [ (1,2), (3) ],
        [ (2,3), (1) ],
        [ (1,3), (2) ],
        [ (3), (1,2) ],
        [ (1), (2,3) ],
        [ (2), (1,3) ],
        [ (1,2,3), () ],
        [ (), (1,2,3,) ]

*/

    public static List<List<T>> SpecialPartition<T>(this List<T> source, int k)
    {
        throw new NotImplementedException();
    }
/*
e、 g.{1,2,3},k=2
---> 
[ (), () ],
[ (1), () ],
[ (), (1) ],
[ (2), () ],
[ (), (2) ],
[ (3), () ],
[ (), (3) ],
[ (1), (2) ],
[ (2), (1) ],
[ (1), (3) ],
[ (3), (1) ],
[ (2), (3) ],
[ (3), (2) ],
[ (1,2), () ],
[ (2,3), () ],
[ (1,3), () ],
[ (), (1,2) ],
[ (), (1,3) ],
[ (), (2,3) ],
[ (1,2), (3) ],
[ (2,3), (1) ],
[ (1,3), (2) ],
[ (3), (1,2) ],
[ (1), (2,3) ],
[ (2), (1,3) ],
[ (1,2,3), () ],
[ (), (1,2,3,) ]
*/
公共静态列表SpecialPartition(此列表源,int k)
{
抛出新的NotImplementedException();
}

我首先想知道是否有一些已知的(Donald Knuth?)算法可以做到这一点。注意桶的顺序是怎样的,例如,我考虑<代码>(1,2),(3)< /代码>和<代码>(3),(1,2)< /代码>作为单独的结果。

< P>注意,每个元素都可以占用一个<代码>(K+ 1)< /代码>位置(k桶和任何桶中的一个位置)。p> 因此有
M=(K+1)^N个
组合(这里
(2+1)^3=27个变体
),范围
0..M-1
中的每个数字对应唯一的组合(一对一映射)

所以,生成所有组合的简单方法是对范围
0..M-1
进行循环,并在(K+1)进制数字系统中表示循环计数器

for C = 0..M-1
   d = C
   for i = 0..N-1
     Bucket for i-th element = d %% (K+1)
     d = d / (K+1)
例如,2110=2103可能被映射:第二个bucket中的第一个元素、第一个bucket中的第二个元素以及第三个元素处于关闭状态:
[(2)、(1)]

1610=1213:
[(1,3)、(2)]