1

整数をすばやく読み取るために、私は使用しています

cases = int(next(sys.stdin))

遅いのではなく

cases = int(sys.stdin.readline())

これを使用したすべての問題でタイミングが改善されましたが、この SPOJ 問題同じ codechef 問題の場合、最初の代わりに 2 番目を使用してより良い結果が得られました。なぜこれが起こったのか分かりません。

この特定の問題に対して、2 番目の方法が 1 番目の方法と比較して突然速くなった理由は何ですか?

SPOJタイミング結果と codechef のタイミング結果は次のとおりです

私が使用した2つの完全なコードは

import sys
from itertools import islice
def p():
    cases = int(next(sys.stdin))
    string = [i[:len(i) -1] for i in islice(sys.stdin, cases)]
    for i in string:
        ops, ans = [], []
        for c in i:
            if c in ['+', '-', '*', '/', '^']:
                ops.append(c)
            elif c == ')':
                ans.append(ops.pop())
            elif c == '(':
                pass
            else:
                ans.append(c)

        print ''.join(ans)

p()

そして2つ目は

import sys
from itertools import islice
def p():

    cases = int(sys.stdin.readline())
    string = [i[:len(i) -1] for i in islice(sys.stdin, cases)]
    for i in string:
        ops, ans = [], []
        for c in i:
            if c in ['+', '-', '*', '/', '^']:
                ops.append(c)
            elif c == ')':
                ans.append(ops.pop())
            elif c == '(':
                pass
            else:
                ans.append(c)

        print ''.join(ans)

p()
4

1 に答える 1

0

SPOJ のタイミングに関する十分なデータがありません。codechef のタイミングはすべて近すぎて私に連絡できません。

1 回の呼び出しと1 回の 呼び出しのタイミングの違いは、スワップの可用性、マシン上で実行されている他のプロセス、I/O フラッシュなどの違いに帰着します。つまり、2 つのアプローチ間の実際のパフォーマンスの違いではありません。.readline() next()

自分のマシンで、何千もの実行に対して独自のタイミングを実行して、一方が実際に他方よりも速いかどうかを判断できるようにする必要があります。

于 2013-07-07T11:58:45.017 に答える