Algorithm 可以使用给定的一组数字生成的固定长度的不同序列的数目

Algorithm 可以使用给定的一组数字生成的固定长度的不同序列的数目,algorithm,set,permutation,combinatorics,sequences,Algorithm,Set,Permutation,Combinatorics,Sequences,我试图找到固定长度的不同序列,这些序列可以使用给定集合(不同元素)中的数字生成,这样集合中的每个元素都应该出现在序列中。以下是我的逻辑: 假设集合由S个元素组成,我们必须生成长度为K(K>=S)的序列 1) 首先,我们必须从K中选择S个位置,并以随机顺序放置集合中的每个元素。所以,C(K,S)*S 2) 之后,可以从集合中的任何值填充剩余的位置。那么,这个因素, (K-S)^S应该相乘 所以,总体结果是 C(K,S)S!((K-S)^S) 但是,我得到了错误的答案。请帮忙 PS:C(K,S):从

我试图找到固定长度的不同序列,这些序列可以使用给定集合(不同元素)中的数字生成,这样集合中的每个元素都应该出现在序列中。以下是我的逻辑:

假设集合由S个元素组成,我们必须生成长度为K(K>=S)的序列

1) 首先,我们必须从K中选择S个位置,并以随机顺序放置集合中的每个元素。所以,C(K,S)*S

2) 之后,可以从集合中的任何值填充剩余的位置。那么,这个因素,

(K-S)^S应该相乘

所以,总体结果是

C(K,S)S!((K-S)^S)

但是,我得到了错误的答案。请帮忙

PS:C(K,S):从K个元素(K>=S)中选择S个元素的方法的数量,与顺序无关。此外,^:电源符号,即2^3=8

以下是我用python编写的代码:

# m is the no. of element to select from a set of n elements
# fact is a list containing factorial values i.e. fact[0] = 1, fact[3] = 6& so on. 
def ways(m,n):
    res = fact[n]/fact[n-m+1]*((n-m)**m)
    return res

您要查找的是满射函数的数量,其域是一组K元素(我们在输出序列中填充的K个位置),图像是一组S元素(您的输入集)。我认为这应该奏效:

    static int Count(int K, int S)
    {
        int sum = 0;
        for (int i = 1; i <= S; i++)
        {
            sum += Pow(-1, (S-i)) * Fact(S) / (Fact(i) * Fact(S - i)) * Pow(i, K);
        }
        return sum;
    }
静态整数计数(整数K,整数S)
{
整数和=0;

对于(int i=1;i那是什么语言?虽然这个问题是用python提出的,但它看起来像C#。是的,它是C#。我相信海报会解决这个问题。我会发布一个更简单的版本。@svinja我尝试过你的方法,但它给出了错误的答案。我用C#实现了整个逻辑,以确保这不是语言问题。但是,它总是给出0作为答案回答。这是指向C#实现的链接,请看一看。@NewUser,函数Count的第一个参数是K,第二个参数是s,K>=s。因此我认为您确实希望调用Count(5,1),而不是Count(1,5)。这将返回1,这是正确的(只有1个元素,所以唯一的解决方案是重复5次)@svinja这是python的问题。实际上,pow(-1,2)即-1**2给了我-1。所以,我得到了错误的答案。谢谢你的帮助。这不是一个数学问题吗?我的意思是,你的公式错了,还是实现它的代码错了?@LasseV.Karlsen我的公式错了。