본문 바로가기

Study/Algorithm Study

(12)
[Algorithm] Segment Tree 문제Prefix Sum 배열을 이용하면 누적합을 O(n) 시간에 구할 수 있다.=> O(logn)에 누적합을 구할 수 있는 방법은 없을까?=> 배열을 수정할 수 있는 방법은 없을까? Segment Tree - 완전 이진 트리이다. (배열로 표현할 수 있다.)- 리프노드는 배열의 각 원소 값을 갖는다.- 각 노드는 왼쪽 자식 노드와 오른쪽 자식 노드 값의 합을 갖는다.- 노드의 개수는 배열의 요소 개수의 4배가 된다.합 구하기각 노드가 나타내는 구간이 [start, end]일 때, [left, right] 합을 구하는 방법은? 루트부터 차례대로 다음을 점검한다. (4가지 경우의가 존재한다.) 1. [start, end]와 [left, right]가 겹치지 않는다.=> 아무것도 하지 않는다. 2. [star..
BIT (Binary Indexed Tree) 문제 Prefix Sum 배열을 이용하면 누적합을 O(n) 시간에 구할 수 있다. => O(logn)에 누적합을 구할 수 있는 방법은 없을까 ? 용어 정의 A[i] : 배열 A의 i번째 요소 L[i] : i를 2진수로 나타냈을 때 마지막 1에 해당하는 값 ex) 12 = 1100 => L[12] = 4 Tree[i] : A[i]부터 앞으로 L[i] 개의 값의 합 (이전 수) L[i]를 구하는 방법 L[i] = i & -i -i = ~i + 1 i = 1001101011101011000000000000 ~i = 0110010100010100111111111111 -i = 0110010100010101000000000000 i & -i = 000000000000000100000000000 PrefixSum[..
[Algorithm] 해시 테이블 + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 해시 테이블 1. 배열- 최악의 경우: O(n) 2. 이진 탐색 - 평균: O(log n) - 최악의 경우: O(n) 3. Red - Black Tree - 최악의 경우: O(logn) 4. B - Tree - 최악의 경우: O(log n) - 트리의 높이가 작다. O(log n) 보다 빨리 풀 수 있는가? => 해시 테이블 (Hash Table) 사용 - 평균: O(1) 가장 단순한 방식의 해시 테이블 구현 1 ~ N 사이의 수 k개가 원소인 집합을 다음과 같이 구현한다. 1. 크기가 N인 배열 A를 생성한다. 2. 수 i가 이 집합의 원소라면, A[i] = 1, 아니면 A[..
[Algorithm] 탐색 트리 + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 탐색 트리 문제의 정의 집합을 표현하는 자료 구조 - 문제를 풀기 위해서 수학의 집합의 개념을 이용할 수 있다. (집합이란 어떤 답이 '있다', '없다'를 알 수 있어야 한다.) - 집합을 어떻게 표현할 것인가? 집합에 대한 연산 1. membership query => O(n) - 어떤 원소가 집합에 존재하는지를 판별할 수 있는 연산 2. insertion (삽입) => O(1) - 배열 맨 뒤에 삽입 3. deletion (삭제) => O(n) 탐색 트리 레코드 = 개체에 대한 모든 정보를 묶은 저장 단위 ex) 주민등록번호, 이름 키 = 각 레코드를 대표할 수 있는 값 + 정수로 가정한다. (같은 키를 같는 노드는 ..
[Algorithm] 정렬: 계수 정렬, 선택 문제 + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 계수 정렬 (counting sort) - 범위가 작은 수들을 빠르게 정렬할 때 사용된다. 1. 각 수가 나온 횟수를 센다. (자신보다 작은 원소의 개수를 센다.) 2. 1 결과를 이용하여 각 수보다 작은 숫자가 몇 개 있는지 센다. (누적합 이용) ex) {5, 9, 3, 6, 9, 5, 2, 10, 1} 1. 하나의 숫자를 찾아갈 수 있는 시간을 Θ(1)이라고 가정할 때, 각 숫자가 나온 횟수를 세는데 Θ(n) 2. 다시 숫자를 정렬된 리스트에 채워넣는데 Θ(n) => Θ(n) ex) {12387, 90123, 39735, 9012344} - (최대값 - 최소값)의 범위 수..
[Algorithm] 정렬: 버킷 정렬, 기수 정렬 + 항공대학교 이인복 교수님의 알고리즘 해석 및 설계 과목 내용를 정리한 글입니다. 비교에 기반한 정렬의 시간 복잡도 한계 => 두 원소의 비교에 기반한 정렬 알고리즘은 Θ(nlogn)보다 빠르게 동작할 수 없다. 버킷 정렬 (Bucket sort) 정렬될 데이터가 자릿수라는 개념이 있다면 이를 이용한다. ex) 정렬될 데이터가 택배 주소라면, 전체를 다 보지 않고 처음 위치를 보고 데이터를 분류할 수 있다. 분류한 데이터를 각각 정렬하고, 이를 이으면 정렬이 완성된다. - c개의 버킷으로 모든 원소가 균등하게 배분되어 각각 n / c개가 들어갔을 경우 => n / c개를 Θ((n/c) log (n/c)) 시간에 정렬할 수 있고, 이를 다시 합치면 => c(n/c) log(n/c)..