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'