话说为什么大家会集中讨论GIL?在这里题主的标准线是一个按bit处理的单线程DFS啊……几乎没有GIL发挥的余地好么……
这个八皇后的DFS,我的C++代码在不加某些评估性剪枝的情况下对15需要算18s左右(开O2大约8.6秒,与题主描述基本一致),但是可以确定的是你的解决方案里用了循环与递归。接下来需要分析的无非是Python慢在哪个细节,以及能否改进的问题。
下面是两段用来测试的代码,首先是Python的:
class="highlight">
#!/usr/bin/env python3 import time def calc(n, i=0, cols=0, diags=0, trans=0): if i == n: return 1 else: rt = 0 for j in range(n): col = 1 << j diag = 1 << (i - j + n - 1) tran = 1 << (i + j) if (col & cols) == 0 and (diag & diags) == 0 and (tran & trans) == 0: rt += calc(n, i+1, cols | col, diags | diag, trans | tran) return rt if __name__ == '__main__': t = time.time() print(calc(13)) prin