欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用python怎么實(shí)現(xiàn)全排列-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)使用python怎么實(shí)現(xiàn)全排列,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、雞澤網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為雞澤等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。

公式:全排列數(shù)f(n)=n!(定義0!=1)

1 遞歸實(shí)現(xiàn)全排列(回溯思想)

1.1 思想

舉個(gè)例子,比如你要對(duì)a,b,c三個(gè)字符進(jìn)行全排列,那么它的全排列有abc,acb,bac,bca,cba,cab這六種可能就是當(dāng)指針指向第一個(gè)元素a時(shí),它可以是其本身a(即和自己進(jìn)行交換),還可以和b,c進(jìn)行交換,故有3種可能,當(dāng)?shù)谝粋€(gè)元素a確定以后,指針移向第二位置,第二個(gè)位置可以和其本身b及其后的元素c進(jìn)行交換,又可以形成兩種排列,當(dāng)指針指向第三個(gè)元素c的時(shí)候,這個(gè)時(shí)候其后沒(méi)有元素了,此時(shí),則確定了一組排列,輸出。但是每次輸出后要把數(shù)組恢復(fù)為原來(lái)的樣子。

使用python怎么實(shí)現(xiàn)全排列

1.2 python實(shí)現(xiàn)

def permutations(arr, position, end):
  if position == end:
    print(arr)
  else:
    for index in range(position, end):
      arr[index], arr[position] = arr[position], arr[index]
      permutations(arr, position + 1, end)
      arr[index], arr[position] = arr[position], arr[index] # 還原到交換前的狀態(tài),為了進(jìn)行下一次交換
 
 
arr = [1, 2, 3, 4]
permutations(arr, 0, len(arr))

2 深度優(yōu)先搜索(DFS)實(shí)現(xiàn)全排列

2.1 思想

定義全排列問(wèn)題:輸入一個(gè)長(zhǎng)度為n的列表arr,輸出arr的全排列。

(1)首先可以確定的是,每一種全排列的結(jié)果中包含的列表長(zhǎng)度均是n。想象面前有n個(gè)空盒子,現(xiàn)在要把這n個(gè)數(shù)放到這些空盒子里去,每個(gè)盒子只能放一個(gè)數(shù)。那么第一個(gè)盒子中可以放的選擇是n種,可以使用一個(gè)循環(huán)來(lái)逐個(gè)嘗試。

for index in range(0, len(arr)):
temp[position] = arr[index]

(2)第一個(gè)盒子放完后,就該往第二個(gè)盒子里放了。假設(shè)第一個(gè)盒子里放的是arr的第一個(gè)數(shù),那么第二個(gè)盒子就只能放第2~n個(gè)數(shù)了(不能重復(fù))。為此引入visit列表用來(lái)標(biāo)記arr中哪些數(shù)字被使用過(guò)了。初始化:

visit = [True, True, True, True]

這樣,當(dāng)?shù)谝粋€(gè)位置已經(jīng)使用過(guò)時(shí),就在visit里做標(biāo)記:visit = [False, True, True, True]

因此放第一個(gè)盒子的代碼可以改寫(xiě)如下:

  for index in range(0, len(arr)):
    if visit[index] == True:
      temp[position] = arr[index]
      visit[index] = False

(3)當(dāng)?shù)趉個(gè)盒子處理完畢后,處理下一個(gè)盒子直接調(diào)用dfs(k+1)即可,也就是遞歸調(diào)用。解決了當(dāng)下該如何做,下一步也就知道怎么做了。

(4)遞歸調(diào)用的一定要注意的問(wèn)題是遞歸調(diào)用的出口,否則循環(huán)調(diào)用下去程序會(huì)崩潰無(wú)法運(yùn)行。在這個(gè)問(wèn)題中什么時(shí)候結(jié)束遞歸調(diào)用呢?答案是當(dāng)這n個(gè)盒子都放滿(mǎn)了,即處理到第n+1個(gè)盒子時(shí)結(jié)束調(diào)用,同時(shí)輸出此時(shí)的排列結(jié)果。

2.2 python實(shí)現(xiàn)

visit = [True, True, True, True]
temp = ["" for x in range(0, 4)]
 
 
def dfs(position):
  # 遞歸出口
  if position == len(arr):
    print(temp)
    return
  # 遞歸主體
  for index in range(0, len(arr)):
    if visit[index] == True:
      temp[position] = arr[index]
      visit[index] = False # 試探 
      dfs(position + 1)
      visit[index] = True # 回溯。非常重要
 
 
arr = [1, 2, 3, 4]
dfs(0)

注釋了“非常重要”的語(yǔ)句是不能省略的,省略后僅出現(xiàn)[1, 2, 3, 4]一條結(jié)果。dfs(k+1)前后的兩條語(yǔ)句分別稱(chēng)之為試探和回溯。

3 combination和permutations函數(shù)的區(qū)別

permutations方法重在排列:

import itertools
n=3
a=[str(i) for i in range(n)]
s=""
s=s.join(a)
for i in itertools.permutations(s,n):
  print (''.join(i))
 
# 結(jié)果  
012
021
102
120
201
210

combinations方法重在組合:

import itertools
n=3
a=[str(i) for i in range(n)]
s=""
s=s.join(a)
for i in itertools.combinations(s,n):
  print (''.join(i))
 
# 結(jié)果  
012

關(guān)于“使用python怎么實(shí)現(xiàn)全排列”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)標(biāo)題:使用python怎么實(shí)現(xiàn)全排列-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.chinadenli.net/article42/ccsghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作電子商務(wù)網(wǎng)頁(yè)設(shè)計(jì)公司關(guān)鍵詞優(yōu)化網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司