본문 바로가기

Study/알고리즘3

[알고리즘] DFS와 BFS 1. DFS(Depth-First Search) - 깊이 우선 탐색 - 루트 노드나 임의 노드에서 "다음 브랜치로 넘어가기 전에 해당 브랜치를 모두 탐색"하는 방법 - 스택이나 재귀함수를 이용해 구현 - 모든 경로를 방문해야 할 경우 적합 - 인접 행렬 : O(V^2) - 인접 리스트 : O(V+E) // V는 접점, E는 간선 2. BFS(Breadth-First Search) - 너비 우선 탐색 - 루트 노드나 임의 노드에서 "인접한 노드부터 먼저 탐색"하는 방법 - 큐를 이용해 구현 - 최소 비용으로 탐색을 진행할 때 적합\ - 인접 행렬 : O(V^2) - 인접 리스트 : O(V+E) 3. 소스코드(C++) // DFS #include #include using namespace std; int .. 2023. 10. 30.
[알고리즘] 해시 테이블(Hash Table) 1. 해시 테이블 - 완전 탐색(브루트 포스)으로 시간초과에 빠지게 되는 문제들을 풀기 위해 필요함 - Key, Value로 데이터를 저장하는 자료구조 - 데이터를 빠르게 검색할 수 있음 - 각 key에 따라 고유한 index를 생성하고 이 index 값을 활용해 값을 저장하거나 검색한다. - 미리 key값으로 데이터들을 저장해 놓으면 데이터를 찾기 쉽다. - 평균 시간복잡도 : O(1) 2. 해시 함수에서 고유 인덱스 값을 설정하는 방법 1) Division Method - 나눗셈을 이용하는 방법 - 입력값을 테이블의 크기로 나누어 계산 - 테이블의 크기를 소수로 정하고 2의 제곱수와 먼 값을 사용해야 효과가 좋다고 알려짐 2) Digit Folding - 각 key의 문자열을 ASCII 코드로 바꾸고.. 2023. 10. 24.
[알고리즘] 이분 탐색(Binary Search) 1. 이분 탐색 - 정렬된 배열에서 찾고자 하는 수를 찾는 방법 - 계속해서 두가지 경우로 나누면서 탐색 - 인덱스를 이용해 탐색 - 시간복잡도 : O(logN) 2. 탐색 방법 1. 배열의 첫번째 인덱스와 마지막 인덱스 번호를 각각 left, right로 저장 2. left와 right의 중간지점인 mid의 인덱스를 (left+right)/2 를 이용해 구함 3. left가 right보다 커지는 시점까지 반복 -> left보다 right가 커지면 찾고자 하는 수가 없는 경우임 4. 배열의 mid번째 값과 내가 찾고자 하는 값을 비교 4-1. 내가 찾고자 하는 값이 mid보다 작은 경우 - 최소한 mid - 1번째 인덱스의 값보다는 작거나 같기 때문에 right를 mid-1로 변경시켜 최대값을 바꿔줌(구.. 2023. 10. 18.