Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Algorithm 置换算法的形式为_Algorithm_Permutation - Fatal编程技术网

Algorithm 置换算法的形式为

Algorithm 置换算法的形式为,algorithm,permutation,Algorithm,Permutation,因此,我们想举个例子: R= repeats allowed -> 2 A= alphabet (1-10) S= space = 4; 但是需要一个奇特的数学公式来计算这个和所有的组合吗?可能的解决方案相对较少(2,1,1,4,4也无效,因为如果有任何意义,会有多个重复!重复必须是连续的吗?如果R=2,是否允许5,1,4,1?@Pete:不,它们可以在任何地方,所以5,1,4,1是可以的;)标题写的是排列,但正文写的是组合。这是哪一个?ja也考虑过使用蛮力方法,但想要一个更“聪明”的解

因此,我们想举个例子:

R= repeats allowed -> 2
A= alphabet (1-10)
S= space = 4;

但是需要一个奇特的数学公式来计算这个和所有的组合吗?

可能的解决方案相对较少(<10000),因此可以生成^4中的所有单词,然后删除重复次数超过2次的单词

  • 生成N个不同单词的(有序)组合
  • 生成该子集的排列,以获得所有不重复的可能性

  • 对N-1个单词也这样做

  • 对于这些单词中的每个元素,在除所述字符位置之外的所有位置添加一个副本

  • 据我所知,你的字母表是1。。10,每个“字母”可能出现两次。所以你真正拥有的是一个字母表

    [1][1][4][5]
    [1][7][4][5]
    [5][1][4][5]
    
    它的长度是20,而不是10

    问题现在变成了20个排列4

    希望这有帮助

    编辑: 根据您对问题的补充意见,您可以检查每个生成的排列是否为XXYY形式,因为根据您所写的内容,这将是无效的。

    总数为
    N*[(S选择1)*((N-1)排列(S-1)) +(S选择2)*((N-1)排列(S-2)) + ... +(S选择R)*((N-1)排列(S-R))]

    • 换句话说,可能最好修复1 重复项的位置(
      S
      选择1
      不同的操作方法 这)并排列剩余的
      N-1
      S-1
      剩余空间上的项目;(与正常的
      N排列相同

    • 然后将两个相同的项目固定在 放置(
      S选择2种不同的放置方式
      执行此操作)并排列剩余的
      
      N-1
      剩余
      S-2
      空格上的项目

    • 对于从1到R的每种可能的重复项目数,etc

    • 然后有N个选择 您可能重复的项目

    你也可以用这个算法来列举可能性

    编辑 哦,天哪。 谢谢@blueraja,你完全正确!n个重复项的情况不能推广到1个项

    因此,修正公式是正确的

    1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10
    

    一个正确的一般答案需要一个总和。我将向您展示如何对这些特定值执行此操作,并让您概括它

    有两种情况:

    • 不包含重复项的排列。这只是
      10p4
    • 仅包含一个副本的置换:
      • 选择重复的号码:
        10c1
      • 为它选择两个位置:
        4c2
      • 选择适合剩余两个位置的数字:
        9p2

    因此,这个特殊情况的答案是9360。

    我假设只有一个项目可以重复,而这个项目不是预先确定的

    以下公式适用于a(字母表大小)、S(字符串大小)和R(最大重复次数):

    f(A,S,R)=(A perm S)+ASum[R=2到R]((S选择R)(A-1 perm S-R))

    例如,对于R=1(简单置换),我们得到f(A,S,R)=(A置换)。对于A=S=R=2,我们有f(A,S,R)=4,对应于:

    1,2

    2,1

    1,1

    2,2

    你在问题中描述的情况是A=10,R=2,S=4,然后我们有:

    f(A,S,R)=9360


    (与BlueRaja计算的完全相同)

    是一篇关于组合和排列的好文章,在那里你可以找到所有公式

    什么是“允许重复”的意思?基本上,对于每个排列,如1,1,4,5(1),按照R变量重复两次。任何(一)项都可以重复R次。因此,1,1,1,4无效R>2,1,1,4,4也无效,因为如果有任何意义,会有多个重复!重复必须是连续的吗?如果R=2,是否允许5,1,4,1?@Pete:不,它们可以在任何地方,所以5,1,4,1是可以的;)标题写的是排列,但正文写的是组合。这是哪一个?ja也考虑过使用蛮力方法,但想要一个更“聪明”的解决方案,例如,如果S(Space)=200,那么它就变成了imense,但仍然应该比我们允许所有重复“生成N个不同单词的(有序)组合”的情况小很多?命令?对不起,你能再解释一下或者举个例子吗?我是哑巴:(有序意味着单词被排序(w1 1 2 3 4 < /代码>计数四次:一旦我们考虑<代码> 1 < /代码>固定元素,一旦我们考虑<代码> 2 < /代码>固定元素,等等…+1为CORE。ct答案,但是-1对于(我假设是一个)家庭作业问题给出了直截了当的答案:)啊,这开始有意义了,thanx:)这个答案是正确的,但不幸的是不正确,因为20排列4假设所有元素都是不同的,而它们不是。我的脑袋快要爆炸了:(无论如何,要计算上述/原始值的置换量?BlueRaja——你是对的。尽管我试图删除我的答案,因为它被正确地指出了错误的原因,但我将把它留在这里,希望其他人能从我的错误中吸取教训。非常好:)你也能把数学结果发到9360吗?Comeon Jacques,你能做到这一点。记住,你将and相乘,然后将OR相加(这两种情况是OR加在一起的,但在每种情况下,每个条件都是and)
    (N permute S)
    + N * [ (S choose 2) * ((N-1) permute (S-2)) 
          + (S choose 3) * ((N-1) permute (S-3)) 
          + ... 
          + (S choose R) * ((N-1) permute (S-R)) ]