알고리즘 및 데이터 구조 [] 복잡도 분석

       이 문서에서는 문서 알고리즘의 복잡성의 블로거 분석, 몇 가지 일반적인의 복잡성, 평균 시간 복잡도, 최고의 요약 / 복잡성 최악의 시간입니다.

복잡도 분석

  알고리즘의 복잡성에 대해, 우리는 일반적으로 가정 복잡한 공간의 분석에 근거하여 다음 시간 단위, 그리고, 우리는 코드의 각 라인의 실행 시간이 동일하다고 가정 여기, 빅 O는 표현이 시간을 사용합니다. 상기 코드의 첫 번째 분석에서, 시간 복잡도 루프 두이어서 2-4 열 (3) 제 6 행의 시간 복잡도는 N과 같은 반면, 시간 복잡도에 대한 제 1 루프는 N이고 루프의 내부에 대한 시간 복잡도는 2 * N * N이다. 총 시간 복잡도는 2 * N * N + 2 * N + 3과 비교. 따라서, 알고리즘의 시간 복잡도는 O (2 * N * N + 2 * N + 3). 분석의 복잡성에 관해서, 노트 세 가지 포인트가 있습니다 :

  1, 전체 시간 복잡도는 코드의 단부 복잡도의 최대 순서와 동일한 알고리즘의 시간 복잡도 분석 시간, 종종 간과되는 일정한 순서로 , 낮은 수준의 , 계수. 따라서, 알고리즘의 분석 시간 복잡도는, 우리는 할 수있는 최대 기간의 크기에 초점을 맞출 필요가있다.

  2 승산 규칙 : 중첩 된 중첩 된 코드는 생체 내에서 코드 실행 시간의 곱과 같다 . 우리는 기본적으로이 규칙을 사용하여, 루프 중첩에서 찾을 수 있습니다. 아래의 코드, 외부 루프에 대한 복잡도가 O (3 * N)이고, 제 2 사이클에 대한 복잡성은 O (2 * N)을하고, 전체 코드의 시간 복잡도는 O (2 * N) * O (N) + O (따라서 코드 복잡성이 변경은 O (N * N) 인

1   INT CAL ( INT의 N) {
 2     INT의 합 = 0 ;
3     int로 난 = 1 ;
4     의 INT J = 1 ;
5      (; I <= N; ++ I) {
 6       , J = 1 ;
7        (; J <= N; ++ j)는 {
 8         합 = 합계 + I * J;
9       }
 10     }
 11   }

 

몇 가지 일반적인 복잡성

  다음의 일반적인 시간 복잡도 : 두 가지 범주, 및 순서의 두 비 다항식 다항식, 비 다항식이이 순서로 나뉘어 계승 지수와 순위 순서 : 등급. 이 크기의 복잡성의 문제는 NP-어려운 문제로 알려져있다.

   일정한 순서 O (1)

int로 A가 = 0 ;
INT의 B는 = a 및
int로 난을;

  O의 순서 (logn)

1   전 = 1 ;
2   동안 (ⅰ <= N)이 {
 3     내가 * = 2 ;
4   }

 

  (2) X = n 번째 전력 X = LOG2 같이 얻어진 N 시간 복잡도 계수가 무시 될 때 O 표시를 나타낼 수 있고, 코드의 존재의 시간 복잡도는 O (로그 N)이고, 상기 첫 번째 것에주의해야한다면 다른 기판 사이의 규칙의 수의 계산은 서로 log3n = * log32 log2n로 변환 될 수 있기 때문에 라인 (2) (3)에도 3을 참조하면, 정지 시간 복잡도는 O (로그 N) 인

  O의 선형 순서 (nlogn)

1   전 = 1 ;
2   J = 1 ;
3   동안 (ⅰ <= N) {
 4     동안 (j <= N)
 (5)       내가 = 난 * 2 ;
6   }

 

  O (m + n)의

1  INT CAL ( INT의 m, INT N) {
 2    INT sum_1 = 0 ;
3    int로 난 = 1 ;
4     (나는 <m; ++ I) {
 5      sum_1 = sum_1 + I;
6    }
 7    의 INT sum_2 = 0 ;
8    의 INT J = 1 ;
9     (; J <N; ++ j)에 {
 10      sum_2 = sum_2 + J;
11    }
 12   리턴 sum_1 + sum_2;
13 }

 

  O (N * m)

1  INT CAL ( INT의 m, INT N) {
 2    INT sum_2 = 0 ;
3    의 INT J = 1 , 난 = 1 ;
4     (; J <N ++ J) {
 5         (나는 <m; ++ I)
 6        sum_2 = sum_2 + J;
7    }

 

셋째, 최고 / 최악의 평균 시간 복잡도

. (1)  // N 어레이의 길이 배열 나타내는 
2  의 INT 찾기 ( INT [] 배열은 INT N-는 INT X) {
 . 3    INT I는 = 0 ;
 . 4    INT POS = - . 1 ;
 5.    위해 (; I <N-는; ++ I) {
 . 6      IF (배열 [I]는 == X) POS = I]
 . 7    }
 . 8    복귀 POS]
 . 9 } 

  가장 좋은 시간 복잡도

  최상의 경우 시간 복잡도는이 코드의 최상의 경우 실행 시간의 복잡성에있다. 예로 위의 코드, find 함수의 코드는, 상기 어레이 내의 디지털 포커스 위치를 찾아, 이상적인 상황은 우리가 숫자의 배열을 찾을 제 위치되면, 시간 복잡도는 O (1)이다.

  최악의 시간 복잡도

  최악의 시간 복잡도는이 코드의 최악의 경우의 실행 시간 복잡성이다. 또는 위의 코드에서, 예를 들어, 최악의 경우, 우리는 숫자가 배열에없는 찾으려면, 당신은 전체 배열, O (N)의이 시대를위한 알고리즘의 시간 복잡도를 통과해야합니다.

  평균 시간 복잡도

  평균 시간 복잡도 알고리즘이 각각의 경우를 고려하고, 각각의 경우의 실행 시간을 가산하고 가능한 모든 경우의 수에 의해 분할 된, 그것이 소자의 개수의 평균값을 얻을 수를 이송 할 필요가있다. 이 코드의 상기 분석의 평균 시간 복잡도, N + 1 케이스의 전체 (0 ~ N-1 발견 또는 N을 찾을 수 없음) 우리는 그 알고리즘의 평균 시간 복잡도 (1 + 2 + .... + N 볼 수 + N) / N + 1, N = (N + 3) / [2 (N + 1)], 우리는 평균 복잡도가 O (N)를 얻을 수있다.

  평균 시간 복잡도뿐만 아니라 마찬가지로 시간의 가중 평균, 각 발생 확률 통계가 들어온다. 확률 이론의 가중 평균이고, 발생하는 각각의 경우의 확률은 가중 평균 시간 복잡도 O를 얻었다 1 / (1 + N)를 곱하여 평균 시간 복잡도에 기초하여, 1 / (1 + N) 이상 (1) .

추천

출처www.cnblogs.com/Trevo/p/11983888.html