기말

알고리즘 복잡도

점근적 분석

점근적 표기법 임의의 표기법 X에 대해 f(n) = X(g(n)), c는 양의 상수

이름 표기법 lim f(n)/g(n) 점근적
빅오 O(g(n)) c or 무한대 상한
빅오메가 Ω(g(n)) 0 or c 하한
빅세타 Θ(g(n)) c 상하한
스몰오 o(g(n)) 0 상한
스몰오메가 ω(g(n)) 무한대 하한

시간복잡도 분석 종류

재귀

점화식

점화식의 점근적 분석 방법

반복 대치

추정후 증명

마스터 정리

마스터 정리 근사 버전

정렬

선택정렬

버블정렬

삽입정렬

병합정렬

퀵정렬

힙정렬

기수정렬

계수정렬

안정성 정렬

검색 트리

이진검색트리

treeSearch(t,x)

treeInsert(t,x)

treeDelete(t,x)

레드블랙트리

레드블랙특성

  1. 루트는 블랙
  2. 모든 리프(NIL)은 블랙(무시해도 됨)
  3. 노드가 레드이면 그 노드의 자식은 반드시 블랙
  4. 루트 노드에서 임의의 리프 노드까지 만나는 블랙의 수는 모두 같다

p가 레드일 경우 삽입(p2,y는 블랙)

B-트리

BTreeInsert(t,x)

  1. 삽입할 리프노드를 찾아 삽입
  2. 오버플로우가 발생하면 형제 노드에 키를 넘기거나, 노드를 둘로 분할

BTreeDelete(t,x,v)

  1. 삭제할 키가 리프가 아니면 리프까지 직후 키와 교환
  2. 리프에 있는 키를 제거
  3. 언더플로우가 발생하면 형제 노드에서 키를 받거나, 노드를 합병

다차원 검색

검색키가 두개이상의 필드로 구성(예를들어 좌표)

KD-트리

KDB-트리

R-트리

그리드 파일

해시 테이블

해시 함수

원소의 값을 주소 변환하는데 사용하는 함수

나누기 방법

곱하기 방법

충돌 & 충돌 해결

두 개 이상의 원소가 해시 테이블에서 주소가 같을 때

체이닝

개방주소 방법

선형 조사

이차원 조사

더블 해싱

해시 테이블 검색 시간

체이닝

개방주소 방법

상호 배타적 집합의 처리

연결리스트와 트리를 이용해 상호배타적 집합을 구현하고 연산 속도를 비교해 보자

상호배타적 집합: 중복이 없다

구현할 연산

연결리스트로 구현

Union

트리로 구현

Make-Set(x) // 노드 x를 유일한 원소로 하는 집합을 만든다. ​
{ 
    p[x]  x ; 
} 

Union(x, y) // 노드 x가 속한 집합과 노드 y가 속한 집합을 합친다 ​
{ 
    p[Find-Set(y)]  Find-Set(x) ; 
} 

Find-Set(x) //노드 x가 속한 트리의 루트 노드를 리턴한다. ​ ​
{
    if (x  = p[x]) then return x ; 
    else return Find-Set(p[x]) ; 
} 

연산의 효율 높이기

Make-Set(x) // 노드 x를 유일한 원소로 하는 집합을 만든다. ​
{ 
    p[x]  x; 
    rank[x]  0; 
} 

Union(x, y) // 노드 x가 속한 집합과 노드 y가 속한 집합을 합한다 ​
{ 
    rx  Find-Set(x); //x의 루트
    ry  Find-Set(y); //y의 루트
    if (rank[rx] > rank[ry]) then p[ry]  rx ; 
    else { 
        p[rx]  ry ; 
        if (rank[rx] = rank[ry]) then rank[ry]  rank[ry] + 1; 
    } 
} 

Find-Set(x) //경로압축 - 부모를 루트로 하고 루트를 반환한다.
{ 
    if (p[x]  x) then p[x]  Find-Set(p[x]); 
    return p[x]; 
} 

동적 프로그래밍

적용 요건

행렬 경로 문제

돌 놓기

행렬

LSC

그래프

Graph G = (V,E)

그래프 종류

그래프 구현 방법

정점의 개수가 n일때

그래프 탐색

모든 정점 방문하는 방법

너비우선탐색(BFS)

깊이우선탐색(DFS)

최소신장트리(Minimum Spanning Trees)

프림 알고리즘

크루스칼 알고리즘

위상정렬

최단 경로

다익스트라

벨만포드 알고리즘

플로이드 워샬

강연결요소 구하기

  1. 그래프에서 DFS를 수행해 각 정점 v의 완료시간을 구함
  2. G의 모든 간선들의 방

그리디

문자열 매칭

P & NP 문제

시간복잡도로

상태공간 트리

문제 해결 과정 중 중간 상태를 하나의 노드로 표현

백트래킹

DFS와 비슷함

가능한 지점까지 가다가 막히면 이전으로 돌아감