자료구조 및 알고리즘 요약정리 - 1
개론
- '윤성우의 열혈 자료구조'를 공부하면서 필기한 내용들을 블로그에 요약정리
- 복습 + 백업을 목적으로 둔다.
01-1 강의
강의를 위한 서론. 패스.
01-2-1 강의
1. 이상적 알고리즘
2. 알고리즘 평가요소
ㅡ 시간복잡도, 속도(cpu의 부담)
ㄴ 공간복잡도, 메모리 사용량
=> 시간복잡도가 더 중요
ex) 메모리는 썼다 지울 수 있다.(공간 감소)
하지만 메모리 사용을 위한 접근시간이 증가한다(시간 증가)
※ 시간복잡도>공간복잡도
3. 시간복잡도 평가법
ㅡ cpu가 처리하는 연산횟수(중심이되는 특정연산의 횟수) 측정(연산횟수 증가 = cpu사용량 증가= 시간증가 = 시간복잡도 증가)
ㄴ 데이터수(x축)에 대한 연산횟수(y축)를 나타내는 함수 T(n)구성
=> 함수에 대한 그래프를 보고 한눈에 쉽게 알고리즘 비교가능
*주어진 상황과 요구되는 특성에 따라 알맞은 알고리즘을 선정하자.
01-2-2 강의
1.
중심연산자
주변연산자(의존전 연산자): 주변연산자의 연산횟수는 중심이 되는 연산자의 연산횟수에 의존적
ex) ==(중심)가 참을 반환할때까지 <, ++(주변)가 수행된다.
2.
시간복잡도 평가하기
1. 중심연산자 선택
2. 중심연산자를 기준으로 시간복잡도 함수 T(n) 생성(n은 데이터, T(n)은 연산횟수)
3. 알고리즘간 T(n)의 패턴을 비교, 분석한다
3.
T(n) ㅡ 최선: 어짜피 만족스러운 경우, 관심↓, ∴ 고려x => (best case)
ㄴ 최악: 문제가 되는경우, ∴ 시간복잡도의 기준 => (worst case)
ㄴ 평균: 모든 상황을 고려한 평균을 구하기 힘듦 ∴ 보조적
4.
순차탐색 알고리즘
개념: 차례대로 배열을 검색하는 방식
T(n)=n(최악의 경우)
01-2-3 강의
평균적인 경우의 T(n) 구하기 ->요점정리 생략한다
01-2-4 강의
이진탐색 알고리즘
특징: 순차탐색보다 좋은 성능을 보인다.
조건: 배열에 존재하는 데이터는 (어떤 기준이던지) 정렬되어 있어야함.
개념
0. 오름차순으로 데이터가 정렬되어 있으면
1. 중앙값을 찾는다 -> 중앙값 = (배열인덱스 시작+끝)/2
*배열인덱스 : 배열의 요소, /할때 몫은 버린다(c언어 구현할때 처럼)
2. 중앙값과 탐색대상을 비교
if 중앙>탐색 일시 처음~ 중앙-1 으로 반복검색
중앙<탐색 중앙+1~끝
※ 중앙값을 제외하는 이유
1. 이미 검색한 요소이다.
2. 데이터 수가 많을때 중복검색이 되면 = 계산시간↑
01-2-5 강의
실제 소스 구현, 28.p참조, 유의사항이 ☆로 2개있다. 필독.
01-2-6 강의
이진 탐색 알고리즘의 시간복잡도(최악일 경우)
1. 중심연산자 '=='
2. 32.p하단~33.p 상단 -(결과)- 데이터 n이 1이 될때까지 2로 나눈횟수k(비교연산)
ㄴ n=1일때 마지막 비교연산
3. 위식에서 n과 k간의 관계는 n*(2^(-1))^k=1 -> n =2^k -> log2n=klog22
∴ k = log2n
4. T(n) = k+1 = log2n+1
5. 하지만 빅오표기법으로 인해 T(n) = log2n(정확히는 O(log2n)=>O(logn), 01-2-8참조)
=> +1을 제외하는 이유 1. T(n)함수에서 +1은 영향이 매우적다
2. 우리는 알고리즘 패턴을 통해 알고리즘의 시간복잡도를 분석하기때문에 패턴이 중요하다.
=>빅오표기법을 참조하여 결정한다.
01-2-7 강의
1.
T(n)의 상수가 매우큰데 생략한다면?
-> 함수를 구성하는 상수가 나머지에 영향을 줄 정도로 크다면, 그 알고리즘은 사용하지 않는 것이 좋다.
ex) 1≤n≤10 T(n)=n²+1000 -> n=1일지라도 T(n)=1000이다. ∴ 애초에 비효율적이다.
2.
빅오표기법: T(n)에서 실제로 영향력을 끼치는 부분을 '빅오' 라고한다.
3.
단순하게 빅오 구하기 ㅡ '최고차항' 만 남기기
ㄴ 최고차항의 상수제거(패턴을 보기때문에 상수는 무시한다.)
ex) n²+2n+1 -> O(n²)
n⁴+n³+n²+1 -> O(n⁴)
5n³ -> O(n³)
=> 단, 같은 차수의 알고리즘끼리 비교할시에는 상수를 고려한다.
∴ 이를 일반화하면 T(n) = a*n^m + b*n^(m-1) + ... + a₁ -> O(n^m)
4.
빅오의 종류 ㅡ 상수형 빅오: O(1), 이상적, 흔치않음
ex) 항상 2회만 진행되는 알고리즘이더라도 O(3)이 아닌 O(1)이다.
ㄴ 로그형 빅오: O(logn), 일반적, 쓸만함
ㄴ 선형 빅오: O(n), 좋지않음
ㄴ 선형로그형 빅오: O(nlogn), 좋지않음
ㄴ 지수형 빅오: O(n^m), 사용x
∴ 알고리즘을 만들시 지수형->로그형으로 만드려고 노력해야한다.
보고 타자만치는데도 한참걸리네...
'Study > 알고리즘_자료구조' 카테고리의 다른 글
알고리즘 자료구조 - 2 (0) | 2021.07.23 |
---|---|
알고리즘 자료구조 - 1 (0) | 2021.07.13 |
시작 (0) | 2021.07.13 |
자료구조 및 알고리즘 요약정리 - 3 (0) | 2017.12.08 |
자료구조 및 알고리즘 요약정리 - 2 (0) | 2017.12.06 |