파이썬을 사용하여 정렬 알고리즘 comparsion을 가진 프로그램을 작성 중입니다. 평균 정렬 시간을 측정하고 싶습니다. 첫 번째 측정에 문제가 있습니다.파이썬 : 평균 타이밍 처리, 첫 번째/두 번째는 훨씬 느림
이 :
for i in xrange(self.repeats):
# random list generator
data_orig = [random.randint(0, self.size - 1) for x in xrange(self.size)]
sorter = self.class_()
data = data_orig[:]
debug("%s for data size: %d, try #%d" % (sorter.__class__.__name__, self.size, i+1))
t1 = time.clock()
sorter.sort(data)
t2 = time.clock()
debug("Took: %0.4fms, shifts: %d, comparisons: %d" % ((t2-t1)*1000.0, sorter.shifts, sorter.comps))
class_
은 삽입 정렬 클래스에 대한 참조입니다. 내가 프로그램 첫 번째 결과는 다른 사람보다 더 큰 실행할 때마다 정렬 알고리즘 모든 시간 동안
InsertionSort for data size: 1000, try #1
Took: 39.5341ms, shifts: 254340, comparisons: 255331
InsertionSort for data size: 1000, try #2
Took: 6.0765ms, shifts: 250778, comparisons: 251772
InsertionSort for data size: 1000, try #3
Took: 6.9946ms, shifts: 254189, comparisons: 255180
InsertionSort for data size: 1000, try #4
Took: 6.7421ms, shifts: 252162, comparisons: 253156
InsertionSort for data size: 1000, try #5
Took: 5.9584ms, shifts: 241412, comparisons: 242404
: 크기 = 1000 5 반복 나는 다음과 같은 결과를 얻을 수 있습니다. 나는 PyPy로 실행한다. (파이썬에서는 괜찮은 것처럼 보이지만, 훨씬 느리다).
나는 단순히 첫 번째 결과를 ommit 수 있습니다 알고 있지만이 솔루션은
어떤 아이디어가 :-) 저를 만족하지 않는 이유는 무엇입니까?
. http://pypy.org/performance.html에서 : ** 서버와 같이 오랫동안 작동하는 것을 측정하는 경우 일반적으로 벤치 마크를 실행하기 전에 프로그램을 준비해야합니다 ** –
CPython은 디스크 캐시에로드되는 내용, .py 파일 등 .pyc 파일로 컴파일되는 등의 이유로 처음에는 속도가 느려질 것입니다. "벤치마킹 전 워밍업"아이디어는 항상 필요합니다. PyPy가 더 많이 필요로한다는 사실은 아마도 보너스 혜택으로 계산되어야합니다. – abarnert
기본적으로 처음 두 측정 값을 없애거나 내 프로그램을 워밍업하는 더 좋은 해결책이 있습니까? 나는 결과에 관심이있다. – Dave