알고리즘 의 시간 복잡 도 (계산 실례)
4998 단어 시간 복잡 도
정의: 만약 에 한 문제 의 규모 가 n 이 라면 이 문 제 를 푸 는 특정한 알고리즘 에 필요 한 시간 은 T (n) 이 고 n 의 특정한 함수 T (n) 를 이 알고리즘 의 '시간 복잡성' 이 라 고 부 릅 니 다.
입력 량 n 이 점점 증가 할 때 시간 복잡성 의 극한 상황 을 알고리즘 의 '점 근 시간 복잡성' 이 라 고 부른다.
우 리 는 항상 대 O 표현법 으로 시간의 복잡성 을 나타 내 는데, 그것 이 어떤 알고리즘 의 시간 복잡성 이라는 것 을 주의해 야 한다.대 O 는 상계 가 있다 는 것 을 의미 할 뿐 정의 에 의 해 f (n) = O (n) 가 있다 면 f (n) = O (n ^ 2) 가 분명히 성립 되 고 상계 가 되 지만 상계 가 정확 한 것 은 아니 지만 사람들 이 표시 할 때 전 자 를 나타 내 는 습관 이 있다.
그 밖 에 한 문제 자체 에 도 복잡성 이 있다. 만약 에 특정한 알고리즘 의 복잡성 이 이 문제 의 복잡성 하계 에 이 르 렀 다 면 이런 알고리즘 이 가장 좋 은 알고리즘 이 라 고 할 수 있다.
"대기 법": 이 설명 에서 사용 하 는 기본 매개 변 수 는 n, 즉 문제 실례 의 규모 로 복잡성 이나 운행 시간 을 n 의 함수 로 표현 합 니 다.여기 서 'O' 는 헤비급 (order) 을 나타 낸다. 예 를 들 어 '2 분 검색 은 O (logn) 의 것' 이다. 즉, 'logn 헤비급 절 차 를 통 해 n 규모 의 배열 을 검색 해 야 한다' 는 것 이다.
이러한 점진 적 인 평 가 는 알고리즘 에 대한 이론 적 분석 과 대체적으로 비교 하 는 것 이 매우 가치 가 있 지만 실천 에서 세부 적 인 부분 도 차 이 를 초래 할 수 있다.예 를 들 어 낮은 부가 대가 의 O (n2) 알고리즘 은 n 이 비교적 작은 상황 에서 높 은 부가 대가 의 O (nlogn) 알고리즘 보다 더 빨리 실 행 될 수 있다.물론 n 이 충분 한 후에 비교적 느 린 상승 함 수 를 가 진 알고리즘 은 반드시 더욱 빨리 작 동 할 것 이다.
O(1)
Temp=i;i=j;j=temp;
상기 세 개의 단일 문장의 빈 도 는 모두 1 이 고 이 프로그램의 실행 시간 은 문제 규모 n 과 무관 한 상수 이다.알고리즘 의 시간 복잡 도 는 상수 단계 이 고 T (n) = O (1) 로 기록 합 니 다.만약 에 알고리즘 의 집행 시간 이 문제 규모 n 의 증가 에 따라 증가 하지 않 는 다 면 알고리즘 에 수천 개의 문구 가 있 더 라 도 그 집행 시간 은 비교적 큰 상수 에 불과 하 다.이런 알고리즘 의 시간 복잡 도 는 O (1) 이다.
O(n^2)
2.1 i 와 j 의 내용 교환
sum=0; (한번)
for(i=1;i<=n;i++) (n 회)
for (j = 1; j < = n; j + +) (n ^ 2 회)
sum++; (n ^ 2 회)
해: T (n) = 2n ^ 2 + n + 1 = O (n ^ 2)
2.2.
for (i=1;i
y=y+1; ①
for (j=0;j<=(2*n);j++)
x++; ②
}
문장 1 의 빈 도 는 n - 1 이다.
문장 2 의 주파 수 는 (n - 1) * (2n + 1) = 2n ^ 2 - n - 1
f(n)=2n^2-n-1+(n-1)=2n^2-2
이 프로그램의 시간 복잡 도 T (n) = O (n ^ 2).
O(n)
2.3.
a=0;
b=1; ①
for (i=1;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
해: 문장 1 의 빈도: 2,
문장 2 의 빈도: n,
문장 3 의 빈도: n - 1,
문장 4 의 빈도: n - 1,
문장 5 의 빈도: n - 1,
T(n)=2+n+3(n-1)=4n-1=O(n).
O(log2n )
2.4.
i=1; ①
while (i<=n)
i=i*2; ②
해: 문장 1 의 빈 도 는 1,
설정 문 2 의 빈 도 는 f (n) 입 니 다. 예: 2 ^ f (n) < = n; f (n) < = log2n
최대 값 f (n) = log2n 을 가 져 옵 니 다.
T(n)=O(log2n )
O(n^3)
2.5.
for(i=0;i
for(j=0;j {
for(k=0;k
}
}
해: i = m, j = k 일 때 내부 순환 횟수 가 k 일 때 i = m 일 때 j 는 0, 1,..., m - 1 을 취 할 수 있 기 때문에 여기 서 가장 내부 순환 은 모두 0 + 1 +... + m - 1 = (m - 1) m / 2 회 진행 되 었 기 때문에 i 는 0 에서 n 을 취하 면 순환 은 모두 0 + (1 - 1) * 1 / 2 +... + (n - 1) n / 2 = n (n + 1) (n - 1) / 6 이 므 로 시간 복잡 도 는 O (n ^ 3) 이다.
알고리즘 의 최 악의 상황 과 기대 행 위 를 구분 해 야 합 니 다. 예 를 들 어 빠 른 정렬 의 최 악의 상황 운행 시간 은 O (n ^ 2) 이지 만 기대 시간 은 O (nlogn) 입 니 다. 매번 기준 치 를 꼼꼼 히 선택 하면 제곱 상황 (즉 O (n ^ 2) 의 확률 을 거의 0 으로 줄 일 수 있 습 니 다. 실제 적 으로 정 성 스 럽 게 이 루어 진 빠 른 정렬 은 보통 (O (nlogn) 입 니 다.시간 운행.
다음은 자주 사용 하 는 기법 입 니 다.
배열 에 접근 하 는 요 소 는 상수 시간 작업 이나 O (1) 작업 입 니 다. 하나의 알고리즘 은 2 분 검색 과 같은 데이터 요 소 를 단계별 로 절반 씩 제거 할 수 있 으 면 보통 O (logn) 시간 을 가 집 니 다. n 자 를 가 진 두 문자열 을 strcmp 로 비교 하려 면 O (n) 시간 이 필요 합 니 다. 일반적인 행렬 곱 하기 알고리즘 은 O (n ^ 3) 입 니 다.모든 요 소 를 계산 하려 면 n 대 요 소 를 곱 하고 더 해 야 하기 때문에 모든 요소 의 개 수 는 n ^ 2 입 니 다.
지수 시간 알고리즘 은 일반적으로 가능 한 모든 결 과 를 구 해 야 하 는 데 서 유래 합 니 다. 예 를 들 어 n 개 요소 의 집합 은 모두 2n 개의 키 집합 이 있 기 때문에 모든 부분 집합 을 요구 하 는 알고리즘 은 O (2n) 입 니 다. 지수 알고리즘 은 일반적으로 n 의 값 이 매우 작 지 않 는 한 너무 복잡 합 니 다. 이 문제 에서 하나의 요 소 를 추가 하면 운행 시간 이 배가 되 기 때 문 입 니 다. 불행 하 게 도 많은 문제 가 있 습 니 다.(예 를 들 어 유명한 '투어 판매원 문제') 지금까지 찾 은 알고리즘 은 모두 지수 입 니 다. 만약 우리 가 정말 이런 상황 을 만난다 면 가장 좋 은 결 과 를 찾 는 알고리즘 으로 대체 해 야 합 니 다.
2.3.
a=0;
b=1; ①
for (i=1;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
: 1 :2,
2 : n, ->n+1
3 : n-1, ->n
4 :n-1, ->n
5 :n-1, ->n
T(n)=2+n+3(n-1)=4n-1=O(n).
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 16_3Sum Closest앞의 문 제 를 통 해 우 리 는 일반적인 '처리 방식', 즉 먼저 정렬 한 다음 에 처리 하 는 방법 을 알 게 되 었 다.물론 모든 문 제 는 각 문제 의 특징 이 있 기 때문에 구체 적 인 세부 사항 은 스스로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.