我正在处理每个元素与其原始位置不同的排列。我想要一个给定{输入长度,行和数字}的算法,会给我输出数字。这是一个例子:
如果输入长度为四,则 0123 的所有排列为:
0123,0132,0213,0231,0312,0321,
1023,1032,1203,1230,1302,1320,
2013,2031,2103,2130,2301,2310,
3012,3021,3102,3120,3201,3210
没有数字在同一位置的排列(每个数字都移动了):
1032,1230,1302,
2031,2301,2310,
3012,3201,3210
编号从 0 开始,因此如果函数的输入是 {4,0,0},则输出应该是第 0(第一个)排列的第 0(最左边)数字。1032的第一位是1。
如果输入是 {4,1,1},则输出是 1230 的第二个数字,即 2。
行数可能大于排列数。在这种情况下,取余数模排列数(在上述情况下,行模 9)。
在c语言中会很棒。
(这不是家庭作业,是为了工作。Cuckoo hashing 如果你必须知道的话。我想随机选择我将在每个阶段进行的交换,看看当表数大于两个时它是否比 BFS 更好.)