no image
[Algorithm] 위상 정렬 (Topological Sort)
Topological Sort (위상 정렬) 개요Topological sort는 Direct Acyclic Graph의 경우에서 문제를 해결하는 방법이다.방향이 존재하는 그래프에서 각 vertex의 선행 순서 정보를 유지하면서 모든 vertex를 탐색하는 알고리즘이다.Type of Edges알고리즘을 알아보기 전에, Direct Acyclic Graph를 알기 위해 방향이 있는 그래프에서 DFS를 실행할 때 나타나는 edge의 종류를 먼저 정리해 보자. Tree Edge: 새로운 정점을 만났을 때 생기는 edge. Edge는 한 정점에서 다른 정점을 이을 때 발생하게 된다. Tree Edge는 어떤 정점이 새로운 정점과 연결될 때 생기는 edge를 말한다.Back Edge: Back Edge는 트리에서 ..
2024.09.15
no image
[Algorithm] 계수 정렬 (Counting Sort)
I. 계수 정렬 (Counting Sort)의 개요가. 계수 정렬의 정의선형 시간에 정렬하는 효율적인 알고리즘  나. 계수 정렬의 특징입력키가 한정될 때 사용가능 (입력이 0부터 K사이의 수)정수나 정수로 표현할 수 있는 자료에 대해서만 동작Max 값 산출이 선행되어야 함 Ⅱ. Algorithm Concept카운팅 정렬은 다음과 같은 과정으로 수행된다.입력받은 배열 A의 요소값들의 등장 횟수를 저장할 배열 B와 최종적으로 정렬된 값들을 담을 배열 C를 준비한다.입력밭은 배열에서 값을 하나씩 꺼내서 해당 값을 배열 B의 인덱스로 사용해 B의 요소 값을 하나 증가시킨다. (B [A [i]]++)B가 완성되면 B의 각 요소들을 누적합으로 갱신한다. B [i] = B[i] + B [i-1]A의 가장 뒤에서부터 ..
2024.09.15
no image
[Algorithm] 문자열 탐색 알고리즘 - 원시적 탐색, 카프라빈 탐색, KMP탐색, 보이어 무어 탐색
I. 문자열 탐색의 개요가. 문자열 탐색의 정의문자열 데이터 안에서 특정 패턴의 검색 대상이 되는 문자열을 탐색하는 알고리즘 Ⅱ. 문자열 탐색 알고리즘가. 원시적 탐색* 특정 대상의 문자열에서 찾고자 하는 패턴 문자를 탐색하는 기법* 주어진 텍스트에서 주어진 패턴이 어디에 나타나는지 알아내는 문제BasicStringMatching(A[ ], P[ ], n, m) {/* n: 배열 A[ ]의 길이, m: 배열 P[ ]의 길이 */for (i = 0; i ≤ n-m; i++) {for (j == 0; j if ( P[j] != T[i + j] ) break; }if (j == m) printf (“패턴이 텍스트의 i번째 문자부터 나타남”);} } 나. 카프라빈 탐색* 문자열 패턴을 수치로 변환하여 탐색하는 ..
2024.09.15
no image
[Algorithm] 힙 정렬 (Heap Sort)
I. 힙 정렬 (Heap Sort)의 개요가. 힙 정렬의 정의트리 중에서 부모 노드의 원소 값이 자식 노드의 원소 값보다 큰 완전 이진 트리인 힙(Heap)을 만들기 위한 정렬 방법나. 힙 정렬의 특징힙 구조에서 가장 큰 값의 위치는 루트에 있음.배열에 저장하는 것이 효율적임.수행시간 복잡도: O(n·log2n) Ⅱ. 힙 정렬의 삽입∙삭제 과정 및 사례가. 힙 정렬의 삽입과정 및 사례새로운 노드의 위치를 정한다.삽입할 데이터를 새로운 노드에 놓는다.새로운 노드와 부모를 비교하여 부모가 더 작으면 바꾸는 과정을 루트에 도달할 때까지 계속한다.⇒⇒⇒void insert_max_heap(element item, int *n) {int i;if(HEAP_FULL(*n)) {fprintf(stderr,”The h..
2024.09.15
no image
[Algorithm] 백트래킹 알고리즘
I. 백트래킹(Back Tracking) 알고리즘의 개요가. 백트래킹 알고리즘의 정의깊이우선탐색(DFS)기법에 Pruning 기법을 적용하여 Promising 검토와 Back Tracking 을 활용하여 탐색 성능을 개선한 알고리즘 나. 백트래킹의 특징특징설명깊이우선탐색 기법탐색 트리의 최초의 하위노드 (child node) 를 확장하여 목표상태 (goal state) 가 발견될 때까지 더 깊이 (deeper and deeper) 확장하는 무정보 탐색(Uninformed or Blind Search) 방법Pruning 기법유망하지 않은 노드를 포함한 경로를 더 이상 고려하지 않도록 가지치기 표시를 하는 기법 Ⅱ. 백트래킹의 순서도 절차가. 백트래킹의 순서도나. 백트래킹의 절차절 차핵심 개념설명1. 깊이우..
2024.09.15
no image
[Algorithm] 최단 경로 탐색 알고리즘
I. 최단 경로 탐색의 개요가. 최단 경로 탐색의 정의그래프 내의 한 vertex에서 다른 vertex로 이동할 때 가중치의 합이 최솟값이 되는 경로를 탐색하는 알고리즘 Ⅱ. 최단 경로 탐색 알고리즘가. 다익스트라 알고리즘 (Dijkstra Algorithm)* 사이클이 없는 방향성에만 적용* 가중치 합 최소* Link State 알고리즘 활용각 vertex들은 시작점으로부터 자신에게 이르는 경로의 길이를 저장할 곳을 준비모든 vertex들은 경로의 길이를 무한대로 초기화시작 vertex의 경로의 길이를 0으로 초기화하고 최단 경로에 추가연결된 vertex들의 경로 길이를 갱신인접한 vertex가 최단 경로에 이미 존재하면, 이전 경로 길이와 비교, 작으면 수정, 크면 무시그래프 내의 모든 vertex들..
2024.09.15
no image
[Algorithm] 선택 정렬 (Selection Sort)
I. 선택 정렬 (Selection Sort)의 개요가. 선택 정렬의 정의정렬이 안된 숫자들 중에서 최소 값을 선택하여 배열의 첫 번째 요소와 교환하는 정렬 기법 나. 삽입 정렬의 특징수행시간 복잡도 : O(n2)안정성을 만족하지 않음.  Ⅱ. 선택 정렬의 단계 및 사례가. 선택 정렬의 단계 (Pseudo Code)  나. 선택 정렬의 사례 public static int[] doSelectionSort(int[] arr){for (int i = 0; i {int index = i;for (int j = i + 1; j if (arr[j] index = j;int smallerNumber = arr[index];arr[index] = arr[i];arr[i] = smallerNumber;}return a..
2024.09.15
no image
[Algorithm] 최소신장트리 알고리즘
I. 신장트리 (Spanning Tree)의 개요가. 신장 트리의 정의모든 정점을 포함하고 정점 간 서로 연결하면서 사이클이 존재하지 않는 그래프 최소신장트리의 정의정점 간 가중치(cost)의 합이 최소인 신장 트리 Ⅱ. 최소신장트리 알고리즘가. Prim의 알고리즘 * 시작점 기반 최소 가중치* 정점마다 edge 검사* 우선순위 큐 기반 구현임의의 vertex를 선택, 신장 트리의 루트 노드로 삽입선택된 vertex와 인접 vertex들 사이의 edge 가중치 검사최소 가중치를 가지는 edge를 선택해당 edge로 두 정점을 연결했을 때, cycle이 발생하면 버리고, 그렇지 않으면 신장트리에 삽입선택된 edge는 edge리스트에서 제거edge리스트에 더 이상의 edge가 없을 때까지 2~5번 반복voi..
2024.09.15
no image
[Algorithm] 기수 정렬 (Radix Sort)
I. 기수 정렬 (Radix Sort)의 개요가. 기수 정렬의 정의레코드를 비교하지 않고 준비된 버킷을 이용하여 정렬하는 방법 나. 기수 정렬의 특징O (n log2 n) 이라는 이론적인 하한선을 깰 수 있는 유일한 방법시간 복잡도 : O(kn) k : 버킷 수정렬 레코드 타입 제한 Ⅱ. 기수 정렬의 개념 및 사례가. 기수 정렬의 개념  나. 기수 정렬 사례 (Sorting a sequence of 4-bit integers) 코드 구현 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public void Radix_Sort(int[] data){int maxsize = getMaxlength(data..
2024.09.14