본문 바로가기

study-knou/알고리즘

(11)
탐색 알고리즘(2) 학습개요 균형 탐색 트리로서 흑적 트리와 B-트리를 이용하는 탐색 방법에 대해서 학습한다. 또한 삽입, 삭제, 탐색 연산을 기본적으로 상수 시간에 수행할 수 있는 해싱 기법에 대해서 살펴본다. 학습목표 흑적 트리의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. B-트리의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 해싱의 개념과 해시 함수 및 충돌 해결 방법의 종류와 특징을 이해할 수 있다. 흑적 트리? 이진 탐색 트리, 균형 탐색 트리 1. 모든 노드는 흑색이거나 적색이다. 2. 루트 노드와 리프 노드는 흑색이다. 모든 리프 노드는 Null 노드이다. 3. 적색 노드의 부모 노드는 항상 흑색이다. 적색 노드가 연달아 나타날 수 없다. 4. 임의의 노드로부터 리프 노드까지의 경로 상에는 ..
정렬 알고리즘 (2) - 개요 기본적인 비교 기반 정렬 알고리즘에 이어서, 향상된 성능을 갖는 합병 정렬, 퀵 정렬, 그리고 힙 정렬에 대해서 살펴본다. 또한 비교 기반의 정렬 알고리즘이 아닌 데이터의 분포 특성을 이용하는 정렬 알고리즘으로서 계수 정렬과 기수 정렬에 대해서 학습한다. 학습목표 합병 정렬과 퀵 정렬의 동작과 특징을 이해할 수 있다. 힙 정렬의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 비교 기반 정렬 알고리즘의 하한의 개념을 이해할 수 있다. 계수 정렬과 기수 정렬의 개념, 동작, 성능 그리고 특징을 이해할 수 있다. 합병 정렬과 퀵 정렬 합병 정렬 최선, 최악, 평균 수행 시간이 모두 O(nlogn) 안정적인 정렬 알고리즘 제자리 정렬 알고리즘이 아님 데이터가 늘어나면 늘어날 수록 추가적인 저장 ..
정렬 알고리즘 (1) 정렬의 기본 개념과 관련 용어를 살펴보고, 정렬할 원소의 개수가 작을 때 간편하게 사용될 수 있는 간단하고 기본적인 성능의 비교 기반의 내부 정렬 알고리즘인 버블 정렬, 선택 정렬, 삽입 정렬, 셸 정렬에 대해서 학습한다. 학습목표 정렬과 관련된 용어 및 개념을 이해할 수 있다. 버블 정렬의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 삽입 정렬의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 선택 정렬의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 셸 정렬의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 정렬? 여러 데이터로 구성된 리스트에서 값의 크기 순서에 따라 데이터를 재배치하는 것 내부 정렬 - 모든 데이터 주기억장치에 저장 후 정렬 외부 정렬 - 외부 기억 장치..
욕심쟁이 알고리즘 (2) 대표적인 알고리즘 설계기법 중 하나인 욕심쟁이 방법을 적용한 데이크스트라 알고리즘, 작업 스케줄링 문제, 작업 선택 문제, 그리고 허프만 코딩의 원리와 동작, 그리고 성능과 특징을 학습한다. 단일 출발점 최단 경로를 구하는 데이크스트라 알고리즘의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 작업 스케줄링 문제의 개념, 동작, 그리고 성능을 이해할 수 있다. 작업 선택 문제의 개념, 동작, 그리고 성능을 이해할 수 있다. 허프만 코딩의 개념, 동작, 그리고 성능과 특징을 이해할 수 있다. 데이크스트라 알고리즘 특정한 하나의 정점에서 다른 모든 정점으로의 최단 경로 욕심쟁이 방법 O(|V|^2) 음의 가중치를 갖는 간선이 없다고 가정 거리 d[v] 출발점에서 현재까지 선택된 정점 집합 S를 경유하여..
욕심쟁이 알고리즘 (1) 대표적인 알고리즘 설계기법 중 하나인 욕심쟁이 방법의 개념과 이를 적용한 동전 거스름돈 문제, 배낭 문제, 그리고 최소 신장 트리를 구하는 알고리즘의 원리와 동작, 그리고 성능과 특징에 대해서 학습한다. 욕심쟁이 방법의 원리 해를 구하는 일련의 선택 단계마다 전후 단계의 선택과는 무관하게 해당 단계에서 가장 최선이라고 여겨지는 국부적인 최적해를 선택함으로써 전체적인 최적해를 구하는 방법 greedy -> 탐용적 방법, 탐욕 알고리즘, 그리디 알고리즘 동적 프로그래밍 방법 vs 욕심쟁이 방법 최적화 문제 해결에 주로 사용 최적성의 원리가 적용된 방법 동적 프로그래밍 소문제의 여러 최적해로부터 다음 크기의 문제에 대한 최적해가 결정 -> 항상 전체적인 최적해를 구함 욕심쟁이 소문제(각 단계)에 대해서 하나의..
동적 프로그래밍 알고리즘(2) 두 문자열 X와 Y사이의 편집 거리(edit distance) 두 문자열 사이의 근접성 또는 유사성을 판단하는 척도 X=x1x2... xn, Y=y1 y 2... ym 문자열 X를 Y로 변환하는 데 필요한 전체 편집 연산에 대한 최소 비용 특정 위치에 새 문자를 삽입하는 연산 -> 삽입 비용 1 특정 위치의 문자를 삭제하는 연산 -> 삭제 비용 1 특정 위치의 문자를 다른 문자로 변경하는 연산 -> 변경 비용 2 X=x1x2x3x4x5 = SNOWY Y= y1 y 2 y3 y4 y 5 = SUNNY SNOWY -> SUNNY로 변경하는데 드는 편집 거리는 최소비용 4 스트링 편집 거리에서의 최적성의 원리 X와 Y사이의 편집 거리는 이들의 부분 문자열 사이의 편집 거리를 포함 x의 마지막 글자가 Y의 마지..
동적 프로그래밍 알고리즘 (1) 동적 프로그래밍 방법의 원리 문제의 크기가 작은 소문제에 대한 해를 저장해 놓고, 이를 이용하여 크기가 보다 큰 문제의 해를 점진적으로 만들어가는 상향식 접근 방법 각 작은 문제는 원래의 문제와 동일한 문제이지만 입력의 크기만 작음 입력의 크기가 아주 작은 단순한 문제가 되면 쉽게 해를 구할 수 있고, 이를 테이블에 저장 이후 해당 소문제의 해가 필요할 때마다 테이블에 저장된 결과를 바로 이용 동적 프로그래밍 => 동적 계획법 컴퓨터에서의 프로그램과는 무관, 해를 구축하는 테이블을 이용한다는 의미 최솟값/최댓값을 구하는 문제에 적용 최적화 문제에 동적 프로그래밍 방법을 적용하려면? 최적성의 원리를 반드시 만족시켜야 함 주어진 문제에 대한 최적해는 주어진 문제의 소문제에 대한 최적해로 구성된다. 동적 프로..
분할정복 알고리즘 2 - 합병 정렬, 선택 문제 - 합병 정렬 - 배열을 동일한 크기의 두 개의 부분 배열로 분할, 각 부분배열을 순환적으로 정렬 후, 정렬된 두 부분배열을 합명 -> 하나의 정렬된 배열을 만듦 - 분할, 정복, 결합 - 합병 정렬은 합병이 중요함 ( 퀵정렬은 분할이 중요 ) - A, B 원소를 하나씩 비교, 남은 하나는 그냥 추가 - 합병 함수 Merge() 수행 시간 ->최악의 경우 세타(n) 선형적으로. - 입력 데이터 개수만큼의 저장 장소가 추가로 필요 (제자리 정렬 알고리즘이 아님) - 합병 정렬 MergeSort() 수행 시간 - 크기 n/2인 두 번의 MergeSort() 순환 호출 + 한 번의 합병 Merge() - T(n) = 2T(n/2) + theta(n) -> T(n) = O(nlon) ..

728x90