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