Python語言的全排列怎麼提速?

petterchx發表於2021-09-11

從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。顯然全排列很費時,這裡用到了yield方法,全排列速度加倍

Python語言的全排列怎麼提速?

什麼是yield()方法?

首先,如果你還沒有對yield有個初步分認識,那麼你先把yield看做“return”,這個是直觀的,它首先是個return,普通的return是什麼意思,就是在程式中返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做一個是生成器(generator)的一部分(帶yield的函式才是真正的迭代器),好了,如果你對這些不明白的話,那先把yield看做return,然後直接看下面的程式,你就會明白yield的全部意思了:

def foo():
    print("starting...")
    while True:
        res = yield 4
        print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(next(g))

程式碼的輸出:

starting...
4
********************
res: None

使用yield()方法的全排列:

def perm(arr, pos = 0):
  if pos == len(arr):
    yield arr
  for i in range(pos, len(arr)):
    arr[pos], arr[i] = arr[i], arr[pos]
    for _ in perm(arr, pos + 1): yield _
    arr[pos], arr[i] = arr[i], arr[pos]
for i in perm([1,2,3,4]):
  print i

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4606/viewspace-2837430/,如需轉載,請註明出處,否則將追究法律責任。

相關文章