내가 5살인 것처럼 내게 설명해줘: 시간 복잡도
내가 5살인 것처럼 나에게 설명해보세요:
시간 복잡도
안녕하세요 여러분!!💛
시간 복잡도는 단순히 프로그램이 작업을 완료하는 데 걸리는 시간을 측정한 것입니다. 시간 복잡성은 프로그래밍하는 동안 모든 지점에서 중요한 역할을 합니다. 이제 단순화하고 배우도록 노력합시다.
내용물
시간 복잡도를 찾는 방법?
우리 작업에 어떤 알고리즘이 더 나은지 확인하기 위한 일반적인 방법 중 하나는 컴퓨터에서 두 알고리즘을 모두 실행하고 어느 알고리즘이 시간이 덜 걸리는지 확인하는 것입니다. 그러나 이러한 시간 복잡도를 찾는 방법은 장치의 성능, 주어진 입력 등과 같은 요인에 따라 결과가 달라지기 때문에 효과적이지 않습니다. 따라서 점근 분석을 사용하여 시간 복잡도를 확인합니다.
Asymptotic Analysis에서는 주어진 입력 크기를 기반으로 성능을 평가합니다. 즉, 알고리즘이 실행을 완료하기 위해 수행하는 기본 단계의 수를 세어 시간 복잡도를 추정합니다.
이를 더 잘 이해하기 위해 예를 살펴보겠습니다. 서로 다른 두 가지 경우를 사용하여 찾아보겠습니다.
첫 번째 경우
//psuedocode
int i = 1 to N
N = N + N
print N
두 번째 사례
//pseudocode
return N * N
첫 번째 경우 N이 증가함에 따라 시간도 N에 따라 달라집니다. 두 번째 경우에, 우리가 취한 N의 어떤 값이든 우리는 한 단계(N과 무관하게)의 결과를 얻을 것입니다.
점근 분석 이해
예를 들어 T(n)=n^2+2n+8로 구한 시간 복잡도 함수가 있습니다. 여기서 큰 n 값의 경우 (2n+8)은 n^2와 비교할 때 중요하지 않습니다.
Big-O 복잡성 분석
시간 복잡도는 루프(입력에 따라 다름), 재귀 또는 함수 호출을 포함하지 않을 때 O(1)이라고 합니다.
for(int i=0; i < 25; i++){
//statments
}
루프의 변수가 증가하거나 감소할 때 시간 복잡도는 O(N)이라고 합니다.
for(int i= n; i > 0; i--){
//statments
}
시간 복잡도는 중첩 루프의 가장 안쪽 루프가 실행되는 횟수만큼 O(N^k)(k can be 1,2,3...)라고 할 수 있습니다.
for(int i= 0; i < n; i++){
for(j= 0 ;j < n; j++){
//statments
}
}
루프 변수를 상수로 나누거나 곱하면 시간 복잡도는 O(logN)으로 간주됩니다.
for(int i = 0; i < n; i = i * c){
//statments
}
빅오 치트시트
내장 함수의 시간 복잡도를 고려합니까?
예, Java에서
Collections.sort()
와 같이 시간에 영향을 미치는 내장 함수의 시간 복잡도를 고려합니다. 병합 정렬을 사용하고 O(NlogN)의 복잡도를 가지며 Timsort를 사용하는 Python의 sort()
는 O(NlogN)의 복잡도를 가집니다. , 등.조건문의 시간 복잡도
//pseudocode
input n
if n<7
print "n is less than 7"
else
for int i = 0 to n
print i
여기에서 우리가 제공하는 입력이 7보다 작으면 위의 코드를 관찰하고 인쇄 문만 실행하므로 시간 복잡도는 O(1)입니다. 입력이 7보다 크면 n번 실행되는 for 루프가 있습니다. 따라서 복잡성은 n입니다. 따라서 최선의 시간 복잡도는 O(1)이고 최악의 경우는 O(N)입니다.
그게 다야. 이제 코드의 시간복잡도를 직접 찾아보세요😍
당신이 좋아할만한 다른 기사
Reference
이 문제에 관하여(내가 5살인 것처럼 내게 설명해줘: 시간 복잡도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/laasyasetty/explain-to-me-like-i-am-five-time-complexity-h3l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)