Re: [問題] 排列組合

看板Python作者 (York)時間16年前 (2008/10/26 12:33), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串12/17 (看更多)
其實遞迴版並不會比較慢,只要稍做調整: def gen(n): if n == 0: return [''] else: return [x+y for x in gen(n-1) for y in 'ATCG'] 改變迴圈的順序,這是很基本的最佳化作法... ※ 引述《mantour (朱子)》之銘言: : 測n=10時 : def gen1(n): : list=[''] : for i in range(n): : tmp=[j+k for j in list for k in 'ATCG'] : list=tmp : return list : 3.949s : 下面的版本在我的電腦上測n=10為17.545s : : def gen(n): : : if n == 0: : : return [''] : : else: : : return [x + y for x in ['A', 'T', 'C', 'G'] for y in gen(n - 1)] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.98.179

10/26 14:20, , 1F
請問一下為什麼換順序就會比較快?
10/26 14:20, 1F

10/26 14:55, , 2F
因最裡面的迴圈跑最頻繁,調換後,最裡面那圈做的事變少
10/26 14:55, 2F

10/26 14:58, , 3F
在 n 夠大時,調換後還可減少記憶體跟硬碟間 swap 的頻率
10/26 14:58, 3F

10/26 14:59, , 4F
關於第二點,可以參考 OS 相關書籍
10/26 14:59, 4F

10/26 15:00, , 5F
關於虛擬記憶體及 page fault 相關的章節
10/26 15:00, 5F
文章代碼(AID): #190_C36- (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 12 之 17 篇):
文章代碼(AID): #190_C36- (Python)