【问题标题】:Permutations given a set of characters and length [closed]给定一组字符和长度的排列[关闭]
【发布时间】:2019-07-08 00:40:02
【问题描述】:

这里的初学者程序员只是想知道是否有更简单的方法来置换用户给定的字符集和用户给定的长度。例如。长度为 3 的 A、B 将是:AAA、ABA、ABB、AAB、BBB、BAB、BAA。

【问题讨论】:

标签: c++ algorithm cartesian-product


【解决方案1】:

此输出对应于整数 0..7(000,001、010 等)的二进制表示,因此您可以只进行到 2^N-1 的 for 循环,用二进制表示循环计数器并用字符替换零和一。

对于较大的字符集(大小 M)也是如此 - 但您必须在 M-ary 系统中表示值 0..M^N - 1(使用整数除法和余数)。伪代码:

for i = 0 to Power(M, N) - 1 do
   // represent i in M-ary system:
      tmp = i
      for k = 0 to N - 1 do
          digit[k] = tmp % M         //integer modulo
          tmp = tmp / M              //integer division 

替代实现 - 使用旧电动计数轮之类的方法遍历所有 m^n 值。 Python 演示代码:

src = "abc";
M = len(src)
N = 2
l = [0]*N
i = 0
while i < N:
    print([src[x] for x in l])
    i = 0
    l[i] += 1
    while (i < N) and l[i] >= M:
        l[i] = 0
        i += 1
        if i < N:
            l[i] += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多