1

timeitモジュールを使用して、挿入ソートの 2 つの実装のパフォーマンスを計ろうとしています。

以下の両方のソート機能に同じ設定データを使用したかったので、インスタンスを作成し、インスタンスの属性をtimeit.Timer変更するだけでよいと考えました。stmtこれは機能していません。

default と同じ結果である、全体的に同じ結果が得られますstmt='pass'

しかし、セットアップ文字列でコードをテストすると、機能しているように見えます。

import timeit

setup = """
import random


def insort1(seq):
    for a in xrange(1, len(seq)):
        for b in xrange(a, -1, -1):
            if seq[b] < seq[a]:
                break
        else:
            b = -1
        if b + 1 < a:
           seq.insert(b + 1, seq.pop(a))


def insort2(l):
    for i in range(1, len(l)):
        valueToInsert = l[i]
        hole = i
        while hole > 0 and valueToInsert < l[hole - 1]:
            l[hole] = l[hole - 1]
            hole -= 1
        l[hole] = valueToInsert


sorted_samples = [range(100),
          range(1000),
          range(10000)]

reversed_samples = [s[::-1] for s in sorted_samples]

shuffled_samples = map(list, sorted_samples)
for s in shuffled_samples:
    random.shuffle(s)

random_samples = [[random.randint(0, upper) for n in xrange(upper)]
                  for upper in [100, 1000, 10000]]
"""


t = timeit.Timer(setup=setup)
r = 5
n = 1000000
for ind in [0, 1, 2]:

    print 'sample size:100%s\n' % ('0' * ind)

    print '\tinsort1'
    print '\t-------'
    t.stmt = 'insort1(sorted_samples[%s][:])' % ind
    print '\t\tsorted:  ', min(t.repeat(r, n))
    t.stmt = 'insort1(reversed_samples[%s][:])' % ind
    print '\t\treversed:', min(t.repeat(r, n))
    t.stmt = 'insort1(shuffled_samples[%s][:])' % ind
    print '\t\tshuffled:', min(t.repeat(r, n))
    t.stmt = 'insort1(random_samples[%s][:])' % ind
    print '\t\trandom:  ', min(t.repeat(r, n))
    print '\n'

    print '\tinsort2'
    print '\t-------'
    t.stmt = 'insort2(sorted_samples[%s][:])' % ind
    print '\t\tsorted:  ', min(t.repeat(r, n))
    t.stmt = 'insort2(reversed_samples[%s][:])' % ind
    print '\t\treversed:', min(t.repeat(r, n))
    t.stmt = 'insort2(shuffled_samples[%s][:])' % ind
    print '\t\tshuffled:', min(t.repeat(r, n))
    t.stmt = 'insort2(random_samples[%s][:])' % ind
    print '\t\trandom:  ', min(t.repeat(r, n))
    print '\n'
4

0 に答える 0