-
[이진 탐색] 개념정리Algorithm/개념정리 2021. 11. 18. 10:25
순차 탐색
리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법
'보통 정렬되지 않은 리스트'에서 데이터를 찾아야 할 때 사용함
리스트 내에 데이터가 아무리 많아도 시간만 충분하다면 항상 원하는 원소(데이터)를 찾을 수 있다는 장점
시간 복잡도: O(N) → 데이터의 개수가 N개일 때 최대 N번의 비교 연산이 필요함
이진 탐색 : 반으로 쪼개면서 탐색하기
조건: 배열 내부의 데이터가 정렬되어 있어야 함 → 데이터가 무작위일 때는 사용할 수 없지만, 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있음
특징:
탐색 범위를 좁혀가며 데이터 탐색 가능함
이진 탐색은 위치를 나타내는 변수 3개를 사용함(탐색하고자 하는 범위의 시작점, 끝점, 중간점)
찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾음
시간 복잡도: O(logN)
→ 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어듦
→ 절반씩 데이터를 줄어들도록 만든다는 점은 앞서 다룬 퀵 정렬과 공통점이 있음
→ 각 단계마다 원소의 개수를 2로 나누는 것과 동일하므로 연산 횟수는 log(2)N에 비례함
구현 방법(2가지):
→ 재귀 함수 사용
→ 반복문 사용
적용:
탐색 범위가 2000만을 넘어가면 이진 탐색으로 문제 접근해보기 권장함
일반적으로 처리해야 할 데이터의 개수가 1000만 단위 이상으로 넘어가면 이진 탐색과 같이 O(logN)의 속도를 내야 하는 알고리즘이 필요함
(이진 탐색은 코딩 테스트 단골 문제이니 외우길 권장함^^)
트리 자료구조
그래프 자료구조의 일종
이진 탐색의 전제 조건: 데이터 정렬 → 동작하는 프로그램에서 데이터를 정렬해두는 경우가 많으므로 이진 탐색을 효과적으로 사용 가능함
데이터베이스의 경우:
→ 내부적으로 대용량 데이터 처리에 적합한 트리 자료구조를 이용해 항상 데이터가 정렬되어 있음
→ 데이터베이스에서의 탐색은 이진 탐색과 조금 다르지만, 이진 탐색과 유사한 방법을 이용해 탐색을 항상 빠르게 수행하도록 설계되어 있어서 데이터가 많아도 탐색하는 속도가 빠름
특징:
→ 트리는 부모 노드와 자식 노드의 관계로 표현됨
→ 트리의 최상단 노드는 '루트 노드' 라고 함
→ 트리의 최하단 노드는 '단말 노드' 라고 함
→ 트리에서 일부를 떼어내도 트리 구조이며 이를 '서브 트리' 라고 함
→ 트리는 파일 시스템과 같이 계층적이고 정렬된 데이터를 다루기에 적합함
이진 탐색 트리
트리 자료구조 중에서 가장 간단한 형태가 '이진 탐색 트리' 임
이진 탐색 트리란 이진 탐색이 동작할 수 있도록 고안된, 효율적인 탐색이 가능한 자료구조 임
특징:
→ 부모 노드보다 왼쪽 자식 노드가 작음
→ 부모 노드보다 오른쪽 자식 노드가 큼
→ 즉, 값의 크기가 왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드 형태가 성립해야 이진 탐색 트리라고 할 수 있음
'Algorithm > 개념정리' 카테고리의 다른 글
[최단 경로] 개념 정리 (0) 2022.01.11 [다이나믹 프로그래밍] 개념 정리 (0) 2021.11.23 [정렬] 개념정리 글 모음 - List<T>, 사용자 정의 객체, 배열 (0) 2021.09.30 [정렬] 개념정리1 - 삽입 정렬, 선택 정렬, 퀵 정렬, 계수 정렬 (0) 2021.08.18 [DFS/BFS] 개념정리3 - DFS과 BFS (1) 2021.07.17