Algorithm 计数序列数
问题是:Algorithm 计数序列数,algorithm,math,combinations,permutation,discrete-mathematics,Algorithm,Math,Combinations,Permutation,Discrete Mathematics,问题是: 给定一个正整数序列a={1,2,3,…,N}。对给定的N进行K次相邻交换后,计算可以得到的序列数? 我的方法: 我解决这样一个编程问题的算法非常幼稚。我只能考虑进行所有可能的k交换,然后计算序列 有谁能帮我找到更好的算法吗?反演 这种类型的问题(交换相邻元素)的关键是考虑每次交换后置换中的倒数。 如果a[i]>a[j]且i
给定一个正整数序列a={1,2,3,…,N}。
对给定的N进行K次相邻交换后,计算可以得到的序列数?
我的方法:
我解决这样一个编程问题的算法非常幼稚。我只能考虑进行所有可能的k交换,然后计算序列
有谁能帮我找到更好的算法吗?反演
这种类型的问题(交换相邻元素)的关键是考虑每次交换后置换中的倒数。
如果a[i]>a[j]且i
row = mahonian_row(N)
print sum(row[n] for n in range(K+1) if n%2==K%2 and n<len(row))
row=mahonian_行(N)
打印范围(K+1)中n的总和(第[n]行)如果n%2==K%2,nPerhaps将这个问题转移到:似乎是非常基本的问题和统计。如果它是任意两个元素的交换而不是相邻元素的交换呢?在这种情况下,你应该开始考虑置换的循环分解。置换的循环分解会告诉你需要多少非相邻的交换(通过简单地从循环的长度中减去1),那么您将计算出可能分解为具有长度约束的循环的数量。这很可能涉及Pascal三角形中的条目之和,而不是Mahonian三角形。