你认为这是不好的算法(置换算法)吗?

时间:2015-10-24 17:21:34

标签: algorithm

我试图制作排列算法。 你认为这是不好的算法吗?

def permutation():
 data = ['a', 'b', 'c', 'd']
 for i in data:
    for j in data:
        for k in data:
            if (i == j) or (j == k) or (i == k):
                pass
            else:
                print(i+"-"+j+"-"+k)
permutation()

2 个答案:

答案 0 :(得分:0)

没有。这不是一个好的......可能像

For i in data 
For j in data 
If i=j,  pass
Else for k in data 
If k=j or k=i,  pass
Else print

唯一的区别是k不会有不必要的循环。

答案 1 :(得分:0)

你可以在列表理解中完成整个事情:

result = [i + " " + j + " " + k for k in data for j in data for i in data if (i!=j and j!=k and i!=k)]
print result

一个区别是打印完成一次,并且每次找到排列时都不需要。您的结果也会在列表中捕获。

要回答您的问题,您的算法会根据您的数据列表给出正确的答案。但是,如果您的数据列表不包含4个元素,则它不会缩放。它如何适用于10个元素?该列表也不通过permutation()参数传递,因此您也可以不重用此函数。您每次循环时都可以访问打印服务,您可以推迟到以后再使用。

因此,如果您正在制作一般排列算法,那么在许多帐户中这将被视为不良。