2017-12-02 8 views
0

私はPythonでナイトのツアー問題に関する小さなゲームを書いています。別のコンピュータで同じPythonコードを実行するのはなぜ実行速度に大きな違いがありますか? (1000回以上)

ゲームのアルゴリズムの部分を終えたとき、私はそれが約8秒のチェスボードの成功したパスを見つけるために約0.01秒実行することがわかった。しかし、私のオフィスのコンピュータでそれを実行すると、同じパスを見つけるのに10秒以上かかります。それから3台のコンピュータで試したところ、結果は約0.005,6,8秒です。

5つのコンピュータで同じコードの実行速度に大きな違いがあるのはなぜですか?結果は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) 
+0

時にはパスはFalseです。時にはそれがセルのリストです... –

+3

同じpythonですか?同じラムですか?同じプロセッサですか?同じバックグラウンド活動ですか? –

+0

@ReblochonMasqueコードをpyfiddle 3.6にコピー/ペーストしました。 - [0,0]を[[0,0]]に固定した後にエラーはありませんか? –

答えて

1

異なるコンピュータにはさまざまなハードウェアがあります。異なるクロック速度と異なるRAMサイズ、およびコードをより速く実行できる他の仕様

これは、最初に「漸近表記」と呼ばれるものが存在する理由です。すべてのマシンが異なる仕様を持つため、コードを実行するのにかかるスピードや時間を評価することができないため、コードの時間的複雑さを説明する標準的な方法として 'Asymptotic Notations'を使用します。

オフィス内のコンピュータのハードウェア、メモリ、クロック速度が遅く、ハードウェアに関連した要因が原因で、同じコードを実行する速度が遅くなることがあります。より速い構成のより良いコンピュータは同じコードをはるかに速く実行します。

計算コストが高く、多くのメモリと処理速度が必要なタスクを実行しています。

+0

@Reblochon Masqueよりもはるかに時間がかかります。 「同じコードの実行速度が5台のコンピュータに大きな違いがあるのはなぜですか?結果は0.005,0.010,6,8,10秒です。違いが1000回以上あることがわかります"私は、コードが正しく実行されていると仮定し、別の時に結果を得て、"私のオフィスのコンピュータ "と言いました。おそらくハードウェア。 – Abhishek

+0

彼は騎士のツアー問題を実装しようとしています。これはNP完全な問題です。実装/解決しようとすると、計算上高価になります。 – Abhishek

+0

アルゴリズムとデータ構造の大学院レベルのコースですか? – Abhishek

関連する問題