알고리즘 4

[알고리즘] 정렬

정렬 일반적으로 시간복잡도 O(nlogn)인 정렬을 사용 특수한 상황인 경우 상황에 따라 O(n)에 근접한 알고리즘이 사용될 수 있습니다. O(n^2) 인 알고리즘 Bubble sort 앞에서부터 인접한 2개씩 크기를 비교하여 왼쪽에 있는 데이터가 오른쪽보다 크면 Swap. 1. 처음에는 n과 n-1을 비교하는 것까지 하고 (그러면 가장 큰 수가 맨 뒤로 간다.) 2. 그 다음에 n-1과 n-2를 비교하는 것 까지 하고 (그러면 2번째로 큰 수가 뒤에서 2번째로 간다.) 3. n-2와 n-3을 비교… 1과 2를 비교하는 것까지 반복한다. 이렇게 하면 비교연산을 n(n-1)/2 번 수행하면 된다. (최악의 경우 이렇고, 이미 정렬이 되어 있다면 n번 수행하면 된다) Selection sort 1. 1번째 ..

알고리즘 2021.05.14

[알고리즘][자료구조] Graph (그래프)

3번째 주제 그래프입니다. 여기서는 간단한 Graph와 BFS DFS에 대해 보도록 하겠습니다. 그래프 노드와 엣지로 이루어짐 그래프를 표현하는 방식에는 인접 행렬 (Adjacent Matrix)와 인접 리스트 (Adjacent Matrix)가 있습니다. 코드 구현 그래프 순회(탐색) 그래프를 순회하면서 모든 노드를 빠짐없이 탐색하는 것. BFS와 DFS 방식이 있습니다. DFS를 먼저 살펴보면 DFS는 시작 노드의 한 방향으로 갈 수 있는 경로가 있는 곳까지 깊이 탐색을 해 가다가 더 이상 갈 곳이 없으면, 가장 마지막에 만났던 갈림길이 있는 노드로 돌아와서 다른 방향의 노드로 탐색을 계속 진행하여 모든 노드를 방문하는 순회 방법입니다. -> 새로 탐색한 것을 먼저 방문하고, 그게 없는 경우 마지막에 ..

[알고리즘][자료구조] Tree (트리)

2번째 주제 트리입니다. Tree 그래프의 일종으로 Node가 계층 관계로 1:n 관계를 가지는 자료구조 기본 Tree에서는 용어 정리 정도만. 노드: 각 원소 엣지: Node를 연결하는 선, 부모 노드와 자식 노드를 연결한다. 레벨: 루트에서 노드에 이르는 엣지의 값 (루트는 0) 높이: 노드의 레벨 중 가장 큰 값 루트 노드: 시작원소 형제 노드: 같은 부모를 가지는 Node들 조상 노드: 루트까지의 경로에 있는 모든 노드들 서브 트리: 부모 노드와의 엣지를 끊었을 떄 생기는 트리 자손 노드: 서브 트리에 있는 하위 레벨의 노드들 단말(leaf) 노드: 자식 노드가 없는 노드 노드의 차수(degree): 자식 노드의 개수 Binary Tree 모든 노드가 자식 트리를 최대 2개까지만 가질 수 있는 트..

[알고리즘][자료구조] Linked List (링크드 리스트)

Linked List 원소의 추가/삭제가 빈번하게 일어날 때, 배열은 해당 원소 이후의 모든 원소를 1칸씩 앞/뒤로 옮겨 주어야합니다. 이런 문제를 해결한 자료 구조가 Linked List입니다. 하나의 Node가 다음 Node에 대한 Link를 가지고 있는 것이 Single Linked List 이전 node에 대한 Link도 가지고 있는 경우 Double Linked List 아래 그림과 같이 간단한 작업으로 Node의 추가 삭제가 가능합니다. 보통 Head에는 Data를 가지지 않고 Node1에 대한 Link만을 가지고, Tail Node에서 next로 Nullptr을 가지는 것이 일반적입니다. 하지만 이 Linked List는 특정 원소에 접근하는 시간이 길다는 단점이 있습니다. ArrayList..

반응형