Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- synchronized
- Google OAuth
- 일급 컬렉션
- Dependency Injection
- Volatile
- 일급 객체
- factory
- spring security
- lombok
- OAuth 2.0
- java
- Spring
- builder
Archives
- Today
- Total
HJW's IT Blog
Algorithm: 과반수 찾기 본문
Brute Force Method
- 자신보다 뒤에 나오는 수 가 자신과 같다면 카운팅 해가며 찾는방법
- O(n^2)
O(n log n) 방법
- 원소들을 정렬한다 (O(n log n) 의 시간)
- 정렬전: 3 1 2 2 1 1 1 1 2 1 3 2 1 1 1 2
- 정렬후: 1 1 1 1 1 1 1 1 1 2 2 2 2 2 3 3
- 등장 횟수를 검사하는데에 O(n)의 시간
- 전체 시간: O(n log n)
O(n) 방법: Boyer-Moore

다음과 같이 작동한다: 같은 수라면 skip, 다른 수라면 상쇄
- 다음 숫자열에 대해 작동 과정을 살펴보자
- 3 1 2 2 1 1 1 1 2 1 3 2 1 1 1 2
- 3 1 2 2 1 1 1 1 2 1 3 2 1 1 1 2 (상쇄)
- 2 2 1 1 1 1 2 1 3 2 1 1 1 2 (skip)
- 2 2 1 1 1 1 2 1 3 2 1 1 1 2 (상쇄)
- 2 1 1 1 2 1 3 2 1 1 1 2
- 1 1 2 1 3 2 1 1 1 2
- 1 1 2 1 3 2 1 1 1 2
- 1 1 3 2 1 1 1 2
- 1 1 3 2 1 1 1 2
- 1 2 1 1 1 2
- 1 1 1 2
- 1 1 1 2
- 1 1 1 2
- 1 1
- 1 1 1 9 9 9 2 1 2 1 1
- 증명
- 과반수인 원소가 x 라고 하자. 위 방법을 사용해 왼쪽 한 그룹을 제거하더라도 남은 원소 중 과반수인 원소는 x
- 첫 원소는 둘중 하나: x 이거나 x가 아니거나.
- x 라면 x 가 나온 횟수만큼 다른 원소들이 맨 왼쪽 한 그룹에 포함
- 같은 횟수만큼 x와 다른 원소가 제거되므로 남은 원소 중 과반수 이상이 x
- 만약 x 가 첫 원소가 아니더라도 여전히 남은 원소 중 과반수 이상이 x
- 만약 절반 이상으로 나오는 값이 있다면 가장 오른쪽 그룹의 맨 앞의 값이다.
- 과반수 원소가 m 이라고 하고 각 원소마다 자신이 m 이면 카운터를 +1 아니면 -1
- 과반수가 있다면 카운터 값은 1 이상
'알고리즘' 카테고리의 다른 글
| Algorithm: Segment Tree (0) | 2023.04.14 |
|---|---|
| Algorithm: 욕심쟁이 기법 (0) | 2023.04.14 |
| Algorithm: 트리 지름 (0) | 2023.04.14 |
| Algorithm: 부분합(Prefix Sum) (1) | 2023.04.13 |
| Algorithm: RMQ(Range Minimum Query) (0) | 2023.04.12 |