데이터 구조와 알고리즘 (인터뷰)

정렬 알고리즘

 

정렬 직접 삽입 : 앞줄으로 차례로 배열의 모든 요소가 선택된 요소가 정렬 요소보다 작은 경우, 모든 요소까지 교환 비교되고, 요소에 비해 좋았다

힐 정렬 : 정렬 배열 단계 갭에 의해 그룹화 될 다음 정렬 정렬 직접 삽입 방법을 이용하여 각 그룹의 엘리먼트는 각각의 시간 간격을 반으로는, 상술 한 동작 사이클 감소된다 때 1 갭 = 직계 삽입, 전체 염기 서열

간단하게 정렬 선택 : + 교환을 비교

힙 정렬 : 건물의 큰 탑 힙 종류

필기 방법 스택
 1 다수 힙 [크기 ++] 삽입 = X, 최대 (크기)
 2 . 치우 힙 [중에서 최소 값을 설정하는 1 ]
 (3) . 최소 힙 삭제 [ 1 ] = 힙 [크기]; 크기 - (아래쪽 . 1 )
 . (4) . 크기, 힙 [K] = 힙 [크기]의 요소 삭제 - 다운 (Down) (K)에서 (K)을, 
 5. 힙 [K] = 임의의 요소를 수정. X, 아래 (K)까지 (K), 

힙 정렬 

INT N-, m;
 INT H [ 1000 ], CNT; 

공극 하 ( INT U) 
{ 
    INT T = U;
     IF (U * 2 <= CNT && H [ U *2 ] <H [t]) t = U * 2 ;
    경우 (유 * 2 + 1 <= CNT && H [유 * 2 + 1 ] <H [t]) t = U * 2 + 1 ;
    만약 (U =! t) 
    { 
        스왑 (H [U], H [t]); 
        다운 (t); 
    } 
} 

무효화 업 ( INT U) 
{ 
    동안 (U / 2 && H [U] <H [U / 2 ]) 
    { 
        스왑 (H [U], H [U / 2 ]); >> = 1 ; 
    } 
} 
 
INT 의 main () 
{ 
    CIN >> >> N m 단계;
    위한 ( INT 난 = 1 ; I <= N; I ++) CIN >> H [I]; 
    CNT = N; 
    
     ( INT I = N / 2 , I, I - ) 아래 (I); 

    반면 (m - ) 
    { 
        CIN >> H [ 1 ] << "  " ; 
        H [ 1 ] = H [(CNT) - ]; 
        아래 ( 1 ); 
    }    
    반환  0 ; 
}

 

버블 정렬 :

1. 차례로 비교 요소들 주변의 순서는, 요소의 오른쪽이 왼쪽의 요소를 항상보다 큰 보장

2. 단계 1 남은 N-1 사이에서 다시 시퀀스 요소를 행한다

길이 N의 시퀀스 3. N-1 필요한 총 비교 휠을 수행

빠른 정렬 : 파고 채우기 + 나누기와 정복의 수

벡터 < INT > 예 : quick_sort (벡터 < INT > Q, INT (L) 의 INT R) 
{ 
    경우 (L> = R)의 리턴 ;
    int로 난 L = - 1 ;
    INT J = R + 1 ;
    INT (X) = Q [L +의 연구 >> 1 ];
    동안 (ⅰ < J) 
    { 
          수행 ++ 나 나; 반면 (Q [I] < X);
          이렇게 J를 -; 반면 (Q [J]> X);
          경우 (I < J) 교환 (Q [I], Q [J]);
    }
    예 : quick_sort (Q, L, J); 
    예 : quick_sort (Q, J + 1 , R); 
}

 

일종의 병합 :

각 이진 분해 ---- 분할 1. 시퀀스

---- 정렬 병합 후 2 조합 시퀀스 세그먼트 분할 이십

벡터 < INT > TMP;
보이드 merge_sort (벡터 < INT > Q, INT (L) 의 INT R) 
{ 
    경우 (L> = R)의 리턴 ; 
    오토 중간 = L + R >> 1 ; 
    merge_sort (Q, L, MID); 
    merge_sort (Q 중간 + 1 , R);
    int로 난 = L;
    INT의 J = 중간 + 1 ;
    INT (K) = 0 ;
    동안 (ⅰ <= J) 
    { 
          경우 (Q [I] <= Q [J]) TMP [K ++] = Q [I ++];
          다른                    TMP [K ++] = Q [J ++ ]; 
    } 
    동안 (ⅰ <= MID) TMP [K ++] = Q [I ++ ];
    반면 (j <= R) TMP [K ++] = Q [J ++ ];
    위한 ( INT 난 = L, J = 0 ; I <= R; I ++, J ++) Q [I] = TMP [J] 
}

 

KMP 알고리즘

일치가 실패한 후 KMP 알고리즘은 빠른 일치의 목적을 달성하기 위해 주요 문자열 패턴 문자열 일치의 수를 최소화하기 위해, 키 정보를 사용하여. 특정 구현 함수 자체가 부분적인 정보 패턴 스트링 매칭을 포함하는 다음 () 함수를 구현하는 것이다. O의 시간 복잡도 (m + n)의

실패는 포기했다 전에하는 동안 시간 복잡도가 매우 높은, 그래서 간단한 알고리즘에서, 때마다 우리는 모든 경기 일정을 일치 K M P의 KMP 알고리즘 거짓말의 본질은 각 고장 모드의 경기 후 문자열의 시작 부분에서 진행되지 일치하지만, 종래의 데이터에 따른 검색이 특정 패턴 문자열과 일치하는 위치로 점프 위로 계속하고, 각 비트에 대해함으로써 시간을 절약 고유를 갖는 패턴 문자열 "특정의 위치 위로 스냅".

포인터 불일치 : 위치 I의 값은 패턴 문자열 S가 불일치 어레이 (I 1에 첨자)는 공통 프리픽스 진정한 적절한 접미어의 최대 길이

// 시크 부정합 배열
 // 되는 문자열 자체를 패턴 매칭 처리 자체 막 배열은 동일한 텍스트 문자열을 매칭 아이디어 패턴 문자열의 의미 내 과실 내장 말할 
int로 N- 형 = s1.length ();
 INT m = s2.legnth ()
  ( INT I = 1. ; I <m; I ++ ) 
{ 
    그동안 K = (&& S2 K [I] = S2 [K]!) KMP [K]
     IF (S2 [I] = S2 [K]) KMP [I + 1이다. ] ++ = K; 
} 

// 텍스트 문자열 패턴 문자열 찾는
 // k는 현재 모드가 최종의 문자열과 일치하는 마무리되어있는 것을 알 수있다 위치는 또한 검색된 문자열 여러 개략적으로 이해 될 수 

K = 0 ;
  ( INT I = 0; I <N-; ++ I) 
{ 
    while 회 (S1 && K [I] = S2 [K]) = K! KMP은 [K]는;
     // 일치 불일치 포인터 점프 패턴 문자열을 따라 집합 후면 실패 첫 번째 점프하지 않을 것입니다. 
    IF (S1 [I]는 == S2 [K]) K ++;     // 성공적인 일치하는 위치에 일치 패턴 문자열 +1 
    IF (K == m) COUT << I - m + 2 << ENDL;     / / 패턴 문자열 출력 위치를 찾을 수 있습니다. 
}

 

임계 경로 다이어그램

임계 경로의 어떠한 분석도 더 중요한 사용할 수 없습니다. 각 노드는 물론이 작업을 완료하는 데 걸리는으로 수행해야하는 조치를 제공 할 수있는 시간을 나타냅니다. 따라서,도 2의 노드의 동작 그래프.

에지 (V, W) 액션 w 작용의 시작 전에 완료해야 V 수단 : 도면 측은 우선 순위 관계를 나타낸다.

 

 조건은 마지막 모든 사전 이벤트 사전 이벤트가 서로 병렬로 지정할 수 있지만 가장 빠른 완료 시간이 가장 긴 경로를 완료하는 것입니다 시작

 

추천

출처www.cnblogs.com/byene/p/12640382.html