- 论坛徽章:
- 0
|
本着学习一下 python 的想法,研究了 starfuck 的代码。
下面是他的正向推导代码:
- def swap_g(a, i, j):
- if a[i] > a[j]:
- a[i], a[j] = a[j], a[i]
- return 1
- return 0
- def fuck(a):
- for i in xrange(2, len(a)+1):
- for j in xrange(1, i):
- if swap_g(a, -j, -j-1):
- return
- for j in xrange(1, i+1):
- if swap_g(a, -j, -i-1):
- a[-i:] = sorted(a[-i:])
- return
- import time
- t0 = time.time()
- a = range(1000000)
- for i in xrange(200000):
- fuck(a)
- print time.time()-t0
复制代码
后面的比较逻辑把我弄糊涂了。后来加了几句代码才看得比较清楚。很有意思
这是添加了输出的代码:
- def swap_g(a, i, j):
- if a[i] > a[j]:
- a[i], a[j] = a[j], a[i]
- return 1
- return 0
- def fuck(a):
- for i in xrange(2, len(a)+1):
- for j in xrange(1, i):
- print a[-j], "<->", a[-j-1]
- if swap_g(a, -j, -j-1):
- print a
- return
- for j in xrange(1, i+1):
- print a[-j], "<=>", a[-i-1]
- if swap_g(a, -j, -i-1):
- a[-i:] = sorted(a[-i:])
- print a
- return
复制代码
这是计算排列 8,9,7,6,5,4,3,2,1 后继排列的代码
- def swap_g(a, i, j):
- if a[i] > a[j]:
- a[i], a[j] = a[j], a[i]
- return 1
- return 0
- def fuck(a):
- for i in xrange(2, len(a)+1):
- for j in xrange(1, i):
- print a[-j], "<->", a[-j-1]
- if swap_g(a, -j, -j-1):
- print a
- return
- for j in xrange(1, i+1):
- print a[-j], "<=>", a[-i-1]
- if swap_g(a, -j, -i-1):
- a[-i:] = sorted(a[-i:])
- print a
- return
- a = [8, 9, 7, 6, 5, 4, 3, 2, 1]
- print a
- fuck(a)
复制代码
从输出可以看出比较的逻辑
- [8, 9, 7, 6, 5, 4, 3, 2, 1]
- 1 <-> 2
- 1 <=> 3
- 2 <=> 3
- 1 <-> 2
- 2 <-> 3
- 1 <=> 4
- 2 <=> 4
- 3 <=> 4
- 1 <-> 2
- 2 <-> 3
- 3 <-> 4
- 1 <=> 5
- 2 <=> 5
- 3 <=> 5
- 4 <=> 5
- 1 <-> 2
- 2 <-> 3
- 3 <-> 4
- 4 <-> 5
- 1 <=> 6
- 2 <=> 6
- 3 <=> 6
- 4 <=> 6
- 5 <=> 6
- 1 <-> 2
- 2 <-> 3
- 3 <-> 4
- 4 <-> 5
- 5 <-> 6
- 1 <=> 7
- 2 <=> 7
- 3 <=> 7
- 4 <=> 7
- 5 <=> 7
- 6 <=> 7
- 1 <-> 2
- 2 <-> 3
- 3 <-> 4
- 4 <-> 5
- 5 <-> 6
- 6 <-> 7
- 1 <=> 9
- 2 <=> 9
- 3 <=> 9
- 4 <=> 9
- 5 <=> 9
- 6 <=> 9
- 7 <=> 9
- 1 <-> 2
- 2 <-> 3
- 3 <-> 4
- 4 <-> 5
- 5 <-> 6
- 6 <-> 7
- 7 <-> 9
- 1 <=> 8
- 2 <=> 8
- 3 <=> 8
- 4 <=> 8
- 5 <=> 8
- 6 <=> 8
- 7 <=> 8
- 9 <=> 8
- [9, 1, 2, 3, 4, 5, 6, 7, 8]
复制代码
学习了。 |
|