为什么我在不同的计算机上运行相同的Python代码在执行速度上有巨大的差异?(超过1000次)

为什么我在不同的计算机上运行相同的Python代码在执行速度上有巨大的差异?(超过1000次),python,Python,我已经用Python编写了一个关于骑士之旅问题的小游戏 当我完成游戏的算法部分时,我发现它运行了大约0.01秒来找到一个8*8棋盘的成功路径。但是,当我在办公室的电脑上运行它时,找到同一条路径需要10秒以上的时间。然后我在另外三台电脑上试过,结果分别是0.005秒、6秒和8秒 为什么五台计算机上相同代码的执行速度有巨大差异?结果是0.005、0.010、6、8和10秒。我们可以看到差异可以超过1000倍。速度为6秒和8秒的计算机的硬件与0.01秒相近或更好。如果硬件对速度有影响,那也不会太大——

我已经用Python编写了一个关于骑士之旅问题的小游戏

当我完成游戏的算法部分时,我发现它运行了大约0.01秒来找到一个8*8棋盘的成功路径。但是,当我在办公室的电脑上运行它时,找到同一条路径需要10秒以上的时间。然后我在另外三台电脑上试过,结果分别是0.005秒、6秒和8秒

为什么五台计算机上相同代码的执行速度有巨大差异?结果是0.005、0.010、6、8和10秒。我们可以看到差异可以超过1000倍。速度为6秒和8秒的计算机的硬件与0.01秒相近或更好。如果硬件对速度有影响,那也不会太大——大约1000倍

我已经更正了代码,第一版有错误。我正在使用Python 3.6。考试改成了8*8的大小,很抱歉我记错了

下面是代码

import sys
import time

def init_path(size):
    allow = []
    for i in range(size):
        for j in range(size):
            allow.append([i, j])
    return allow

def get_next_choice(step, hist, raws, allow):
    num = 0
    for raw in raws:
        nextstep = [raw[i]+step[i] for i in range(2)]
        if nextstep in allow and nextstep not in hist:
            num += 1
    return num

def search_next(size, pos, history, allow):
    nextsteps = {}
    raws = [[1,2], [1,-2], [2,1], [2,-1], [-1,2], [-1,-2], [-2,1], [-2,-1]]
    if len(history) == size*size:
        return True
    for raw in raws:
        nextstep = [raw[i]+pos[i] for i in range(2)]
        if nextstep in allow and nextstep not in history:
            next_choice = get_next_choice(nextstep, history, raws, allow)
            nextsteps[next_choice] = nextstep
    sorted(nextsteps.items())

    for nextstep in nextsteps.values():
        history.append(nextstep)
        back = search_next(size, nextstep, history, allow)
        if back:
            return True
        else:
            history.pop()
    else:
        return False

def search_path(size, history):
    allow = init_path(size)
    position = history[-1]
    back = search_next(size, position, history, allow)
    if back:
        return history
    else:
        return False

atime = time.time()
path = search_path(8, [[0,0]])
btime = time.time()
print(btime - atime)

不同的计算机有不同的硬件!不同的时钟速度、不同的RAM大小和其他规格可能会使代码运行更快

这就是为什么一种叫做“渐近符号”的东西首先存在的原因!由于我们无法评估运行代码所需的速度或时间,因为每台机器都有不同的规格,因此我们使用“渐近符号”作为解释给定代码时间复杂性的标准方法

您办公室的计算机可能有不同的硬件、内存、较低的时钟速度以及其他与硬件相关的因素,这些因素会导致相同代码的运行速度减慢!作为一台配置更快的更好的计算机,同样的代码运行速度会快得多


您正在执行的任务计算成本很高,并且需要大量内存和处理速度。

有时path为False,有时是单元格列表……相同的python?同一只公羊?同一个处理器?相同的背景活动?@ReblochonMasque I将代码复制/粘贴到PyFIDLE 3.6中-在将[0,0]修复到[[0,0]]后没有错误?@PatrickArtner我刚刚将此代码粘贴到Thonny Python 3.6中,运行时错误为“TypeError:int对象不可订阅”。好的-我也做了修复:search_path6,[0,0]->search_path6,[[0,0]],输出为0.125…@PatrickArtner:Yes@Reblochon面具。对不起,如果我错了。。但是当他问为什么同一个代码在五台计算机上的执行速度有巨大差异时,他强调了很多他想要的东西?结果是0.005、0.010、6、8和10秒。我们可以看到差异可以超过1000倍。如果他在不同的时间得到结果,我认为代码运行正常,并提到“我办公室的电脑”。所以这可能是硬件问题。他正试图实现骑士之旅的问题。。这是一个NP完全问题。试图实现/解决它们的计算成本很高。.研究生级别的算法和数据结构课程。你们?你们读过OPs的问题并试着理解他在问什么吗?你可能比我更擅长编写代码。但是,他是否要求您优化他的代码或解决问题,或询问代码的哪一部分正在减慢速度?他似乎对StackOverFlow相当陌生,可能是在构思问题时被提示发布了一些代码。很抱歉,我在编辑stack overflow上的代码时犯了一个错误。我不明白的是,为什么差异可能是1000倍,而速度为6秒和8秒的计算机的硬件甚至比0.01的还要好。