【发布时间】:2021-01-20 20:22:59
【问题描述】:
我在修改用 Python 编写的数独求解算法时偶然发现了一个有趣的现象。
我正在计算回溯算法中的迭代次数并将数字保存在日志文件中。 (该算法似乎是完全确定性的,因此我对突然增加迭代次数以获得相同输出很感兴趣。)
现在有趣的部分是:
当我尝试使用 PyPy (3.7-v7.3.3-win32) 而不是 Python 3.8 (64bit) 运行相同的代码时,使用 PyPy 运行时的迭代次数从 362073 增加到 629505 时大约翻了一番CPython。
我的问题是:有谁知道为什么迭代次数会有这种差异?
日志:
Iterations: 629505, Time Taken: 0.8950409889221191, File: ./sudokus/9x9.csv -- PyPy 3.7
Iterations: 629505, Time Taken: 0.895305871963501, File: ./sudokus/9x9.csv -- PyPy 3.7
Iterations: 362073, Time Taken: 2.1060104370117188, File: ./sudokus/9x9.csv -- Python 3.8
Iterations: 362073, Time Taken: 2.1779544353485107, File: ./sudokus/9x9.csv -- Python 3.8
对于另一个数独文件,差异也在那里,但可以忽略不计:
Iterations: 19443164, Time Taken: 106.15500068664551, File: test_0.csv -- Python 3.8
Iterations: 19443259, Time Taken: 13.188998937606812, File: ./sudokus/test_0.csv -- PyPy 3.7
Iterations: 19443259, Time Taken: 13.118957042694092, File: ./sudokus/test_0.csv -- PyPy 3.7
我的代码是这样的: https://github.com/kasztp/kiwi.com-sudoku-solver/blob/OCR/sudoku_solver.py
【问题讨论】:
-
代码需要直接在此处发布,最好简化为minimal reproducible example,以显示重现问题的窄示例。
-
代码在问题中,而不是在外部链接中。
标签: python algorithm loops sudoku pypy