본문 바로가기

728x90
반응형

연구개발/Algorithm

(9)
정렬 알고리즘 - 계수 정렬(Counting Sort) 계수 정렬(Counting Sort) 특수 정렬 알고리즘(기수 정렬, 계수 정렬) 중 하나. 계수 정렬의 개념 항목들의 순서를 결정하기 위해 집합에 각 항목이 몇 개씩 있는지 세는 작업을 하면서 선형 시간에 정렬하는 효율적인 알고리즘 속도가 빠르며 안정적이다. 제한 사항 정수나 정수로 표현할 수 있는 자료에 대해서만 동작 카운트들을 위한 충분한 공간을 할당하려면 집합 내의 가장 큰 정수를 알아야 한다. 계수 정렬 수행 과정 1단계 1. Data에서 각 항목들의 발생 횟수를 센다. 2. 횟수들은 정수 항목들로 직접 인덱스 되는 카운트 배열 Counts에 저장 1단계 3. 정렬된 집합에서 각 항목의 앞에 위치할 항목의 개수를 반영하기 위하여 카운트들을 조정한다. 2단계 : 정렬된 집합 1. Temp에 1을 ..
정렬 알고리즘 - 기수 정렬(Radix Sort) 기수 정렬(Radix Sort) 특수 정렬 알고리즘(기수 정렬, 계수 정렬) 중 하나. 특수 정렬 알고리즘 비교 정렬 두 원소를 비교하는 정렬의 하한선은 Ω(nlogn) " 최악의 경우 정렬 시간이 θ(nlogn)보다 더 빠를 수는 없는가? " 그러나 원소들이 특수한 성질을 만족하면 O(n)정렬도 가능하다. 기수 정렬 - 원소들이 모두 k 이하의 자리 수를 가졌을 때 (k: 상수) 기수 정렬의 개념 입력이 모두 K 이하의 자리 수를 가진 특수한 경우에(자연수가 아닌 제한된 종류를 가진 알파벳 등도 해당) 사용할 수 있는 방법 θ(n)시간이 소요되는 알고리즘 기수 정렬 수행 과정 #1 원소들의 일의 자리부터 비교 후 정렬, 다음은 십의 자리를 비교 후 정렬 ... 기수 정렬의 수행 과정 #2 정렬되지 않은..
정렬 알고리즘 - 힙 정렬(Heap Sort) 힙 정렬(Heap Sort) 고급 정렬 알고리즘(병합 정렬, 퀵 정렬, 힙 정렬) 중 하나. 먼저, 힙 정렬을 알아보기 전에 힙 정렬에 필요한 이진 트리(Binary Tree)의 개념 부터 알고 넘어가자. 이진 트리(Binary Tree) 최대 두 개까지의 자식 노드를 가질 수 있는 트리 하나의 노드는 0, 1 혹은 2개의 서브 트리를 가질 수 있다. 좌 서브 트리(Left Subtree) 우 서브 트리(Right Subtree) 널 트리(Null tree) - 어떠한 노드도 가지고 있지 않은 트리 포화 이진 트리(Full Binary Tree) 높이 h 인 이진 트리에서 모든 단말 노드가 레벨 h 에 있는 트리 최대 노드 수 : 완전 이진 트리(Complete Binary Tree) 높이(h-1)까지는..
정렬 알고리즘 - 퀵 정렬(Quick Sort) 퀵 정렬(Quick Sort) 고급 정렬 알고리즘(병합 정렬, 퀵 정렬, 힙 정렬) 중 하나 수행 방법 정렬할 전체 원소에 대해서 정렬을 수행하지 않고, 기준 값을 중심으로 왼쪽 부분 집합과 오른쪽 부분 집합으로 분할하여 정렬하는 방법 왼쪽 부분 집합에는 기준 값보다 작은 원소들을 이동시키고, 오른쪽 부분집합에는 기준 값보다 큰 원소들을 이동시킨다. 기준 값 피봇(Pivot) - 일반적으로 전체 원소 중에서 가운데(n/2)에 위치한 원소를 선택한다. 퀵 정렬은 다음 두 가지 기본 작업을 반복 수행하여 완성한다. 분할(Divide) - 정렬할 자료들을 기준 값을 중심으로 2개의 부분 집합으로 분할하기 정복(Conquer) - 부분 집합의 원소들 중에서 기준 값보다 작은 원소들은 왼쪽 부분 집합으로 기준 값..
정렬 알고리즘 - 병합 정렬(Merge Sort) 병합 정렬(Merge Sort) 고급 정렬 알고리즘(병합 정렬, 퀵 정렬, 힙 정렬) 중 하나 고급 정렬 알고리즘 분석 평균적으로 Θ(nlogn)의 시간이 소요되는 정렬 알고리즘들 병합 정렬(합병 정렬) 퀵 정렬 힙 정렬 최악의 경우 병합 정렬과 힙 정렬 → Θ(nlogn) 퀵 정렬 → Θ(n²) 수행 방법 여러 개의 정렬된 자료의 집합을 병합하여 한 개의 정렬된 집합으로 만드는 방법 부분 집합으로 분할(divide)하고, 각 부분집합에 대해서 정렬 작업을 완성(conquer)한 후에 정렬된 부분집합들을 다시 결합(combine)하는 분할 정복(divide and conquer)기법 사용 병합 정렬 방법의 종류 2-way 병합 : 2개의 정렬된 자료의 집합을 결합하여 하나의 집합으로 만드는 병합 방법 n..
정렬 알고리즘 - 삽입 정렬(Insert Sort) 삽입 정렬(Insert Sort) 기초적인 정렬 알고리즘(선택 정렬, 버블 정렬, 삽입 정렬)중 하나. 수행 방법 정렬 되어있는 부분집합에 정렬할 새로운 원소의 위치를 찾아 삽입하는 방법 정렬할 자료를 두 개의 부분집합 S와 U로 가정 부분집합 S : 정렬된 앞부분의 원소들 부분집합 U : 아직 정렬되지 않은 나머지 원소들 정렬되지 않은 부분집합 U의 원소를 하나씩 거내서 이미 정렬되어있는 부분집합 S의 마지막 원소부터 비교하면서 위치를 찾아 삽입 삽입 정렬을 반복하면서 부분집합 S의 원소는 하나씩 늘리고 부분집합 U의 원소는 하나씩 감소하게 한다. 부분 집합 U가 공집합이 되면 삽입 정렬이 완성된다. 삽입 정렬 수행 과정 정렬 되지 않은 [ 69, 10, 30, 2, 16, 8, 31, 22 ]의 자료..
정렬 알고리즘 - 버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort) 기초적인 정렬 알고리즘(선택 정렬, 버블 정렬, 삽입 정렬)중 하나 수행 방법 인접한 두 개의 원소를 비교하여 자리를 교환하는 방식 첫 번째 원소부터 마지막 원소까지 반복하여 한 단계가 끝나면 가장 큰 원소가 마지막 자리로 정렬 첫 번째 원소 부터 인접한 원소끼리 계속 자리를 교환하면서 맨 마지막 자리로 이동하는 모습이 물 속에서 물위로 올라오는 물방울 모양과 같다고 하여 버블(bubble) 정렬이라 지칭함. 버블 정렬 수행 과정 정렬되지 않은 {69, 10, 30, 2, 16, 8, 31, 22}의 자료들을 버블 정렬 방법으로 정렬하는 과정을 살펴보자. 인접한 두 원소를 비교하여 자리를 교환하는 작업을 첫 번째 원소부터 마지막 원소까지 차례로 반복하여 가장 큰 원소 6..
정렬 알고리즘 - 선택 정렬(Selection Sort) 선택 정렬(Selection Sort) 기초적인 정렬 알고리즘(선택 정렬, 버블 정렬, 삽입정렬) 중 하나 전체 원소들 중에서 기준 위치에 맞는 원소를 선택하여 자리를 교환하는 방식으로 정렬 수행 방법 전체 원소 중에서 가장 작은 원소를 찾아서 선택하여 첫 번째 원소와 자리를 교환한다. 그 다음 두 번째로 작은 원소를 찾아 선택하여 두 번째 원소와 자리를 교환한다. 그 다음에는 세 번째로 작은 원소를 찾아서 세 번째 원소와 자리를 교환한다. 이 과정을 반복하면서 정렬을 완성한다. 선택 정렬 수행 과정 정렬 되지 않은 {69, 10, 30, 2, 16, 8, 31, 22}의 자료들을 선택정렬 방법으로 정렬하는 과정을 살펴보자. 1. 첫 번째 자리를 기준 위치로 정하고, 전체 원소 중에서 가장 작은 원소 2..

728x90
반응형