作者ykjiang (York)
看板Python
标题Re: [问题] 排列组合
时间Sun Oct 26 12:33:04 2008
其实递回版并不会比较慢,只要稍做调整:
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
1F:推 adair326:请问一下为什麽换顺序就会比较快? 10/26 14:20
2F:→ ykjiang:因最里面的回圈跑最频繁,调换後,最里面那圈做的事变少 10/26 14:55
3F:→ ykjiang:在 n 够大时,调换後还可减少记忆体跟硬碟间 swap 的频率 10/26 14:58
4F:→ ykjiang:关於第二点,可以参考 OS 相关书籍 10/26 14:59
5F:→ ykjiang:关於虚拟记忆体及 page fault 相关的章节 10/26 15:00