이진 탐색
이진 탐색 알고리즘이란?
매 탐색마다 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘
단, 리스트(배열)이 정렬되어 있어야 함
한번 탐색을 수행할 때 마다, 탐색의 범위가 반으로 줄어들기 때문에 시간 복잡도는 O(logN)
동작 방식
1. 배열의 중간 값을 가져온다
2. 중간값과 검색값을 비교
2-1. 중간 값 == 검색 값
종료
2-2. 중간 값 < 검색 값
중간 값 기준 배열의 오른쪽 구간을 대상으로 탐색
2-3. 중간 값 > 검색 값
중간 값 기준 배열의 왼쪽 구간을 대상으로 탐색
3. 값을 찾거나 간격이 비어있을 때까지 반복
이진 탐색의 장단점
- 단점: 정렬된 리스트에서만 사용할 수 있다
- 장점: 검색이 반복될 때마다 검색 범위가 절반으로 줄기 때문에 속도가 매우 빠르다
- 시간 복잡도: O(logN)
완전 탐색 알고리즘이란?
Exhaustive search, Brute force
간단히 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법
완전 탐색 알고리즘의 종류
- Brute-Force
- 반복문/조건문을 사용해서 가능한 모든 방법을 단순하게 찾는 기법
- 비트 마스크 (Bitmask)
- 이진수를 사용하는 컴퓨터의 연산 방식을 이용
- 문제에서 확인해야하는 경우가 두가지 선택지 중 하나일 때 유용
- 백트래킹 (Backtracking)
- 답을 찾는 과정에서 이 경로가 답이 아니라고 판단되면 버리고 다른 경로를 탐색하는 방법
- 가지치기(Pruning)이라고도 함
- 반복문의 횟수를 줄일 수 있지만, 최악의 경우에는 여전히 완전 탐색을 해야 함
- 재귀함수
- 답을 찾을 때까지 자기 자신을 반복적으로 참조하는 함수
- 직관적이고 간단
- 종료조건이 필요함
- 순열
- 완전 탐색의 대표적인 유형
- 서로 다른 n개의 원소에서 r개를 중복 없이 골라 순서대로 나열하는 것
- BFS(너비 우선 탐색)
- 최대한 넓게 이동한 다음, 더 이상 이동할 곳이 없을 때 아래로 이동
- 큐
- DFS(깊이 우선 탐색)
- 최대한 깊게 내려간 뒤, 더 이상 내려갈 곳이 없을 때 옆으로 이동
- 스택/재귀 함수
완전 탐색의 장단점
장점
- 구현이 단순하고 이해하기 쉽다.
단점
- 시간 복잡도가 매우!! 높음
- O(n!) 또는 O(2^n)
- 입력 크기가 조금만 커져도 실행 시간이 급증
- 비효율적
그럼에도 완전 탐색이 쓰이는 경우
- 모든 가능한 경우를 다 시도해봐야 하는 경우
- 문제의 입력 크기가 작을 때
예상 면접 질문
- 이진 탐색을 장단점을 들어 설명해주세요.
- 정렬된 리스트에서만 사용할 수 있다는 단점이 있지만,
- 검색이 반복될 때마다 검색 범위가 절반으로 줄기 때문에 속도가 매우 빠르다는 장점이 있다.
- BST와 Binary Tree에 대해 설명해주세요.
- 이진트리는 자식 노드가 최대 두 개인 노드들로 구성된 트리
- 이진 탐색 트리는 이진 탐색과 연결리스트를 결합한 자료구조
- 이진 탐색의 효율적인 탐색 능력을 유지하면서, 빈번한 자료 입력과 삭제가 가능하다는 장점이 있음
- 완전 탐색을 장단점을 들어 설명해주세요.
- BFS와 DFS에 대해 각각 설명해주세요.
출처
면접 질문 🌟🌟🌟
https://dev-coco.tistory.com/159
신입 개발자 기술면접 질문 정리 - 자료구조
💡 Array(List)의 가장 큰 특징과 그로 인해 발생하는 장점과 단점에 대해 설명해주세요. Array의 가장 큰 특징은 순차적으로 데이터를 저장한다는 점입니다. 데이터에 순서가 있기 때문에 0부터 시
dev-coco.tistory.com
개념
https://hongjw1938.tistory.com/78
알고리즘 - 완전탐색(Exhaustive Search)
1. 완전탐색 알고리즘이란? 완전탐색은 간단히 가능한 모든 경우의 수를 다 체크해서 정답을 찾는 방법이다. 즉, 무식하게 가능한 거 다 해보겠다는 방법을 의미한다. 이 방법은 무식하게 한다는
hongjw1938.tistory.com
https://velog.io/@hyehyes/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%99%84%EC%A0%84%ED%83%90%EC%83%89
[알고리즘] 완전탐색
모든 경우의 수를 시도하는 방법 Exhaustive search, Brute force상대적으로 구현이 간단하고, 해가 존재하면 항상 찾게 됨경우의 수에 따라 실행 시간이 비례하기 때문에 입력 값의 범위가 작은 경우 유
velog.io
https://adjh54.tistory.com/197
[Java/알고리즘] 완전 탐색(Exhaustive Search) 이해하기 -2 : 종류 별 이해
해당 글에서는 탐색 알고리즘 중 탐색 알고리즘에서 완전 탐색의 종류 별로 상세하게 이해를 돕기 위해 작성한 글입니다. 💡 [참고] 이전에 작성한 글을 읽고 오시면 도움이 됩니다. [Java/알
adjh54.tistory.com
'‡Computer Science ‡ > º 자료구조' 카테고리의 다른 글
[알고리즘] 암호화 알고리즘과 예상 면접 질문 (0) | 2024.06.20 |
---|---|
[알고리즘] 그리디 알고리즘 (Greedy Alogrithm) (0) | 2024.06.20 |
[해시] 해시의 개념과 예상 면접 질문 (0) | 2024.06.20 |
[정렬] 정렬의 종류와 외워둘 사항들, 예상 면접 질문 (0) | 2024.06.20 |
[자료구조] 스택과 큐, 연결 리스트 - 개념과 예상 기술 면접 질문 (0) | 2024.06.17 |