第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何提高此代碼的性能?

如何提高此代碼的性能?

如何提高此代碼的性能?多虧了這里的一些人的幫助,我才能讓我的塔斯馬尼亞駱駝謎題的代碼工作起來。然而,它是可怕的緩慢(我認為。我不確定,因為這是我在Python中的第一個程序)。在代碼底部運行的示例需要很長時間才能在我的機器上解決:dumrat@dumrat:~/programming/python$ time python camels.py[['F', 'F', 'F', 'G', 'B', 'B', 'B'], ['F', 'F', 'G', 'F', 'B', 'B', 'B'], ['F', 'F', 'B', 'F', 'G', 'B', 'B'], ['F', 'F', 'B', 'F', 'B', 'G', 'B'], ['F', 'F', 'B', 'G', 'B', 'F', 'B'], ['F', 'G', 'B', 'F', 'B', 'F', 'B'], ['G', 'F', 'B', 'F', 'B', 'F', 'B'], ['B', 'F', 'G', 'F', 'B', 'F', 'B'], ['B', 'F', 'B', 'F', 'G', 'F', 'B'], ['B', 'F', 'B', 'F', 'B', 'F', 'G'], ['B', 'F', 'B', 'F', 'B', 'G', 'F'], ['B', 'F', 'B', 'G', 'B', 'F', 'F'], ['B', 'G', 'B', 'F', 'B', 'F', 'F'], ['B', 'B', 'G', 'F', 'B', 'F', 'F'], ['B', 'B', 'B', 'F', 'G', 'F', 'F']]real    0m20.883suser    0m20.549ssys    0m0.020s下面是代碼:import QueuefCamel = 'F'bCamel = 'B'gap = 'G'def solution(formation):     return len([i for i in formation[formation.index(fCamel) + 1:]                 if i == bCamel]) == 0def heuristic(formation):     fCamels, score = 0, 0     for i in formation:         if i == fCamel:             fCamels += 1;         elif i == bCamel:             score += fCamels;         else:             pass     return scoredef getneighbors (formation):     igap = formation.index(gap)     res = []     # AB_CD --> A_BCD | ABC_D | B_ACD | ABD_C     def genn(i,j):         temp = list(formation)         temp[i], temp[j] = temp[j], temp[i]         res.append(temp)     if(igap > 0):         genn(igap, igap-1)     if(igap > 1):         genn(igap, igap-2)     if igap < len(formation) - 1:         genn(igap, igap+1)     if igap < len(formation) - 2:         genn(igap, igap+2)每個只給3只駱駝。我至少想做4次。這個測試用例仍然在運行(現(xiàn)在大約5分鐘了:()。如果它完成的話我會更新的。我應(yīng)該做些什么來改進這個代碼呢?(主要是在性能方面,但任何其他建議也是受歡迎的)。
查看完整描述

4 回答

?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

tkerwin是正確的,你應(yīng)該使用一套封閉列表,這加快了很多事情,但它仍然有點慢4駱駝在每一邊。下一個問題是,你允許了很多不可能的解決方案,因為你允許fCamels倒退,bCamels繼續(xù)前進。要解決這個問題,把線路換掉,

if(igap > 0):
    genn(igap, igap-1)if(igap > 1):
    genn(igap, igap-2)if igap < len(formation) - 1:
    genn(igap, igap+1)if igap < len(formation) - 2:
    genn(igap, igap+2)

帶著

if(igap > 0 and formation[igap-1] == fCamel):
    genn(igap, igap-1)if(igap > 1 and formation[igap-2] == fCamel):
    genn(igap, igap-2)if (igap < len(formation) - 1) and formation[igap+1] == bCamel:
    genn(igap, igap+1)if (igap < len(formation) - 2) and formation[igap + 2] == bCamel:
    genn(igap, igap+2)

然后,我得到了每邊問題上的4只駱駝的答案,大約在0.05秒,而不是10秒。我還試了5頭駱駝每側(cè),花了0.09秒。我還使用了一組封閉列表和堆,而不是隊列。

額外提速

通過正確地使用你的啟發(fā)式,你可以得到一個額外的速度。目前,您使用的是

openlist.put((current.g + heuristicf(neighbor), node(neighbor, current.g + 1, current)))

(或該版本的heapq),但您應(yīng)該將其更改為

openlist.put((heuristicf(neighbor), node(neighbor, current.g + 1, current)))

這不包括所需的移動次數(shù),但這是可以的。有了這個謎題(以及將駱駝移向錯誤方向的動作的篩選),你不需要擔心它所需要的移動次數(shù)-要么一步地推進你的解決方案,要么它就會走到死胡同。換句話說,所有可能的解決方案都需要相同數(shù)量的移動。這一更改需要花費時間從13秒以上(甚至使用設(shè)置為近距離列表的heapq,以及找到上述鄰居的更改)到0.389秒,以找到每側(cè)情況下的12只駱駝的解決方案。還不錯。

順便說一句,如果找到了解決方案,一個更好的方法是檢查第一個fCamel的指數(shù)是否等于/2+1(使用int除法)的長度,并且它之前的指數(shù)是否等于間隙。


查看完整回答
反對 回復(fù) 2019-06-01
?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

頂替

class node:
    def __init__(self, a, g, p):
        self.arrangement = a
        self.g = g
        self.parent = p

帶著

node = collections.namedtuple('node', 'arrangement, g, parent')

把時間從340-600米降到11.4 1.891輸入的Msecs[fCamel, fCamel, gap, bCamel, bCamel]..它產(chǎn)生了同樣的輸出。

這顯然無助于解決任何算法問題,但就微觀優(yōu)化而言,它并不壞。

1我輸入錯誤。有一個額外的fCamel這讓它跑得更慢了。


查看完整回答
反對 回復(fù) 2019-06-01
  • 4 回答
  • 0 關(guān)注
  • 833 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號