더북(TheBook)

    # 테스트 자료 만들기(5000부터 20000까지의 난수를 주가로 사용)

    a = []

    for i in range(0, n):

        a.append(random.randint(5000, 20000))

    # 느린 O(n * n) 알고리즘 테스트

    start = time.time()       # 계산 시작 직전 시각을 기억

    mps = max_profit_slow(a)  # 계산 수행

    end = time.time()         # 계산 시작 직후 시각을 기억

    time_slow = end - start   # 직후 시각에서 직전 시각을 빼면 계산에 걸린 시간

    # 빠른 O(n) 알고리즘 테스트

    start = time.time()       # 계산 시작 직전 시각을 기억

    mpf = max_profit_fast(a)  # 계산 수행

    end = time.time()         # 계산 시작 직후 시각을 기억

    time_fast = end - start   # 직후 시각에서 직전 시각을 빼면 계산에 걸린 시간

    # 결과 출력: 계산 결과

    print(n, mps, mpf)  # 입력 크기, 각각 알고리즘이 계산한 최대 수익 값(같아야 함)

    # 결과 출력: 계산 시간 비교

    m = 0 # 느린 알고리즘과 빠른 알고리즘의 수행 시간 비율을 저장할 변수

    if time_fast > 0:  # 컴퓨터 환경에 따라 빠른 알고리즘 시간이 0으로 측정될 수 있음

                       # 이럴 때는 0을 출력

        m = time_slow / time_fast # 느린 알고리즘 시간 / 빠른 알고리즘 시간

    # 입력 크기, 느린 알고리즘 수행 시간, 빠른 알고리즘 수행 시간, 계산 시간 차이

    # %d는 정수 출력, %.5f는 소수점 다섯 자리까지 출력을 의미

    print(”%d %.5f %.5f %.2f” % (n, time_slow, time_fast, m))

 

test(100)

test(10000)

# test(100000) # 수행 시간이 오래 걸리므로 일단 주석 처리

 

icon_result 실행 결과

 

프로그램 18-3을 필자의 컴퓨터에서 실행해 본 결과는 표 18-2와 같습니다.

입력 크기 n

최대 수익

느린 알고리즘

수행 시간

빠른 알고리즘

수행 시간

느린 알고리즘 시간 /

빠른 알고리즘 시간

100

14658

0.00061초

0.00002초

40.87

10000

14996

6.09124초

0.00167초

3653.97

100000

15000

819.66065초

0.01953초

41969.70

※ Intel i7 2.7Ghz, macOS 10.12.3, Python 3.6.0 환경에서 테스트한 결과

표 18-2 입력 크기에 따른 프로그램 18-3의 실행 결과

 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.