【问题标题】:algorithm for permutations of a list with specific orders for certain variables具有特定变量的特定顺序的列表排列算法
【发布时间】:2016-11-18 10:26:21
【问题描述】:

我想问是否有一种方法可以使用算法或某些程序来实际返回一个列表,其中包含一系列特定变量的所有排列,但在某些地方只能有某些变量。我正在尝试找到一种方法来为某物创建独特设计的名称,为了举例,让我们使用名称“Coda”。这将是它的发音方式,但我想使用像“{ 0 |] 4”这样的名称。显然我不希望“C”在其他任何地方结束。但是对于“C”,除了“{”之外还有其他选项。例如,“[0 |] 4”。代替“o”的“0”,我可以使用“()”,如“{ () |] 4”。但我也可以在第二个示例中为“C”使用相同的“()”,它将是“[() |] 4”。但我不希望我用于“o”的东西出现在名称中的任何其他位置,比如代替“4”,它和“()”被交换,拼写为“Cado”。不完全是我要找的词。但我想知道是否有一种方法可以完全列出所有排列,并且某些事物总是必须在某个位置。

这些就像我将用于字母的所有可能性一样,这就是为什么当我开始尝试自己列出所有排列时它变得如此复杂(显然逗号不是字母的一部分):

C:

o: 0, (), [], {}

d: |>, |], |},|)

a:4、/\、/-\、/=\、@

【问题讨论】:

    标签: algorithm list sequence permutation


    【解决方案1】:

    首先,我应该注意 permutation 不是正确的术语:'coda'->'daoc' 是一个排列,不是你想要做的。

    如果您想打印每个字符所有可能的变体组合的“Coda”,您只需要有四个嵌套循环,每个字符一个循环。

    在伪代码中,你会:

    c_chars = ['<', '[', '{', '(']
    o_chars = ['0', '()', '[]', '{}']
    d_chars = ['|>', '|]', '|}','|)']
    a_chars = ['4', '/\', '/-\', '/=\', '@']
    
    foreach c in c_chars{
      foreach o in o_chars{
        foreach d in d_chars{
          foreach a in a_chars{
            print(c+o+d+a+'\n') //concatenate the four characters
          }
        }
      }
    }
    

    这将打印 4*4*4*5=320 行,每行都有不同的“Coda”拼写方式以及您指定的可能性。

    【讨论】:

    • +1 OP 想要笛卡尔积而不是排列。笛卡尔积有时通俗地称为“所有组合”,但“组合”也有不同的数学定义。
    • 这真的很有帮助,我实际上不知道“排列”与“组合”有什么不同。对我来说,像这样的老师都不值得。他们完全可以互换使用这些术语,从未说过两者之间有任何区别。我很好奇是否有一个你喜欢用这个生成列表的程序?我尝试过的那些要么不断尝试加载,要么在参数列表之后告诉我没有 ) 的错误。但我知道不同的应用程序可能会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多