1. 정의
실행 시간의 상한 또는 알고리즘 공간 사용을 설명하는 수학 표기법. 또는 (f (n)) 로 표시됩니다. 여기서 f (n) 는 입력 크기 n 에 따라 시간 또는 공간을 나타내는 함수입니다.
2. 목적
알고리즘 비교 - : 다른 알고리즘을 비교하고 주어진 문제에 대해 가장 효율적인 것을 선택할 수 있습니다.
확장 성
: 데이터 양이 증가 할 때 알고리즘이 어떻게 행동하는지 예측하는 데 도움이됩니다.
-
3. 복잡성 분석
더 나쁜 경우
: 알고리즘이 더 오래 걸리거나 더 많은 리소스를 사용하는 시나리오를 나타냅니다. 크거나 일반적 으로이 경우를 나타냅니다.
- 더 나은 사례 및 평균 사례 : 중요하지만 큰 O.
-
4. 우주 대 시간
임시 복잡성
: 알고리즘이 실행되는 데 걸리는 시간을 나타냅니다.
공간 복잡성 - : 사용하는 추가 메모리의 양을 나타냅니다. 또는 (1) (상수 공간) 또는
(선형 공간)와 같은 표기법이있을 수 있습니다.
-
예:
import timeit
matplotlib.pyplot을 plt로 가져옵니다
CPROFILE 가져 오기
# O (1)
def constant_time_operation () :
반환 42
# O (로그 N)
def logarithmic_time_operation (n) :
카운트 = 0
n> 1 :
n // = 2
카운트 = 1
반환 수
# 또는 (n)
def linear_time_operation (n) :
총 = 0
범위 (n)의 i를 위해 :
총 = i
총 수익
# O (n log n)
def linear_logarithmic_time_operation (n) :
n ]]]
plt.figure (figsize = (14, 8))
plt.bar (함수, 시간, 색상 = 색상)
i, v in enumerate (시간) :
plt.text (i, v 0.5, f "{v : .6f}", ha = 'center',
va = '하단', 회전 = 0, color = 'black')
plt.xlabel ( '기능 복잡성')
plt.ylabel ( '평균 시간')
plt.title ( '다른 알고리즘 복잡성의 실행 시간')
plt.grid (axis = 'y', lnetyle = '-', linewidth = 0.5, color = 'gry', alpha = 0.5)
plt.tight_layout ()
plt.show ()
def main () :
결과 = []
results.Append (( "또는 (1)", 척도_time (constant_time_operation)))))
results.Append (( "또는 (log n)", gease_time (logarithmic_time_operation, 10)))))))
results.append (( "또는 (n)", gease_time (linear_time_operation, 10))))))
results.Append (( "또는 (n log n)", 척도_time (
linear_logarithmic_time_operation, 10)))))
results.Append (( "또는 (n^2)", gease_time (Quadratic_time_operation, 7))))))
results.Append (( "또는 (2^n)", exponential_time_operation, 7)))))
results.Append (( "또는 (n!)", gease_time (inforcial_time_operation, 112))))))
Plot_Results (결과)
__name__ == '__main__':
cprofile.run ( "main ()", sort = "totime", filename = "output_profile.prof")
읽어 주셔서 감사합니다 !!
반응과 의견.