알고리즘 소개 - 기초 - 기본 알고리즘

에서 "알고리즘 소개,"책, 책의 첫 번째 예로서 삽입 정렬 알고리즘을 나타납니다.

 

삽입 정렬 :

요소 소수의 주문의 경우, 효율적인 알고리즘이다.

삽입 정렬 많은 사람들이 한 손으로 주문과 카드 놀이처럼 작동합니다. 처음에, 우리 손에있는 카드는 우리가 갑판에서 카드에서 올바른 위치에 쌓아마다 웁니다. 카드의 올바른 위치를 찾으려면, 우리는 이미 모든 카드의 손에 오른쪽으로 왼쪽으로 비교합니다.

프로세스라는 의사  삽입 - 정렬은 다음과 같이, 파라미터 배열이다 :

INSERTION-SORT (A) :

  J = 2 대에 A.length

    키 = A [J] // 삽입 번째 시퀀스 (A) 내로 [J] [1..j - 1]. 

    난 J = - 1 // A [I], A [J]

    I> 0 A [I]> 키 반면

      A [I + 1] = A [i]를

      난이 = 1 -

    A [난 + 1 = 키

의사 코드 설명 : - 서브 첨자 j는 for 루프의 각각의 반복의 시작 부분에 삽입 된 카드를 손에 지적되는 어레이 (A)의 A [J]를 두 부분, 부분 A [1 1..j]로 분할 현재의 정렬 된 배열 손을 구성하고, 나머지 서브 어레이 A [+ 1..N J] 데크에 대응하는 테이블에 여전히있다.

난 그냥 톱 작업의 삽입 정렬 한 후, 또한 의사 코드에 대해 썼다. 원래 책은 줄에 하나 개의 배열이 감소 될 때까지 데크 시뮬레이션 방법,하지만 특정 구현 과정에서, 나는 빈 벡터 표현 손 빈 손으로 카드를 배열 내 갑판을 표현, 의사 코드를 읽고 거의 절반 메모리 풋 프린트. 이는이 의사 코드의 하이라이트 간주 될 수 있습니다. 사실,이 최적화 된 공간 복잡성 드물지 않다, 생각해 매우 전형적인 예는 구현의 일차원, 이차원 배열 배낭 문제이다. 동적 프로그래밍 배낭 문제를 수행 할 때, 우리는 단지 행렬의 마지막 행을 필요로하기 때문에, 지속적으로 상태 천이 행렬을 업데이트하여, 그 상태를 기록하는 매트릭스를 사용하여 각 값 행렬의 행에서만 행렬의 행 업데이트를 결정, 따라서, 2 차원 배열을 최적화 할 수 있고, 두 개의 배열은 항상 교환 갱신 될 수있다. 1 차원 배열 업데이트의 배열의 값이 후방에서 전방마다 우리를 업데이트 할 때 배낭을 나타내는 상태 전이 수학 식 01은, 표면이 소정의 값에 의해 지정되어 있으므로 01 배낭 문제를 들어, 가까운 스텝 차원 어레이 (사용 동적 배열) 매트릭스에 걸쳐 갱신 될 수있다.

그래서 미래의 배열의 일부 작업의 구현은 불필요한 메모리 소비를 줄이기 위해 자신의 상태 업데이트 자체의 배열을 사용할 수 있는지 여부에 대해 생각하기 전에.

 

:이 책은 매우 중요한 개념을 소개 한 후 루프 불변을 .

주요 루프 불변 알고리즘의 정확성을 증명합니다. 루프 불변에 대해서는, 세 가지 속성을 증명해야합니다 :

초기화 : 루프의 첫 번째 반복하기 전에, 그것은 사실이다.

홀드 : 사실 전에 반복 루프, 그것은 다음 반복하기 전에 사실 남아있는 경우. (즉, 불변의 루프 반복이 성립)

종료 : 루프 종료는, 불변의 도움으로 우리를 위해 유용한 속성을 제공 할 때 알고리즘의 정확성의 본질을 증명한다.

스트립의 설립의 본질을 증명하기 위해 수학적 귀납법과 마찬가지로, 기본적인 필요는 케이스와 유도 단계를 증명합니다.

삽입 정렬의 경우,

초기화 : 루프의 첫번째 반복 전에 다음 J = 2, 서브 어레이 A [1..j - 1] 단 하나의 소자 A [1] 조성, 정렬 된 루프 불변 사실이고;

보류 : 비 정식 사이클 본체 의지 문 (A)의 7 행 4, 반복의 관점에서, (엄밀히 수학적 기호로 표시되지 이해 설명을 참조) [J - 1], A [J - 2] , A [J - 3]과는 적절한 위치의 A [J]을 찾을 때까지 오른쪽으로 한 위치로 이동할 때, 라인이 [J]의 값이 위치에 삽입 8 문 등이있다. 서브 어레이 요소 A [1..j 상기 조성물이 정렬되어이 경우, 반복 루프는 불변 마찬가지.

종단 : for 루프의 종단으로 이어지는 상태> A.length J이다. J는 각 반복, J +1 씩 증가 = N + 1를해야하는 경우, 루프의 종료. 제 n +를 사용하여 루프 불변 식 1 J 다르게, 우리가, 서브 어레이 A [1..N] 요소는 이미 정렬, 부분 배열의 A [1..N] 전체 배열은, 따라서, 우리는 전체 배열이 정렬됩니다 결론. 따라서,이 알고리즘은 정확한.

 

추천

출처www.cnblogs.com/Black-treex/p/12439883.html