|

楼主 |
发表于 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
复制代码 |
|