시간 측정의 중요성 및 방법

Page content

강의 홍보

1줄 요약

  • 코드를 효과적으로 작성해야 하는 이유를 확인한다.

Calculation 비교

  • 요한 카를 프리드리히 가우스(1777-1855)가 문제를 냈다고 알려짐

  • 1 + 2 + … + 1000000 까지 해당하는 모든 연속 양수의 합계를 구한다.

  • 두가지 방법이 존재한다.

    • 숫자를 하나씩 추가하여 더하는 방법
    • 1 + 2 + … + N = $ \frac{N \ast (N + 1)}{2} $
  • 어느 것의 계산 속도가 더 빠를까? 각 함수를 작성해본다.

def brute_force(N):   
  res = 0
  for i in range(1,N+1):        
    res += i 
  return res

def formula(N):
  return N*(N+1)/2
  • time() 함수를 활용하여 성능을 측정합니다.
import time 

# Calculate the result of the problem using formula() and print the time required
N = 10000000
start_time = time.time()
first_method = formula(N)
print("First Method is :{}".format(first_method))
print("Time using formula: {} sec".format(time.time() - start_time))

# Calculate the result of the problem using brute_force() and print the time required
start_time = time.time()
second_method = brute_force(N)
print("Second Method is :{}".format(second_method))
print("Time using the brute force: {} sec".format(time.time() - start_time))
First Method is :50000005000000.0
Time using formula: 0.0016944408416748047 sec
Second Method is :50000005000000
Time using the brute force: 0.5611939430236816 sec
  • 원하는 결괏값은 같지만, 계산 속도의 차이는 현저하게 차이가 나는 것을 확인할 수 있다.

반복문 속도 비교

  • 이번에는 반복문의 속도를 비교해보는 코드를 작성해본다.
  • List Comprehension vs For Loop
import time 

words = ['<html>', 
         '<head><title>404 Not Found</title></head>', 
         '<body>', 
         '<center><h1>404 Not Found</h1></center>', 
         '<hr><center>nginx</center>',
         '</body>',
         '</html>']

# Store the time before the execution
start_time = time.time()

# Execute the operation
letlist = [wrd for wrd in words if wrd.startswith('b')]

# Store and print the difference between the start and the current time
print("List Comprehension: {}".format(letlist))
print('Time using list comprehension: {} sec'.format(time.time() - start_time))

# Store the time before the execution
start_time = time.time()

# Execute the operation
letlist = []
for wrd in words:
    if wrd.startswith('b'):
        letlist.append(wrd)
        
# Print the difference between the start and the current time
print('Time using for loop: {} sec'.format(time.time() - start_time))
List Comprehension: []
Time using list comprehension: 0.0007379055023193359 sec
Time using for loop: 0.0001385211944580078 sec
  • 두 가지의 속도 차이가 생각만큼 크지는 않다.
  • 이런 경우에는, 코드의 가독성이 더 중요한 요소로 작용할 수 있을 것이다.

References