2007 icpc3

17
ACM-ICPC 세미나 2007. 07. 10( 화 ) 14:00 발표자 컴퓨터과학과 05 학번 김승덕 연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Upload: yonsei

Post on 20-Jul-2015

556 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 2007 Icpc3

ACM-ICPC 세미나

2007. 07. 10( 화 ) 14:00

발표자컴퓨터과학과 05 학번 김승덕

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 2: 2007 Icpc3

Big Integer

필요성

• 일반 변수의 표현 범위는 제한적

• 천문학적인 수를 정확하게 표현하기 위해서는 가변적인 표현 범위를 가지는 자료구조가 필요

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 3: 2007 Icpc3

Big Integer

구현 방법

• 가장 쉽고 직관적인 방법

문자열로 표현

사람이 계산하는 것과 똑같이 계산

• K 진수 사용

하나의 배열 원소가 0 ~ K-1 까지의 값을 가짐

An 의 1 은 An-1 의 K

• 각 단위 계산에서 표현 범위를 벗어나지 않도록 주의

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 4: 2007 Icpc3

Big Integer

더하기

algorithm bigint_plus

input array arr, integer num

output array arr

i ← 0

while num is not zero do

k ← arr[i] + num

arr[i] ← k % 1010

num ← k / 1010

i++

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 5: 2007 Icpc3

Big Integer

빼기

algorithm bigint_plus

input array arr, integer num

output array arr

i ← 0

while num is not zero do

arr[i] ← arr[i] - num

if arr[i] < 0 then

arr[i] ← arr[i] + 216

num ← 1

i++

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 6: 2007 Icpc3

연습 문제

UVA10106

• http://acm.uva.es/p/v101/10106.html• 두 수를 곱하는데 각각의 범위가 10250 까지 이므로 Big Integer 문제

UVA495

• http://acm.uva.es/p/v4/495.html• Fibonacci 수를 출력하는 문제

n 이 5000 까지 입력될 수 있으므로 Big Integer 로 처리하여야 함

UVA113

• http://acm.uva.es/p/v1/113.html• 이분 검색을 사용하여 k 를 찾아냄

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 7: 2007 Icpc3

그래프

정의

• 정점의 집합과 각 정점을 이어주는 간선의 집합으로 이루어짐

• G = { V, E }

V = Vertex set 정점 집합

E = Edge set 간선 집합

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

서울

대전

광주

부산

제주

Page 8: 2007 Icpc3

그래프

구현 방법

• 인접 리스트

간선 정보를 배열로 가짐

• 인접 행렬

aij 는 i 번째 정점과 j 번째 정점의 연결 정보를 가짐

사용하는 메모리의 크기가 정점의 개수의 제곱에 비례

• Linked List

각 정점을 포인터로 연결

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 9: 2007 Icpc3

그래프

최단 경로 알고리즘

• Dijkstra

두 정점간의 최단 경로를 구하는 알고리즘

O(n2)

• Floyd

각 정점간의 최단 경로를 모두 구하는 알고리즘

구현이 간단함

O(n3)

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 10: 2007 Icpc3

그래프

Dijkstra( 다잌스트라 ) 알고리즘

• 시작 정점을 부분 그래프에 포함시킴

• 부분 그래프에서 이동할 수 있는 정점 중 가장 가까운 정점을 선택

• 선택된 정점을 부분 그래프에 포함시킴

• 모든 정점이 다 포함될 때 까지 반복

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 11: 2007 Icpc3

그래프

Dijkstra( 다잌스트라 ) 알고리즘

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 12: 2007 Icpc3

그래프

Floyd 알고리즘

• aij = if 정점 i 에서 정점 j 가 연결되어 있으면

then 간선의 길이 else ∞

• aij = min( aij, aik + akj )

• 구현이 매우 간단함

for i do for j do for k do

if aij > aik + akj then aij = aik + akj

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 13: 2007 Icpc3

트리

정의

• 사이클 ( 순환 ) 이 없는 그래프

• 노드 : 각 정점

• 루트 : 최상위 노드

• 리프 : 최하위 노드

• 높이 : 루트 노드에서 리프 노드까지 거리

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 14: 2007 Icpc3

트리

정의

• 사이클 ( 순환 ) 이 없는 그래프

• 노드 : 각 정점

• 루트 : 최상위 노드

• 리프 : 최하위 노드

• 높이 : 루트 노드에서 리프 노드까지 거리

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 15: 2007 Icpc3

트리

최소 신장 트리

• 어떤 그래프에서 정점의 개수 V 에 대하여 V-1 개의 간선을 선택해 만든 트리를 신장 트리라고 함

• 가능한 신장 트리 중에서 간선 가중치의 합이 최소가 되는 신장 트리를 최소 신장 트리라고 한다 .

• Kruskal

간선을 가중치 순으로 오름차순 정렬하여 사이클이 만들어지지 않도록 하는 간선을 순차적으로 선택

• Prim

• 부분 최소 신장 트리에서 가능한 가장 작은 가중치의 간선을 선택

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

Page 16: 2007 Icpc3

트리

이진 트리

• 어떤 노드도 두 개 이하의 자식을 갖는 트리

• 배열을 이용하여 쉽게 구현 가능

n 이 현재 노드일 때 n/2 는 부모 n*2, n*2+1 은 두 자식

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일

1

2

3

4

5

Page 17: 2007 Icpc3

트리

이진 트리

• 이분 검색 트리

트리를 생성할 때 왼쪽 자식이 오른쪽 자식보다 항상 크거나 작도록 함

빠른 검색이 가능 log2n

• 힙

부모가 항상 자식보다 크거나 작도록 만든 완전 이진 트리

배열을 사용하여 간단하게 구현 가능

Priority Queue 를 구현하는 데 많이 사용

연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일