1 / 53

√ 원리를 알면 IT 가 맛있다

이산수학 논리 ∙ 명제에서 알고리즘까지. √ 원리를 알면 IT 가 맛있다. Chapter 10. 알 고 리 즘. 학습목표. 알고리즘의 개념을 익히고 의사코드로 표현 데이터 정렬 알고리즘의 이해 탐색 알고리즘의 다양한 방법 익히기 알고리즘 검증 방법과 적합한 알고리즘의 선택 알고리즘 복잡도를 이해하고 계산하기. Section 01. 기본 개념. 알고리즘 (Algorithm) 주어진 문제를 해결하기 위한 일련의 절차 알고리즘 개발 조건 입력 (input) 출력 (output)

ely
Download Presentation

√ 원리를 알면 IT 가 맛있다

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 이산수학 논리∙명제에서 알고리즘까지 √ 원리를 알면 IT가 맛있다

  2. Chapter 10. 알 고 리 즘

  3. 학습목표 • 알고리즘의 개념을 익히고 의사코드로 표현 • 데이터 정렬 알고리즘의 이해 • 탐색 알고리즘의 다양한 방법 익히기 • 알고리즘 검증 방법과 적합한 알고리즘의 선택 • 알고리즘 복잡도를 이해하고 계산하기

  4. Section 01. 기본 개념 • 알고리즘(Algorithm) • 주어진 문제를 해결하기 위한 일련의 절차 • 알고리즘 개발 조건 • 입력(input) • 출력(output) • 정확성(correctness) • 유한성(finiteness) • 일반성(generality)

  5. 기본 개념(계속) • [예제01] 다음 제시된 알고리즘이 다섯 가지 알고리즘 개발 조건을 만 족 하는지 검증하여라.

  6. 기본 개념(계속) 100cm 30cm 30cm 30cm 10cm 30cm • [정리01] 음이 아닌 정수 a 와 양의 정수 b 에 대하여 r = a mod b 면 다음이 성립한다. gcd(a, b)=gcd(b, r) gcd(100, 30) = gcd(30, 10)

  7. 기본 개념(계속) 나머지가 0이 되면 최대공약수임 두 수 중 큰 수를 a에 둔다. • 유클리드 알고리즘(Euclidean algorithm)

  8. 기본 개념(계속) • [예제05] 유클리드 알고리즘을 이용하여 gcd(331, 993)을 구하여라. [풀이] 알고리즘은 먼저 주어진 두 수의 크기를 묻는 if명령문으로 시작한다. 유클리드 알고리즘은 최대공약수를 구하는 두 수 중에 큰 수가 항상 앞에 오도록 조정한다. if조건문에서 a = 331 < 993 = b므로 조건이 참이 되어 명령문을 실행한다. tmp변수를 이용하여 a, b두 수를 서 로 교환한다.

  9. 기본 개념(계속) 결국 명령문을 수행한 뒤에는 gcd(b, a) = gcd(993, 331)문제를 풀이하는 것과 같아진다. 다음으로 반복문을 수행하기 위해 조건문을 검사하면 b=331≠0 이므로 조건이 참이 된다. 따라서 명령문을 수행하면 r = a mod b = 993 mod 331 = 0

  10. 기본 개념(계속) a = b = 331 b = r = 0 이다. 아직 반복문이 종료되지 않았으므로 다시 while 반복문의 조건을 검사한다. 그런데 b = 0 이 되어 조건이 거짓이므로 반복문의 명령을 수행하지 않는다. 그러므로 명령문이 실행된 후에 gcd(331, 993) = 331 이 된다.

  11. Section02. 정렬 알고리즘 • 정렬(sorting) • 데이터의 저장 위치에 따라 • 내부정렬(internal sort) 방식 • 주기억장치 내에서 이루어지는 정렬 방식 • 버블정렬 • 선택정렬 • 퀵정렬 • 외부정렬(external sort) 방식 • 외부정렬은 보조기억장치를 이용하는 방식

  12. 정렬 알고리즘 - 버블정렬 • 버블정렬(bubble sort) 방식 • 배열 A에서 인접한 두 데이터 A[i]와 A[i+1]을 비교하여 A[i+1]이 A[i] 보다 작다면 두 데이터를 서로 교환하여 주면서 큰 데이터가 배열의 끝에 오도록 정렬 • 데이터의 양이 늘어날수록 느리고 비효율적인 방식

  13. 정렬 알고리즘 – 버블정렬(계속) • 버블정렬 예제

  14. 정렬 알고리즘 – 버블정렬(계속) • 버블정렬 1단계

  15. 정렬 알고리즘 – 버블정렬(계속) • 버블정렬 2단계

  16. 정렬 알고리즘 – 버블정렬(계속) • 버블정렬 완성

  17. 정렬 알고리즘 – 버블정렬(계속) • 버블정렬 알고리즘

  18. 정렬 알고리즘 - 선택정렬 • 선택정렬(selection sort) 방식 • 데이터에서 제일 큰 값이나 제일 작은 값을 찾은 후에 그 값만을 단계적으로 교환하여 정렬을 이뤄나가는 방식 • 적은 양의 데이터를 정렬시키고자 할 때 데이터 이동을 최소화 하면서 가장 효과적으로 정렬시키는 방식 • 선택정렬 과정 • n개의 데이터 값들 중에서 가장 큰 값을 찾음 • 그 값이 A[j]에 있다면 A[j]와 A[n-1]번째 값을 서로 교환 • 가장 큰 값을 배열의 맨 마지막 A[n-1]에 정렬 • 맨 마지막 원소 A[n-1]를 제외한 나머지 값들로 같은 과정을 반복 실행

  19. 정렬 알고리즘 – 선택정렬(계속) • 선택정렬 예제 • 선택정렬 1단계 완성

  20. 정렬 알고리즘 – 선택정렬(계속) • 선택정렬 완성

  21. 정렬 알고리즘 – 선택정렬(계속) • 선택정렬 알고리즘 각 단계에서 제일 큰 값 찾기

  22. 정렬 알고리즘 – 삽입정렬 • 삽입정렬(insertion sort) 방식 • 새로운 데이터를 정렬된 데이터에 삽입해 나가는 과정을 반복하여 전체 데이터를 정렬하는 방식 • 삽입정렬 과정 • n개의 데이터 정렬 시 처음의 A[0]는 정렬된 데이터로 취급 • 다음 데이터 A[1]을 정렬된 데이터와 비교하여 적절한 위치에 삽입 • 다음 데이터 A[2]를 정렬된 데이터 A[0], A[1]과 비교하여 적절한 위치에 삽입 • 같은 방식으로 나머지 데이터들을 삽입하여 정렬을 완성

  23. 정렬 알고리즘 – 삽입정렬(계속) • 삽입정렬 예제 • A[2] 원소의 삽입정렬

  24. 정렬 알고리즘 – 삽입정렬(계속) • A[3] 원소의 삽입정렬

  25. 정렬 알고리즘 – 삽입정렬(계속) • 삽입정렬 완성

  26. 정렬 알고리즘 – 삽입정렬(계속) • 삽입정렬 알고리즘

  27. 정렬 알고리즘 - 퀵정렬 • 퀵정렬(quick sort) 방식 • 비교적 빠르고 효율적인 알고리즘으로 가장 많이 사용되는 정렬 알고리즘 • 퀵정렬 과정 • 특정한 데이터 피봇(pivot) 기준 • 전체 원소를 피봇 보다 작은 원소들과 피봇 보다 큰 원소들의 집합으로 분류 • 분류된 각각의 집합에서 다시 피봇을 설정 • 같은 과정을 반복하여 집합을 정렬

  28. 정렬 알고리즘 – 퀵정렬(계속) • 퀵정렬 예제 • 피봇과 키 설정

  29. 정렬 알고리즘 – 퀵정렬(계속) • 처음 키 값의 교환 • 처음 피봇 7에 대해 L과 R이 가리키는 값을 찾음 • L = A[1] = 8 • R = A[6] = 2 • L이 가리키는 값과 R이 가리키는 값을 서로 교환

  30. 정렬 알고리즘 – 퀵정렬(계속) • 퀵정렬 1단계 완성

  31. 정렬 알고리즘 – 퀵정렬(계속) • 퀵정렬 2단계 완성

  32. 정렬 알고리즘 – 퀵정렬(계속) • 퀵정렬 완성

  33. 정렬 알고리즘 - 합병정렬 • 합병정렬(merge sort) 방식 • 합병정렬 과정 • 정렬하고자 하는 데이터의 모임을 비슷한 크기의 두 부분으로 반복해서 나눔 • 나뉘어진 부분 데이터들을 합병정렬 알고리즘을 이용하여 정렬 • 정렬된 부분 데이터들을 다시 합병 • 하나의 정렬된 데이터 모임으로 완성

  34. 정렬 알고리즘 – 합병정렬(계속) • 합병정렬 예제 • 합병정렬의 분할과정 • 그림10-20삽입

  35. 정렬 알고리즘 – 합병정렬(계속) • 합병정렬 완성

  36. 정렬 알고리즘 – 합병정렬(계속) • 합병정렬 알고리즘

  37. Section03. 탐색 알고리즘 • 탐색(search) • 데이터가 가지고 있는 특정한 키(key)를 찾는 작업 • 데이터는 레코드(record) 형태로 구성 • 레코드 : 특정한 필드들의 모임 • 필드(field) : 데이터가 가지고 있는 특정한 값들을 의미 • 키(key) : 각 데이터를 구분해주는 고유한 필드

  38. 탐색 알고리즘 - 선형탐색 • 선형탐색(linear search) 방식 • 이해하기 쉽고 간단한 탐색 알고리즘 • 순차탐색(sequential search)이라고도 함 • 선형탐색은 주어진 데이터의 조작 없이 순서대로 데이터를 탐색하는 방법 • 데이터의 양이 많거나 빠르게 검색하고자 할 경우 부적절

  39. 탐색 알고리즘 – 선형탐색(계속) • 선형탐색 알고리즘

  40. 탐색 알고리즘 – 이진탐색 • 이진탐색(binary search) 방식 • 정렬되어 있는 데이터에서 원하는 값을 찾을 때 효과적인 탐색 방법 • 정렬된 데이터의 중간 값을 찾는 값과 비교하여 그 값이 작은 쪽에 속하는지 큰 쪽에 속하는지를 판단하면서 원하는 값을 찾는 탐색 방법

  41. 탐색 알고리즘 – 이진탐색(계속) • [예제15] 이진탐색 알고리즘을 이용하여 다음 데이터에서 주어진 key 값을 탐색하여라. [2 4 7 12 21 34 57 68], key = 7 [풀이] 이진탐색을 위해 주어진 데이터는 이미 정렬이 되어 있는 상 태다. 만일 정렬되지 않은 데이터라면 정렬 알고리즘을 이용 하여 데이터를 정렬시킨 뒤 탐색한다. 알고리즘 탐색을 위해 주어진 데이터를 배열에 입력하면 다음과 같다. 데이터를 탐색하여 찾고자 하는 key 값은 7이다. 전체 데이 터가 8 개므로 알고리즘 초기값에서 first = 0, last = 8 이 되

  42. 탐색 알고리즘 – 이진탐색(계속) 어 first <= last므로 while 반복문을 실행하면 가 되어 A[4]와 key = 7 값을 비교하게 된다. A[4]=21이 므로 key = 7 이 더 작다. 따라서 last = mid -1 = 4-1 = 3 이 된다. 아직 반복문이 종료되지 않았으므로 재실행하면 이 되며, A[1]=4가 되어 key = 7 이 더 크다. 따라서 first = mid + 1 = 2 가 된다. 다시 반복문을 실행하 면 가 되고 A[2] = 7 이므로 찾는 key값과 일치한다. 그러므로 원하는 key = 7 을 A[2]에서 탐색하고 알고리즘은 종료된다.

  43. 탐색 알고리즘 - 이진탐색트리 • 이진탐색트리(binary search tree) 방식 • 데이터의 탐색뿐만 아니라 삽입과 삭제도 편리하게 진행할 수 있는 방식 • 이진탐색트리는 정렬된 데이터뿐만 아니라 정렬되지 않은 데이터도 트리 형태로 구현하여 이진탐색으로 원하는 값을 탐색 • 탐색을 위해 데이터를 트리 형태로 구현

  44. 탐색 알고리즘 – 이진탐색트리(계속) • 이진탐색트리 예제 • 이진탐색트리 완성

  45. 탐색 알고리즘 – 이진탐색트리(계속) • 이진탐색트리에서의 탐색

  46. Section04. 알고리즘 복잡도 • 알고리즘 복잡도(complexities of algorithm) • 알고리즘이 수행되는 데 필요한 시간과 공간을 측정하는 작업 • 알고리즘이 실행되는 데 필요한 시간과 기억장소의 양을 측정하는 작업 • 알고리즘을 보고 분석하여 판단하는 계산 값 • Big-Oh표기법 • 알고리즘 복잡도를 대문자 O를 사용하여 표기

  47. 알고리즘 복잡도(계속) • [정의1] • Big-Oh 표기법 • f와 g를 음수 값을 갖지 않는 함수라 하자. 이 때 n≥n0인 모든 자연수 n에 대하여 f(n)≤c·g(n)가 되는 양의 상수 c와 n0가 존재하면 f(n) = O(g(n))이라고 한다.

  48. 알고리즘 복잡도(계속) • [예제16] 함수 일 때 임을 보여라. [풀이] 상수 c = 67 , n0 = 1이 존재하므로 이다.

  49. 알고리즘 복잡도(계속) • 다양한 복잡도 함수들

  50. 알고리즘 복잡도(계속) • [예제20] 임을 보여라. [풀이]

More Related