2007 icpc3
TRANSCRIPT
ACM-ICPC 세미나
2007. 07. 10( 화 ) 14:00
발표자컴퓨터과학과 05 학번 김승덕
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
Big Integer
필요성
• 일반 변수의 표현 범위는 제한적
• 천문학적인 수를 정확하게 표현하기 위해서는 가변적인 표현 범위를 가지는 자료구조가 필요
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
Big Integer
구현 방법
• 가장 쉽고 직관적인 방법
문자열로 표현
사람이 계산하는 것과 똑같이 계산
• K 진수 사용
하나의 배열 원소가 0 ~ K-1 까지의 값을 가짐
An 의 1 은 An-1 의 K
• 각 단위 계산에서 표현 범위를 벗어나지 않도록 주의
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
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 일 목요일
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 일 목요일
연습 문제
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 일 목요일
그래프
정의
• 정점의 집합과 각 정점을 이어주는 간선의 집합으로 이루어짐
• G = { V, E }
V = Vertex set 정점 집합
E = Edge set 간선 집합
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
서울
대전
광주
부산
제주
그래프
구현 방법
• 인접 리스트
간선 정보를 배열로 가짐
• 인접 행렬
aij 는 i 번째 정점과 j 번째 정점의 연결 정보를 가짐
사용하는 메모리의 크기가 정점의 개수의 제곱에 비례
• Linked List
각 정점을 포인터로 연결
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
그래프
최단 경로 알고리즘
• Dijkstra
두 정점간의 최단 경로를 구하는 알고리즘
O(n2)
• Floyd
각 정점간의 최단 경로를 모두 구하는 알고리즘
구현이 간단함
O(n3)
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
그래프
Dijkstra( 다잌스트라 ) 알고리즘
• 시작 정점을 부분 그래프에 포함시킴
• 부분 그래프에서 이동할 수 있는 정점 중 가장 가까운 정점을 선택
• 선택된 정점을 부분 그래프에 포함시킴
• 모든 정점이 다 포함될 때 까지 반복
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
그래프
Dijkstra( 다잌스트라 ) 알고리즘
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
그래프
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 일 목요일
트리
정의
• 사이클 ( 순환 ) 이 없는 그래프
• 노드 : 각 정점
• 루트 : 최상위 노드
• 리프 : 최하위 노드
• 높이 : 루트 노드에서 리프 노드까지 거리
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
트리
정의
• 사이클 ( 순환 ) 이 없는 그래프
• 노드 : 각 정점
• 루트 : 최상위 노드
• 리프 : 최하위 노드
• 높이 : 루트 노드에서 리프 노드까지 거리
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
트리
최소 신장 트리
• 어떤 그래프에서 정점의 개수 V 에 대하여 V-1 개의 간선을 선택해 만든 트리를 신장 트리라고 함
• 가능한 신장 트리 중에서 간선 가중치의 합이 최소가 되는 신장 트리를 최소 신장 트리라고 한다 .
• Kruskal
간선을 가중치 순으로 오름차순 정렬하여 사이클이 만들어지지 않도록 하는 간선을 순차적으로 선택
• Prim
• 부분 최소 신장 트리에서 가능한 가장 작은 가중치의 간선을 선택
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
트리
이진 트리
• 어떤 노드도 두 개 이하의 자식을 갖는 트리
• 배열을 이용하여 쉽게 구현 가능
n 이 현재 노드일 때 n/2 는 부모 n*2, n*2+1 은 두 자식
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일
1
2
3
4
5
트리
이진 트리
• 이분 검색 트리
트리를 생성할 때 왼쪽 자식이 오른쪽 자식보다 항상 크거나 작도록 함
빠른 검색이 가능 log2n
• 힙
부모가 항상 자식보다 크거나 작도록 만든 완전 이진 트리
배열을 사용하여 간단하게 구현 가능
Priority Queue 를 구현하는 데 많이 사용
연세대학교 정보특기자 YUTAR 2007 년 6 월 21 일 목요일