|

楼主 |
发表于 2016-6-26 21:46:48
|
显示全部楼层
我的程序如下:
就先不写注释了。大家可以看到程序优化后大幅度缩短了用时。#方法1
import time, itertools
tt = time.time()
num = list(itertools.permutations(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 10))[1000000 - 1]
print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:',''.join(num))
print('方法1用时:%.4f s'%(time.time() - tt))
#方法2
import time, itertools
tt = time.time()
num = itertools.permutations(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 10)
i = 1
while i < 1000000:
next(num)
i += 1
print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:',''.join(next(num)))
print('方法2用时:%.4f s'%(time.time() - tt))
#方法3
import time, itertools, math
tt = time.time()
n = math.factorial(9)
num = itertools.permutations(['0', '1', '3', '4', '5', '6', '7', '8', '9'], 9)
i = 1
while i < 1000000 - n * 2:
next(num)
i += 1
print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:','2' + ''.join(next(num)))
print('方法3用时:%.4f s'%(time.time() - tt))
#方法4
import time, math
tt = time.time()
n = [0 for x in range(10)]
num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
number = 1000000 - 1
for i in range(9):
f = math.factorial(9 - i)
n[i] = num[number // f]
num.pop(number // f)
number %= f
n[9] = num[0]
print('0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是:',''.join(n))
print('方法4用时:%.4f s'%(time.time() - tt))
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
方法1用时:1.3190 s
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
方法2用时:0.4110 s
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
方法3用时:0.2080 s
0, 1, 2, 3, 4, 5, 6, 7, 8, 9 的第 100 万个字典排列是: 2783915460
方法4用时:0.0080 s
|
|