728x90

레코드

- 개체에 대해 수집된 모든 정보를 포함하고 있는 저장 단위

 

ex 사람의 레코드

- 주민번호, 이름, 집주소, 집 전화번호 ,직장전화번호, 휴대전화번호, 연소득 등

 

ex 학생의 레코드

- 이름, 학번, 주소, 연락처 등의 정보 포함

 

 

필드

- 레코드에서 각가의 정보를 나타내는 부분

 

ex 학생의 레코드

- 필드 : 이름, 학번, 주소, 연락처

 

키, 검색키

- 다른 레코드와 중복되지 않도록 각 레코드를 대표할수 있는 필드

- 키는 하나의 필드나 두 개 이상의 필드로 이루어 질 수 있음

 

 

 

검색 트리

1. 자료를 저장하고 검색하는데 유용한 자료구조이며 알고리즘

2. 레코드를 트리 모양으로 만들어서 자료를 저장하고 찾음

3. 각 노드가 규칙에 맞도록 하나씩의 키를 가지고 있음

4. 1:n 관계의 비선형 자료구조

5. 계층 관계로 만들어진 계층형 자료구조

 

 

 

검색 트리의 요소

- 노드 node : 트리를 구성하는 원소

- 간선 edge : 노드를 연결하는 선

- 루트 노드 root : 트리 시작 노드

- 부모 노드 parent

- 자식 노드 child

- 형제 노드 sibling : 같은 부모 노드를 가진 자식 노드

- 차수 degree : 자식 노드 수

- 레벨 level : 특정 깊이에 해당하는 노드 집합

- 리프 노드, 단말 노드 : 차수가 0인 노드

 

 

검색 트리의 종류

1. 자식 노드의 개수에 따른 분류

- 이진 검색 트리 : 최대 두 개 이상의 자식 노드

- 다진 검색 트리 : 세 개 이상의 자식 노드로 분기

 

2. 저장되는 장소에 따른 분류

2.1. 내부 검색 트리

- 메인 메모리내에 존재

- 메인 메모리에 있는 모든 키를 수용할 수 있으며 내부 검색 트리 사용

2.2 외부 검색 트리

- 검색 트리가 외부(주로 하드디스크)에 존재

- 메인 메모리에 모든 키를 수용하지 못하면 외부검색트리를 사용

- 디스크 접근 시간이 검색의 효율을 좌우함

 

 

 

 

이진 검색 트리

- 최대 두 개의 자식 노드를 갖는 검색 트리

- 각 노드는 하나씩의 키를 가짐

- 각 노드의 키 값은 다름

- 최상위 레벨에 루트 노드가 있고, 각 노드는 최대 두개의 자식을 가짐

- 임의의 노드의 키 값은 자신의 왼쪽 자식 노드의 키 값보다 크고 오른쪽 자식의 키 값보다 작음

 

 

이진 검색 트리 검색 방법

1. 키 x를 가진 노드를 검색

2. 트리에 키 x를 가진 노드가 존재하면 해당 노드를 리턴함

3. 존재하지 않으면 NIL을 리턴

 

 

treeSearch(t, x) //t : 서브 트리의 루트 노드, x 검색하고자 하는 키
{
   if (t = NIL or key[t]=x) then return t;
   if (x < key[t])
       then return treeSearch(left[t], x);
       else return treeSearch(right[t], x);

}

 

 

 

 

300x250
728x90

리스트

- 동일한 값이 두 번 이상 나타날수 있는, 셀수 있는 정렬된 값을 나타내는 자료구조

 

리스트 종류

1. 선형 리스트

2. 단일 연결 리스트

3. 이중 연결 리스트

4. 원형 연결리스트

 

선형 리스트

- 리스트 중에서 순서를 가지는 리스트

- 순차 방식으로 구현하는 선형 순차 리스트

- 순차 자료구조는 원소를 논리적은 순서대로 메모리에 연속하여 저장

- 원소의 삽입, 삭제가 비효율적임

 

단일 연결 리스트

- 저장할 떄 그 다음 순서의 자료가 있는 위치를 데이터에 포함시키는 방식으로 자료를 저장하는 자료구조

- 각 노드는 다음 노드를 가리키는 포인터를 가짐

- 각 노드로 다음 노드를 가리키는 포인터로 연결하여 만든 리스트

- 하지만 포인터 데이터를 잃어버리면 이후 데이터들을 손실하게 됨

typedef struct tagNode
{
   int Data; //데이터 필드
   struct tagNode* NextNode; //다음 노드를 가리키는 포인터
} Node;

 

이중 연결 리스트

- 다음 노드의 참조 뿐만 아니라 이전 노드의 참조도 같이 가리키게한 연결 리스트

 

원형 연결 리스트

- 이중 연결 리스트에서 마지막 원소가 널 대신 처음 원소를 가리키게 한 연결 리스트

 

 

 

 

 

스택

- 먼저 들어간 요소가 가장 나중에 나오는(LIFO, Last in First Out) 자료구조

-  스택에서의 삽입(push), 스택에서의 삭제(pop)

- 스택의 응용 : 역순 문자열 만들기, 시스템 스택

 

 

역순 문자열 만들기

1. 문자열 ABCD를 스택에 삽입

2. pop을 하면 DCBA가 출력

 

시스템 스택

- 함수 호출과 복귀에 따른 전체 프로그램 수행 순서

- 함수를 수행 후 돌아올수 있는 지점을 저장하는 곳이 시스템 스택

 

 

시스템 스택 예시

1. main()함수 실행 시작

2. F_1() 함수 호출

3. 호출된 함수 F_1() 실행

4. F_2() 함수 호출

5. 호출된 함수 F_2() 함수 실행

6. F_2() 함수 실행 종료, F_1() 함수로 복귀

7. F_1() 함수로 복귀하여 F_1() 함수의 나머지 부분 실행

8. main()함수 실행 완료(전체 프로그램 실행 완료) -> 스택 프레임도 삭제

 

 

 

 

- 먼저집어넣은 데이터가 먼저 나오는 FIFO(First In, First Out)구조로 저장하는 자료구조

- 삽입 enQueue, 삭제 deQueue

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

선택 알고리즘

- n개의 원소가 불규칙하게 저장된 배열에서 i번째 작은 원소(큰 원소)를 찾는 문제를 해결하기 위한 알고리즘

- 정렬과 비슷

- 두 가지 알고리즘

 1. 평균적으로 선형 시간이 소요되는 알고리즘

 2. 최악의 경우에 선형 시간이 소요되는 알고리즘

 

 

 

 

 

평균 선형시간 선택 알고리즘

- 퀵 정렬처럼 분할한 후 자기 호출 방법을 이용하여 평균적으로 선형시간 i번째 작은 원소를 찾는 것

 

배열 A에서 i번째 요소 찾기

- 경우 1. 워소가 하나뿐인 경우 하나 리턴

- 경우 2. 원소가 다수인 경우, 파티션을 통해 중간값이 몇번째인지 확인

- 경우 3. 중간값이 i와 같은 경우, A[파티션을 통해 얻은 중간] 값을 리턴

- 경우 4. 중간 값이 i보다 클 경우, 오른쪽 그룹으로 범위를 좁혀 재귀적으로 실행

- 경우 5. 중간 값이 i보다 작을 겨웅, 왼족 그룹으로 범위를 좁혀 재귀적으로 실행

 

 

평균 선형시간 선택 알고리즘 작동 예

- 2번째 작은 원소 찾기

- 기준 원소를 r이라 지정하고 분할 수행

- 15와 31을 비교, 15와 8을 비교 ... 15를 기준으로 큰 수는 15 뒤 작은 수는 15 앞

- r을 3으로 지정하여 다시 분할 수행

 

 

유사 코드

select(A, p, r, i) //배열 A[p ... r]에서 i번째 작은 워소를 찾는다
{
   if (p = r) then return A[p];            //원소가 하나 뿐인 경우 i는 반드시 1
   q <- partition(A, p, r);
   k <- q - p + 1;                 //k : 기준 원소가 전체에서 k번째 작은 원소임을 의미
   if (i < k) then return select(A, p, q-1, i); // 왼쪽 그룹으로 범위를 좁힘
   else if (i = k) then return A[q];           // 기준 원소가 바로 찾는 원소임
   else return select(A, q+1, r, i-k);         // 오른쪽 그룹으로 범위를 좁힘
}

 

 

 

최악의 경우 선형시간 선택 알고리즘

- 평균 선형 시간 선택 알고리즘의 단점

-> 분할 균형이 맞지 않고, 찾고자 하는 원소가 운나쁘게 큰 그룹에 속하는 일이 반복하는 경우 성능이 보장되지 않음

- 분할 균형이 나빠보여도 일정한 상수비를 유지하면 점근적 복잡도는 항상 Theta(n)이 됨

- 균형을 맞추기 위한 오버헤드가 너무 커져버리면 최악의 경우 선형시간 선택 알고리즘이 될 수 없음.

 

 

linearSelect(A, p, r, i) //배열 A[p ... r]에서 i번째 작은 원소를 찾는다
{
  1. 원소 총 수가 5개 이하면 원하는 원소를 찾고 알고리즘을 끝냄
  2. 전체 원소들을 5개씩 원소를 가진 [n/5]개의 그룹으로 나눔
   - 원소의 총 수가 5의 배수가 아니면 이 중 한 그룹은 5개 미만이 됨.
  3. 각 그룹에서 중앙값(원소가 5개이면 3번째 원소)을 찾임
   - 이렇게 찾은 중앙값들을 m1, m2, .., m_{n/5}라 함
  4. m1, m2 ..., m_{n/5}들의 중앙값 M을 재귀적으로 구함
   - 홀수면 중앙값이 하나이므로 문제없고, 원소의 총 수가 짝수인 경우 두 중앙값중 아무거나 임의로 선택
      -> call linearSelect()
  5. M을 기준 원소로 삼아 전체 원소를 분할함
   - M보다 작거나 같은것은 M의 왼쪽에 M보다 큰 것은 M의 오른쪽에 오도록 함
  6. 분할 된 두 그룹 중 적합한 쪽을 선택하여 단계 1 ~ 6을 재귀적으로 반복함 -> call linserSelect()
   

}

 

최악의 경우 선형시간 선택 알고리즘 동작

 

1. 원소들이 한쪽으로 몰리는 경우

- 원/사각형 그룹 -> 3n/10 - 3개의 원소

- M까지 포함하는 경우 -> 3n/10 - 2개

- 이를 제외한 원소들 -> n - (3n/10-2) = 7n/10 + 2

- 최악의 경우 -> 7n/10 + 3 : 3n/10-3

 => 대략 7:3

 

300x250
728x90

정렬 알고리즘

1. 정렬이란?

2. 정렬의 에

3. 정렬 방식 구분

 

정렬

- 알고리즘에서 설계와 분석, 생각하는 방법 등을 훈련하기 위한 적합한 주제

- 알고리즘 분야에서 사용하는 여러 기술부분들이 상당 부분 정렬에 포함되 있어, 정렬을 잘 이해하면 알고리즘 과정에서 다른 주제를 이해하는데 큰 도움 될 것!

 

정렬의 정의

- 순서 없이 배열된 자료를 오름차순이나 내림차순으로 나열한 것

- 컴퓨터 공학을 포함한 모든 과학기술분야에서 가장 기본적이고 중요한 알고리즘 중 하나

- 자료 탐색에 있어서 필수 적임 : 만약 영어 사전에서 단어들이 알파벳 순으로 정렬되어 있지 않다면?

 

 

정렬의 대상

- 일반적으로 정렬시켜야 할 대상 = 레코드

- 레코드는 보다 작은 단위인 필드로 구성

- 키 필드로 레코드 식별

 

 

 

 

정렬 방식 구분

- 정렬은 실행 방법과 정렬 장소를 기준으로 아래 표와 같이 구분할 수 있음

기준 정렬 방식 설명
실행
방법
비교식 정렬 비교할 키 값을 한 번에 두 개씩 비교하고, 교환하여 정렬하는 방식
분배식 정렬 키값을 기준으로 하여 자료를 여러 개의 부분 집합으로 분해하고, 각 부분 집합을 정렬함으로써 전체를 정렬하는 방식(divide and conquer)
정렬
장소
내부 정렬 컴퓨터의 주기억 장치에서 정렬
 - 입력의 크기가 주기억장치의 공간보다 크지 않은 경우 수행
외부 정렬 주기억 장치 뿐만아니라 보조기억장치도 이용하여 정렬
- 입력의 크기가 주기억장치의 공간보다 큰 경우에 수행
- 보조 기억 장치에서 입력을 여러번 나누어 주기억장치로 읽어 들인 후 정렬하여 보조기억장치에서 다시 저장
안정성 안정 정렬 동일한 값에 대해 기존의 순서가 유지되는 정렬 방식
불안정 정렬 ㄷㅇ

 

 

 

 

 

 

 

 

 

 

300x250
728x90

등(차)비 수열

- 각 항마다 일정한 값을 더하거나 곱하는 수열

 

등(차) 비 수열 문제

- 수열 : 2, 6, 18, 54, 162, 486, ...

- 문제 : 위 등비 수열에 대해 100번째 항까지 합을 구하는 알고리즘을 제시하라

 

피보나치 수열

- 피보나치 수는 1과 1로 시작하며 다음 피보나치 수는 바로 앞 두 피보나치 수의 합이 되는 수열임

 

피보나치 수열 문제

- 수열 : 1, 1, 2, 3, 5, 8, 13

- 문제 : 위 피보나치 수열에 대해 100번째 항까지 합 구하는 알고리즘 제시하라

피보나치 수열 생성 과정

 

 

팩토리얼 수열

- N!은 자연수 N에 대한 누승(Factorial)으로서 1부터 N까지의 곱을 말하며 팩토리얼이라 함

 

팩토리얼 수열 문제

- 수열 : 1부터 100까지 누승의 합 -> S = 1! + 2! + 3! + 4! + ... + 100!

- 문제 : 위 팩토리얼 수열의 합을 구하여 출력하는 알고리즘을 제시하라

 

 

 

 

 

300x250
728x90

재귀 알고리즘과 점화식

1. 점화식의 이해

2. 병합 정렬의 점화식을 이용한 수행시간 분석

 

 

재귀 알고리즘

- 자기 호출을 사용하는 알고리즘

- 명시적으로 자기 호출을 사용하지 않더라도 그 속에서 자신과 똑같지만 크기가 다른 문제를 발견할 수 있는 경우 재귀적 성질을 포함하는 알고리즘의 복잡도는 점화식을 이용하여 접근이 가능함

 

점화식

- 어떤 함수를 자신보다 더 작은 변수에 대한 함수와의 관계로 표현하는 방법

- ex.1 등차수열의 점화식 : a_n = a_(n-1) + 2

- ex.2 팩토리얼의 점화식 : n! = n * f(n - 1)

 

 

병합정렬의 점화식을 이용한 수행시간 분석

mergeSort(A[], p, r) // A[p .. r]을 정렬한다.
{
    if (p < r) then{
        q <- (p+r)/2;                     p, r의 중간지점 계산
        mergeSort(A, p, q);                      전반부 정렬
        mergeSort(A, q + q, r);                  후반부 정렬
        merge(A, p, q, r);                            병합
    }
}

merge(A[], p, q, r)
{
   정렬되어 있는 두 배열 A[p ... q]와 A[q+1 ... r]을 합하여
   정렬된 하나의 배열 A[p ... r]을 만든다.
}

 

수행시간의 점화식

- T(n) = 2T(n/2) + 오버헤드

- 크기가 n인 병합정렬 시간

-> 크기가 n/2인 병합 정렬을 2번하고, 나머지 오버헤드를 더한 시간

 

 

점화식의 점근적 분석 방법

1. 점화식의 점근적 분석 방법의 종류

2. 반복 대치

3. 추정 후 증명

4. 마스터 정리

 

 

 

 

점화식의 점근적 분석 방법의 종류

- 점화식으로 표현된 식의 점근적 복잡도를 구하는 방법

- 반복 대치, 추정 후 증명, 마스터 정리

 

 

반복 대치

- 더 작은 문제에 대한 함수로 반복해서 대치해 나가는 방법

T(n) = T(n-1) + n

T(1) = 1
T(n) = T(n-1) + n
     = (T(n-2) + T(n-1)) + n
     ....
     = T(1) + 2 + 3 + ... + n
     = 1 + 2 + ... + n
     = n(n+1)/2
     = 세타(n^2)

 

 

예제 1 - n!를 구하는 문제

factorial(n)
{
     if (n = 1) return 1;
     return n * factorial(n - 1);
}

- T(n) = T(n - 1) + c

- 상수 시간 c : if문을 수행하는 시간과 곱셈을 한번 수행하는 시간

- 크기가 1(즉 , n = 1)인 경우 T(1) <= c이므로 T(n)을 다음과 같이 전개

T(n) = T(n-1) + c = T(n-2) + c + c = T(n - 2) + 2c = T(n - 3) + 3c

      = T(1) + (n - 1) c <= c + (n - 1) c = cn

 

 

추정 후 증명

- 식의 모양을 보고 점근적 복잡도를 추정한 다음 그것이 옳음을 귀납적으로 증명하는 방법

- T(n) <= 2T(n/2) + n의 점근적 복잡도는 T(n) = O(nlogn)임

 -> 즉, 충분히 큰 n에 대해서 T(n) <= cn log n인 양의 상수 c가 존재함

 

마스터 정리

- 특정한 모양을 가진 재귀식에 대해 바로 결과를 알수있는 정리

- T(n) = a T(n/b) + f(n)

  -> 입력 크기 n인 문제를 풀기 위해 입력 크기 n/b인 문제를 a번 풀고, 나머지 f(n)의 오버헤드가 필요한 알고리즘

- 병합 정렬 :  a = b = 2, f(n) = n인 경우

 

마스터 정리 가정

- a >= 1, b > 1에 대해 T(n) = a T(n/b) + f(n)인 점화식 -> n^(log_b a) = h(n)이라고 가정함

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

 

 

알고리즘 수행 시간 분석

1. 알고리즘 수행 시간

2. 알고리즘 수행 시간 분석 방법

 

 

알고리즘의 수행 시간

1. 알고리즘의 효율성을 분석하는 방법은 다양하지만 많은 경우에 알고리즘의 수행 시간을 이용하여 효율성 분석

- 실제로 구현하는 것이 필요함

- 동일한 하드웨어를 사용해야 함

 

2. 입력 크기에 대해 시간이 어떤 비율로 소요되는지 중요함

- 숫자의 정렬, 탐색의 입력 크기 : 숫자의 개수

- 지하철 최단 거리 탐색의 입력 크기 : 관련 노선도의 지하철 역의 개수

 

 

알고리즘 수행 시간 분석 방법

1. 수행시간이 상수인 예제

2. 수행 시간이 입력 n에 비례하는 예제

3. 수행 시간이 입력 n^2에 비례하는 예제

4. 수행 시간이 입력 n^3에 비례하는 예제

 

 

 

1. 수행시간이 상수인 예제

example1 (A[], n)
{
   i <- floor(n/3);
   return A[i];
}

- 입력 크기인 n이 변하여도 n의 개수에 비례하여 시간은 변하지 않음

- 상수 시간 소요

 

 

2. 수행 시간이 입력 n에 비례하는 예제

example2 (A[], n)
{
    sum <- 0;
    for i <- 0 to n-1 do
        sum <- sum + A[i];
    return sum;
}

 

- 입력 크기인 n이 변하면 수행 시간은 n의 개수에 비례하여 증가함

- 입력 n에 비례하여 수행 시간 소요

 

2. 수행 시간이 입력 n에 비례하는 예제 - 2

factorial(n)
{
   if (n=1) return 1;
   return n * factorial(n-1);
}

- 펙토리얼 예제

- 재귀 알고리즘 예제

- 함수 팩토리얼이 몇 번 수행되는지가 수행 시간을 좌우함

- 총 호출 횟수 n

 

3. 수행시간이 입력 n^2에 비례하는 예제

example3 (A[], n)
{
   sum <- 0;
   for i <- 0 to n-1 do
      for j <- 0 to n-1 do
          sum <- sum + A[i] * A[j];
   return sum;
}

- 입력 크기 n이 변하면 수행 시간은 n^2에 비례하여 증가함.

 

 

4. 수행 시간이 입력 n^3에 비례하는 예제

example4 (A[], n)
{
   sum <- 0;
   for i <- 0 to n-1
      for j <- 0 to n-1
         tmp <- A[]에서 임의로 n/2개를 뽑았을 때 이중 최대값;
         sum <- sum + tmp;
    return sum
}

- A[]에서 임의로 n/2개를 뽑았을 때 이중 최대 값 -> n에 비례하여 증가함

- 입력 크기인 n이 변하면 수행 시간은 n^3에 비례하여 증가함 -> n^3에 비례하여 수행 시간 소요

 

 

 

재귀와 귀납적 사고

1. 재귀 함수

2. 수학적 귀납법

 

 

재귀 함수

1. 문제를 해결하는 과정에서 해결하는 문제와 크기만 다르고, 자신의 해결 방법을 동일하게 적용하여 해결할 수 있는지 파악하여 주어진 문제를 푸는 방법

-> recursion, 되부름, 자기 호출 등으로 불림

2. 많은 알고리즘에서 사용

- 대표적으로 병합 정렬, 퀵 정렬, 하노이의 탑 문제, 팩토리얼 등

- 예시

 -> factorial : N! = N x (N-1)!

 -> 수열의 점화식 : a_n = 2 * 2 a_(n-1)

 

 

수학적 귀납법

1. 어떤 성질이 모든 자연수에 대해 성립함을 증명하기 위해 사용되는 방법

- 첫 번째 자연수에 대해서 참임을 증명

- 어떤 자연수에 대해서 참이면, 다음 자연수도 참임을 증명

 

2. 재귀 호출의 정당성은 수학적 귀납법과 관련됨 즉, 자기보다 작은 문제에 대해서 이 알고리즘이 제대로 작동한다고 가정

-> 자신보다 작은 문제에 대해 결론이 참임을 가정

-> 작은 문제와 자신의 문제의 관계를 파악하고, 자신의 문제에서도 결론이 맞음을 보임

 

3. 알고리즘 설계 시 유의점

-> 무한 루프에 빠지지 않도록 주의해야함

-> 재귀적인 관계를 잘 파악해야함

 

 

점근적 표기법

1. 복잡도의 점근적 표기

2. O(빅오)표기법

3. $\Omega$(빅 오메가) 표기법

4. $\Theta$(세타)표기법

5. 효율적인 알고리즘이 필요한 이유

 

 

복잡도 점근적 표기

1. 입력의 크기가 작은 문제

- 알고리즘의 효율성이 중요하지 않음

- 비효율적인 알고리즘도 무방

2. 입력의 크기가 충분히 큰 문제

- 알고리즘의 효율성이 중요함

- 비효율적인 알고리즘은 치명적임

3. 입력의 크기가 충분히 큰 경우에 대한 분석을 점근적 분석이라고함.

 

점근적 표기

- 복잡도는 입력도 크기에 대한 함수로 표기하는데, 이 함수는 주로 여러 개의 항을가지는 다항식

- 다항식을 단순한 함수로 표현하기 위해 점근적 표기를 사용함

- 입력의 크기 n이 무한대로 커질 때의 복잡도를 간단히 표현하기 위해 사용하는 표기법

표기법 내용
빅오 표기법 최악의 경우 : 어떠한 경우에도 표기된 함수만큼의 성능은 보장(점근적 상한)
빅오메가 표기법 최선의 경우 : 운이 좋다면, 알고리즘은 표기된 함수만큼의 성능을 낼 수도 있음(점근적 하한)
세타 표기법 알고리즘이 거의 정확한 성능

 

 

알고리즘의 성능차

- 대규모의 데이터를 다룰때 확연하게 드러남

- ex. 연산 회수가 n^2+n인 알고리즘과 53n인 알고리즘 비교

- 데이터의 개수가 많을 수록 차수가 가장 큰 항이 가장 영향을 크게 미치고 다른항들은 상대적으로 무시함

 -> 이때문에 점근적 표기법에서는 최고차항만으로 알고리즘의 성능을 대략적으로 표기

 

 

 

O(빅-오) 표기법

- 점근적 상한선

- 최악의 경우 알고리즘 수행 시간을 나타냄

 -> 최악의 경우에도 성능을 보장하기 떄문에 가장 많이 사용하는 알고리즘 성능 표기법

-복잡도 f(n)과 O-표기를 그래프로 나타낸 것

- n이 증가함에 따라 O(g(n))이 점근적 상한이 됨.

- 빅오 표기법 종류 및 그래프

O 표기법 설명 해당 알고리즘
O(1) 최악의 경우에도 상수 시간 안에 종료됨 해시 테이블
O(log n) 최악의 경우에도 입력 개수 n이 배로 증가하더라도, 수행 시간의 증가가 일정한 속도 안에 종료됨
- ex : 입력데이터 10개를 처리하느데 1초걸린경우, 100개를 처리하는데 2초, 1000개를 처리하는데 3초걸리는 경우
이진 탐색
O(n) - 최악의 경우에 입력의 개수 n만큼 수행 시간 안에 종료됨
- 입력의 개수 n이 증가하는 속도만큼 수행 시간도 일정하게 증가함
순차 탐색
O(n log n) - log n이 상수 시간보다 증가율이 크기 때문에 n log n은 n과 n^2 사이에 존재함 병합 정렬
O(n^2) - 최악의 경우 입력 개수 n에 대한 제곱 만큼 수행 시간 안에 종료 됨 버블 정렬, 삽입 정렬
O(n^3) - 최악의 경우 입력 개수 n에 대한 3제곱 만큼 수행 시간안에 종료됨 행렬 곱셈
O(2^n) - 최악의 경우 입력 개수 n에 대해서 최대 2의 n제곱 만큼 수행 시간 안에 종료됨  

 

$\Omega$(빅 오메가) 표기법

- 점근적 하한선

- 최선의 경우 알고리즘 수행 시간을 나타냄 -> 거의 쓰이지 않음

- 복잡도 f(n)과 $\Omega$-표기 그래프

- n이 증가함에 따라 $\Omega$(g(n))이 점근적 하한이라는것

- 즉, g(n)이 $n_0$보다 큰 모든 n에 대해서 항상 f(n)보다 작다는 것을 보여줌



 

$\Theta$ 표기법

- 점근적 상한선과  점근적 하한선의 교집합

- 복잡도 f(n)과 $\Theta$-표기를 그래프로 나타낸 것

 

 

300x250
728x90

목표

 실세계에서 해결하고자 하는 모든 문제들에 대한 최적의 해결 방법을 전산학 적으로 고찰하기 위해 최적의 알고리즘을 학습하고, 각종 알고리즘에 대한 복잡도와 성능 및 특성을 고찰해 실세계에 적용할수 있는 능력을 배양한다.

 

 

 

알고리즘이란?

1. 알고리즘의 기원

2. 알고리즘의 정의

3. 알고리즘의 특징

4. 알고리즘의 분류

 

 

알고리즘 단어 유래

- 페르시아 수학자인 무함마드 이븐 무사 알콰라즈미 라틴 이름인 라고리즈미로부터 유래

- 무하마드 이븐 무사 알콰리즈미는 대수학의 아버지라 불리며, 수학 뿐만아니라 천문학, 지리학 등에도 많은 업적을 남김

 

유클리드 호제법

- 가장오래된 알고리즘

- 기원전 300년경 유클리드에 의해 증명됨

- 2개의 자연수 사이의 최대 공약수를 구하는 알고리즘

 

입력 : 자연수 m, n 단 m >= n > 0
출력 : m, n의 최대 공약수

Euclid(m, n)
if n = 0
    return m
return Euclid(n, m mod n)

 

 

알고리즘

- 어떠한 문제를 해결하기 위한 여러 동작들의 모임을 기술한 것

- 컴퓨터 공학에서 알고리즘은 명확한 입력과 출력을 가지고 있어야 함

 

 

프로그램 작성

- 프로그램 = 자료구조 + 알고리즘

- ex. 최대값 탐색 프로그램 = 배열 + 순차 탐색

 

 

알고리즘을 공부하는 이유

- 문제를 해결하기 위한 효율적인 과정을 습득하기 위함

- 기존의 알고리즘을 분석하여, 체계쩍으로 생각하는 훈련을 수행하기 위함

 

 

알고리즘의 예시

1. 학생 100명의 성적을 입력받아 가장 최저 점수를 출력하는 작업

- 입력 : 학생 100명의 성적

- 출력 : 입력된 100개의 성적 중 최소 값

 

2. 숫자 카드 74, 58, 45, 100, 32, 88 중 32 숫자카드를 찾는 작접

- 입력 : 숫자카드 74, 58, 45, 100, 32, 88

- 출력 : 32 숫자카드의 위치

 

 

 

알고리즘이 가져야 하는 요건

1. 입출력 : 입력과 출력을 가져야 함

2. 정확성 : 주어진 입력에 대해 항상 올바른 답을 주어야 함

3. 유한성 : 유한 시간 내에 종료 되어야 함

4. 효율성 : 시간적, 공간적 효율성을 가져야 함

5. 수행성 : 컴퓨터로 수행 가능해야함

 

 

알고리즘 분석 기준

1. 정확 성

- 모든 유효 입력에 대해 유한 시간 내 올바른 해를 찾아내는가 판단

2. 기억 장소 사용량

- 해를 찾아내는 데 사용되는 기억 장소의 사용량

- 입력 개수에 따른 증가율이 중요함

3. 수행 시간

- 해를 찾아내는데 걸리는 시간

- 절대 시간보다는 입력 개수에 따른 증가율이 중요함

 

 

알고리즘의 분류

분류 방식 분류
문제 해결 방법에 따른 분류 1. 분할 정복 알고리즘
2. 그리디 알고리즘
3. 동적 계획 알고리즘
4. 근사 알고리즘
5. 백트래킹 알고리즘
6. 분기 한정법
문제에 따른 분류 1. 정렬 알고리즘
2. 그래프 알고리즘
3. 기하 알고리즘

 

 

1. 분할 정복 알고리즘

- 주어진 문제의 입력을 분할하여 문제를 해결하는 알고리즘

- 분할된 입력에 똑같은 알고리즘을 적용(재귀를 이용하는 경우가 많음)

- ex. 병합 정렬, 퀵 정렬, 선택 정렬 등

 

2. 그리디 알고리즘

- 가능한 해들 중에서 가장 좋은 해를 찾는 알고리즘

- 수행 시점에서 가장 좋은 해를 찾아 나감

 -> 근시안적인 최적해를 찾는다고 할 수 있으며, 근시안적인 최적해를 모아서 문제의 최적해를찾음

- ex. 동전 거스름 문제, 최소 신장 트리 문제, 최단 경로 찾기 문제, 부분 배낭 문제

 

3. 동적 계획 알고리즘

- 최적회 문제 해결 알고리즘

- 입력 크기가 작은 부분 문제를 해결하고, 이를 이용해서 보다 큰문제를 해결하여, 최종적으로 주어진 입력크기의 문제를 해결하는 방법

- ex. 모든 쌍 최단 경로, 연속 행렬 곱셈, 배낭 문제, 동전 거스름돈 문제

 

4. 근사 알고리즘

- 지수 시간이 걸리는 문제(NP 문제)에 대한 근사해를 찾는 알고리즘

- ex. 여행자 문제, 정점 커버 문제, 통 채우기 문제, 클러스터링

 

5. 백트래킹 기법

- NP 완전 문제의 해를 탐색하기 위한 알고리즘

- ex. 여행자 문제, 체스 퀸 배치 문제

 

6. 분기 한정 기법

- 큰 입력에 대해 백트래킹 기법이 갖는 단점을 보완하기 위해 고안된 기법

- ex. 여행자 문제 등

 

 

알고리즘 분석

1. 알고리즘을 분석하는 이유

2. 알고리즘의 수행 시간

3. 알고리즘의 공간 사용량

 

알고리즘을 분석하는 이유

1. 정확성 확인(무결성 확인)

- 모든 유효한 입력에 대해 유한 시간 내에 올바른 해를 찾아내는가 판단하기 위함

2. 효율성 확인

- 한정된 자원(기억 장소 사용량, 수행 시간)에서 효율적으로 작동하는지 확인하기 위함

3. 궁극적으로 알고리즘을 분석하여 얻는 이점

- 알고리즘 분석 -> 체계적이고 효율적으로 생각하는 훈련을 할 수 있음

- 문제를 해결하기 위해 중요한 것과 중요하지 않은 것을 판단할 수 있음

- 문제를 단순화 하여 생각 할 수 있음

- 다른사람의 아이디어에 대한 효율성을 판단 할 수 있음

 

 

알고리즘 수행 시간

1. 알고리즘의 효율성을 분석하는 방법은 다양하지만 많은 경우 알고리즘의 수행시간을 이용하여 효율성 분석

2. 시간 복잡도

 - 입력 크기에 비례하여 작업시간이 어떠한 비율로 증가하는지 확인함.

3. 시간 복잡도를 사용하는 이유

- 실측으로 시간을 측정하는 경우 프로그래밍 언어, 컴퓨터 성능, 프로그래머의 실력 등의 다양한 변수에 따라 달라질 수 있음

 

 

수행 시간 분석 방법

- 최선 경우 분석

- 최악 경우 분석

- 평균 경우 분석

 

 

 

 

가짜 동전 찾기 알고리즘

- 문제 : 많은 수의 동전 중에서 1개의 동전이 가짜 동전인 경우 가짜 동전을 어떻게 찾을까?

- 가짜 동전의 크기와 모양은 진짜 동전과 동이랗며 무게만 약간 가벼움

- 무게의 차이를 감지 할 수 있는 양팔의 저울만 주어짐

 

알고리즘 1

- 해결 방법 : 한쪽에 1개의 동전을 올려놓고 나머지 동전을 하나씩 바꾸어 가면서 무게를 잼

- 수행시간 분석

 -> 최선 경우 분석 : 운이 좋은 경우 1번만에 찾을 수 있음

 -> 최악 경우 분석 : 운이 나쁜 경우 즉, n - 1번 수행해야함

 

알고리즘 2

- 해결방법 : 동전을 2개씩 선택하여 2개의 동전을 양팔 저울에 올려놓고 무게를 잰 후 가벼운 동전을 찾아냄

- 수행 시간 분석

 -> 최선 경우 분석 : 운이 좋은 경우 1번 만에 찾을 수 있음

 -> 최악 경우 분석 : 운이 나쁘면 모든 경우 즉, n/2번 수행해야함

 

알고리즘 3

- 해결 방법

 -> 동전을 똑같은 개수로 반으로 나누어 두 무리를 만들고 무개를 잰 후 가벼운 쪽을 찾고, 나머지를 다시 반으로 나누어 가벼운 쪽을 찾음

- 수행 시간 분석

 -> 일반적인 n에 대해서 log_2 n번 수행해야함.

 

알고리즘 분석 - 동전 개수가 1024개 인 경우

방법 분석 내용
알고리즘1 - 최악의 경우 : 1023번 수행
- 평균의 경우 512번 수행
- 최선의 경우 : 1번 수행 (큰 의미없음)
알고리즘2 - 최악의 경우 : 512번 수행
- 평균의 경우 : 256번 수행
- 최선의 경우 : 1번 수행
알고리즘3 - 최악의 경우 : 10번 수행
- 평균의 경우 : 10번 수행
- 최선의 경우  10번 수행

=> 알고리즘 3은 동전의 개수가 n인 경우 어떠한 경우에도 log_2 n번의 수행으로 동전을 찾을수 있기 때문에 가장 효율적

 

 

알고리즘의 공간 사용량

- 알고리즘의 공간 사용량도 알고리즘의 효율성을 분석하는 방법 중 하나

- 공간 복잡도 : 입력 크기에 비례하여 작업 공간이 어떠한 비율로 증가하는지 분석하는 것

- 공간 복잡도를 시간 복잡도와 함께 사용하는 이유

 -> 실측으로 공간 사용량을 측정하는 경우 프로그래밍 언어, 프로그래머 실력 등 다양한 변수에 따라 달라질 수 있음.

 

 

300x250
728x90

 

 

알고리즘

- 어떤 문제를 해결하기 위한 작업단계를 명확하게 기술한 것

 

 

알고리즘의 이해

1. 프로그램 개발 과정

2. 알고리즘 개념

3. 알고리즘 표현 방법

 

 

 

프로그램

- 어떤 문제를 해결하도록 컴퓨터에게 주어지는 명령어들의 집합

( 유한한 ) 입력 -> 자료(데이터) + 알고리즘 -> 입력에 대응되는 출력

- 알고리즘 : 특정한 작업을 수행하는 명령어들의 집합

- 자료구조 : 주어진 작업을 해결하기 위해 필요한 자료를 효과적으로 표현하고 효율적으로 처리, 저장하기 위한 구조를 설계하는 방법

 

 

 

 

프로그램 개발 과정 - 프로그램 생명 주기

1. 요구 사항 분석

2. 시스템 명세

3. 설계

4. 구현

5. 테스트

6. 유지 및 보수

 

 

 

1. 요구 사항 분석

- 개발할 프로그램의 기능과 제약조건, 목표 등을 프로그램의 사용자와 함께 명확히 정의하는 단계

- 개발할 프로그램의 성격을 정확히 이해하고 개발방법과 필요한 자원 예측

 

2. 시스템 명세

- 시스템이 무엇을 수행하는가를 정의

- 입력, 처리 절차, 출력을 정의함

 

3. 설계

- 시스템 명세 단계에서 정의한 기능을 실제로 수행하기 위한 방법을 결정

- [예시] 시스템을 구성하는 내부 프로그램간의 관계, 사용자 인터페이스 등

- 하향식 설계 방법 : 상위 단계에서 하위 단계로 설계하는 방법

- 상향식 설계 방법 : 하위 단계에서 작은 문제를 먼저 해결하고 이를 이용하여 상위 단계의 큰 문제를 해결하는 방법

- 객체지향 설계방법 : 문제 해결을 위해 객체를 만들고 이를 재사용하는 방법

 

4. 구현

- 설계 단계에서 결정한 문제 해결 방법을 프로그래밍 언어를 사용하여 실제 프로그램으로 구체화 하는 단계

 

5. 테스트

- 개발한 시스템이 고객 요구 사항을 만족하는지, 실행 결과가 맞는지 검사하고 평가함

- 단위 테스트 unit test : 시스템 최소 구성요소인 컴포넌트, 모듈에 대해서 개별적으로 시행

- 통합 테스트 : 단위 테스트를 통과한 모듈을 연결한 전체 시스템에 대해 통합적으로 시행

- 인수 테스트 : 완성된 시스템에 대해 실제 자료를 사용한 최종 테스트

 

6. 유지 및 보수

- 시스템이 설치 된 이후 행하는 모든 활동

- 사용 중에 발견한 프로그램의 오류 수정, 시스템과 관련된 환경 변화에 적응, 시스템의 성능 향상, 앞으로 발생할지 모를 변경 사항 수용 등

 

 

 

알고리즘이란?

- 특정 작업을 수행하는 명령어들의 집합

- 문제를 해결하기 위해 기술한 체계적 단계

 

 

알고리즘의 특성

- 입력 : 문제와 관련된 외부 데이터

- 출력 : 입력을 처리한 결과

- 정확성 : 수행할 작업의 내용과 순서가 명확해야함

- 유한성 : 알고리즘은 유한한 단계를 거친 후 종료되어야 함

- 효과성 : 알고리즘에서 사용하는 작업은 실행이 가능하여야 함

- 일반성 : 같은 유형의 문제에 대해 동일하게 적용 가능

 

 

알고리즘의 표현 방법

1. 자연어를 이용한 서술적 표현 방법

- 사람이 사용하는 언어를 이용하여 알고리즘 표현

- 사람에 따라 언어의 일관성과 명확성을 유지하기 힘듬

- ex. 라면 끓이기

 

2. 순서도를 이용한 방법

- 알고리즘을 도식화 하여 표현

- 순서도의 작성 규칙에 따라 도식화

- 명령의 흐름을 쉽게 파악  가능

- 복잡한 알고리즘을 표현하는데 한계가 있음

- 순서도에서 사용하는 기호들

- 1부터 5까지의 합을 구하는 알고리즘의 순서도 표현

 

3. 프로그래밍언어를 이용한 방법

- 프로그래밍 언어를 이용하여 알고리즘을 표현

- 특정 프로그래밍 언어를 모르는 사람은 이해가 힘들고, 프로그래밍 언어 마다 재작업필요

- ex. C언어, 파이썬, 자바

 

 

4. 의사 코드(Pseudo-code)를 이용한 방법

- 의사 코드 : 프로그래밍 언어는 아니지만 프로그래밍 언어의 형태를 가지는 코드

- 직접 실행이 불가능

- 프로그래밍 언어 사이의 변환이 용이

- ex. 1부터 5까지 합을 구하는 알고리즘의 의사 코드 표현

function sum1to5()
	sum = 0;
    n = 0;
    while (n <= 5)
    	n = n + 1;
        sum = sum + n;
    return sum;

 

의사코드 표현법

1. 지정문

- 변수에 값을 지정

- <- 오른쪽 끝에 있는 값을 왼쪽에 있는 변수에 저장

- 세미 콜론을 사용하여 지정문의 끝을 표시

2. 조건 문

- 조건에 따라 실행할 명령문 결정

- if문

if (조건식)
   명령문 1;
   명령문 2;

- if-else 문

if (조건식)
   명령문1;
   명령문2;
else
   명령문3;
   명령문4;

 

반복문

- 일정한 명령을 반복 수행

- for문

for (초기화; 조건식; 증감식)
    명령문1;
    명령문2;

- while 문

while (조건식)
   명령문1;
   명령문2;

 

함수

- 작은 작업 단위

function 함수이름 (매개변수)
   명령문1;
   명령문2;
   ...
   return 결과값

 

알고리즘의 복잡도와 빅오 표기법

1. 알고리즘의 복잡도

2. 빅오 표기법

 

 

 좋은 알고리즘이란?

- 수행시간이 짧음

- 사용된 메모리 공간이 적음

 

 

알고리즘 평가 기준

1. 공간 복잡도

- 알고리즘 수행에 필요한 메모리 공간

- 고정 공간의 크기 + 가변 공간의 크기

- 고정 공간 : 프로그램 저장 공간 등

- 가변 공간 : 실행 과정에서 자료와 변수를 저장하는 공간, 함수 실행에 관련된 정보를 저장하는 공간 등

 

2. .시간 복잡도

- 알고리즘 수행 시간

- 컴파일 시간 + 실행 시간

- 컴파일 시간 : 고정된 시간

- 실행 시간 : 컴퓨터 성능에 좌우 -> 명령문의 실행 빈도수를 계산

 

 

 

피보나치 수열 알고리즘의 공간 복잡도

피보나치 수열

- f(0) = 0

- f(1) = 1

- f(n) = f(n-1) + f(n-2) (n>=2)

- 피보나치 수열 알고리즘

 

-피보나치 수열의 공간

 

- 피보나치 수열의 실행 빈도

 

 

시간 복잡도 분석 방법

1. 실제 실험을 통한 수행 시간 측정

- 실험에 사용되는 장치에 의존 -> 사용하지 않음

2. 알고리즘에서 수행되는 문장들의 개수 계산

- 실험에서 사용되는 장치에 독립 -> 실제 사용됨

3. 시간 복잡도의 점근적 표기법

- 정확한 문장들의 개수 대신 수학적 기호를 사용하여 시간 복잡도를 표현

- 알고리즘의 입력 크기가 변화함에 따른 수행 시간을 수학적 기호를 사용하여 표현

- 동일 문제에 대한 알고리즘 사이의 수행 시간 비교에 적합

- ex. O-표기법, $\Omega$-표기법, $\Theta$-표기법

 

 

 

빅오 표기법(O-표기법)

- 알고리즘 복잡도 중에서 가장 많은 영향을 미치는 항을 위주로 복잡도를 표기

- f(n) = O(g(n)) : 충분히 큰 n에 대해 f(n) <= c g(n)을 만족시키는 상수 c가 존재

 

 

빅오 표기법의 성질

- O(1) ~ (O($n^3$) : 다항식 시간 복잡도

- O($2^n$) : 지수 시간 복잡도

 

 

여라가지 알고리즘

1. 수연산 관련 알고리즘

2. 행렬식 계산 알고리즘

3. 탐색과 정렬 알고리즘

 

 

 

수연산 관련 알고리즘

1. 유클리드 알고리즘

- 두 자연수의 최대공약수를 계산하는 알고리즘

- 두 자연수 a, b에 대해 a, b의 최대 공약수 GCD(a, b)로 표기

- 최대 공약수의 성질 : 두 자연수 a, b에 대하여 a = bq + r, 0 <= r < b를 만족시키면 GCD(a, b) = GCD(b,r) 성립

- 유클리드 알고리즘의 의사 코드

function Euclid(a, b)
  if (a < b)
    tmp = a;
    a = b;
    b = tmp;
  while (b != 0)
    r = a % b;
    a = b;
    b = r;
    
  return a;

 

2. 재귀 알고리즘

- 알고리즘이 자기 자신을 다시 호출하는 알고리즘

- 피보나치 수열 알고리즘

function fibonacci(n)
  if (n < 0)
     stop;
  if (n <= 1)
     return n;
  
  return fibonacci(n - 1) + fibonacci(n - 2);

 

 

 

행렬식 계산 알고리즘

- 아래의 n x n 행렬식 A에 대하여

- A = (a)에 대해 det(A) = |A| = a

- 행렬식 계산 알고리즘의 의사 코드

 

 

 

탐색과 정렬 알고리즘

탐색

- 어떤 집합에서 특정 원소를 찾는 작업

 

1. 순차 탐색 알고리즘

- 집합의 원소를 처음부터 하나씩 비교하여 탐색하는 알고리즘

 

2. 버블 정렬 알고리즘

- 인접합 2개의 원소를 비교해 기준에 따라 순서를 바꾸는 방식의 정려 알고리즘

300x250
728x90

 

 

확률 변수

- 통계 조사나 실험 데이터로 도출된 개별 자료를 실수와 대응 시키는 자료

 

확률 분포

- 확률 변수의 전체적인 분포를 나타내는 개념

 

정규 분포 곡선

- 종모양의 확률 밀도 함수

- 평균 근처에 가장 많은 자료 위치

- 양 극단에 위치하는 자료가 줄어듬

 

 

확률 변수

1. 확률 변수의 정의

2. 이산 확률 분포

3. 연속 확률 분포

 

 

확률 변수 Random Variable

- 어떤 시행에서 일어날 수 있는 모든 경우의 집합 S (표본 공간)의 각 원소를 실수 집합 R의 한 원소에 대응 시키는 함수

- X : S -> R

- 확률 변수는 보통 문자 X, Y, Z 등으로 표기

 

 

확률 변수 예시

- 한 개의 동전을 2번 던지는 시행에서 앞면이 나오는 횟수를 X라고 한다면

- S = {(앞, 앞), (앞, 뒤), (뒤, 앞), (뒤, 뒤)}

- X : S -> R

  (앞, 앞) -> 2

  (앞, 뒤) -> 1

  (뒤, 앞) -> 1

  (뒤, 뒤) -> 0

 

 

확률 변수

- 이산 확률 변수

- 연속 확률 변수

 

이산 확률 변수

- 치역이 이산 집합인 확률 변수

- ex.1 : 10갸의 동전을 동시에 던질때 앞면이 나온 동전의 개수를 나타내는 확률 변수

- ex.2 : 주사위를 던져서 1의 눈이 나올 때까지 던진 횟수를 나타내는 확률 변수

 

 

연속 확률 변수

- 치역이 연속 집합인 확률 변수

- ex.1 : 10cm 씩 커지는 동심워 10개로 구성된 양궁판에 양궁 선수가 활을 쐇을 때, 화살이 꽂힌 위치와 중심으로부터 거리를 나타내는 확률 변수

- ex 2 : 버스 정류장에서 배차 간격이 10분인 버스를 기다리는 시간을 나타내는 확률 변수

 

 

 

이산 확률 분포의 확률 질량 함수

- 이산 확률 변수 X에 대해 임의의 실수 x를 취할 확률을 대응 시키는 함수

- f(x) = Pr(X = x)로 표기

 

 

이산 확률 분포의 확률 질량 함수의 예시

- 한 개의 동전을 2번 던지는 시행에서 앞면이 나오는 횟수를 x라 한다면

- S = {(앞, 앞), (앞, 뒤), (뒤, 앞), (뒤, 뒤)}

- X : S -> R

 (앞, 앞) -> 2

 (앞, 뒤) -> 1

 (뒤, 앞) -> 1

 (뒤, 뒤) -> 0

 

 

이산 확률 분포 확률 질량 함수의 성질

- 이산 확률 변서 X의 확률 질량 함수 f(x)에 대해서

- 위의 한개의 동전을 2번 던지는 시행 예시를 참고하면 f(0) + f(1) + f(2) = 1

 

 

이산 확률 분포

- 이산 확률 변수 X가 가지는 값과 그 값에서의 확률 질량 함수의 값의 대응 환계 또는 그 대응관계를 나타내는 표

- ex. 한 개의 동전을 2번 던지는 시행에서 앞면이 나오는 횟수를 X라고 한다면

 

연속확률 분포의 확률 밀도 함수

- 연속 확률 변수 X에 대하여 다음을 만족시키는 함수 f를 X의 확률 밀도 함수라고함

- f(x) >= 0

 

연속 확률 분포

- 연속 확률 변수 X가 가지는 값과 그 값에서 확률 밀도함수의 값의 대응 관계

- ex. 정규 분포: 확률 변수 X의 확률 밀도 함수가 다음과 같은 확률 분포

 

 

이산 확률 변수와 이항 분포

1. 이산 확률 변수의 기댓값

2. 이산 확률 변수의 분산과 표준 편차

3. 이한 분포

 

이산 확률변수의 기댓값

- 이산 확률변수 x의 기댓값 E(X)는 E(X) = $\sum_x$ x f(x)로 정의됨

- ex. 한 개의 동전을 2번 던지는 시행에서 앞면이 나오는 횟수를 X라고 한다면

- X의 확률 분포

- E(X) = 0 x $\frac{1} {4}$ + 1 x $\frac{1} {2}$ + 2 x $\frac{1} {4}$=1

 

 

 

이산 확률 변수의 기댓값

- 기댓값 성질 : 이산 확률 변수 X와 실수 c에 대하여

- E(c) = c

- E(c X) = c E(X)

- E(X + c) = E(X) + c

 

 

이산 확률 변수의 분산

- 이산 확률변수 X와 그 기댓값 $\mu$ = E(X)에 대해 X의 분산 V(X)는 다음과 같이 정의

=> V(X) = $\sum_x$ (x - $\mu$ $)^2$ f(x)

- V(X) = E(( X - $\mu$ $)^2$)

 

 

이산 확률 변수의 표준 편차

- 이산 확률 변수 X에 대하여 X의 표준편차 $\sigma$(X)는 다음과 같이 정의함

=> $\sigma$(X) = $\sqrt{V(X)}$

- ex. 한 개의 동전을 2번 던지는 시행에서 앞면이 나오는 횟수를 X라 한다면

 

분산과 표준 편차의 성질

- 확률 변수 X와 실수 c에 대하여

 

 

이산 확률 변수 X의 확률 분포가 다음과 같을 때

- E(X) = 3

- E($X^2$) = 1 x 0.1 + 4 x 0.2 + 9 x 0.3 + 16 x 0.4 = 10

- V(X) = E($X^2$) - E(X$)^2$ = 1

- $\sigma$(X) = 1

 

 

 

베르누이 분포

- 시행 결과가 1(성공) 또는 0(실패) 두 가지 경우만 일어나고 성공 확률이 p인 분포를 베르누이 부포라 하고, B(1, p)로 표기

- 확률 분포 X가 베르누이 분포 B(1, p)를 따르면

 -> E(X) = 0 x (1 - p) + 1 x p = p

 -> E($X^2$) = $0^2$ x ( 1 - p ) + $1^2$ x p = p

 -> V(X) = E($X^2)$ - E(X$)^2$ = p - $p^2$ = p ( 1 - p )

 

 

베르누이 분포의 예시

- 주사위를 한번 던지는 시행에서 1의 눈이 나오면 1의 값을, 그 외 눈이 나오면 0의 값을 갖는 확률 변수 X에 대하여

- X는 베르누이 분포 B(1, $\frac{1} {6}$을 따름

- E(X) = p = $\frac{1} {6}$

- V(X) = p(1-p) = $\frac{5} {36}$

 

 

이항 분포

- 성공률이 p인 베르누이 시행을 n회 반복한 후 성공 횟수를 X라 할때, X의 확률 분포를 이항분포라 하며 B(n,p)라고 표

- 확률 변수 X가 이항 분포 B(n, p)를 따르면

-> f(x) = $\binom{n}{x}$ $p^x$(1 - p$)^{n - x}$, x = 0, 1, ..., n

-> E(X) = np

-> V(X) = np(1-p)

 

이항 분포의 예시

- 흰 공이 6개, 검은 공이 4개가 들어 있는 주머니에서 임의로 공을 한 개 꺼내어 색을 확인한 후, 다시 넣기를 100번 반복할 때, 흰 공이 나오는 횟수를 확률 변수 X라고 하면, 확률 분포 X가 이항 분포 B(n, p)를 따르면

- X는 이항 분포 B(100, 6/10)을 따름

- E(X) = np = 100 x $\frac{6} {10}$ = 60

- V(X) = np(1-p) = 100 x $\frac{6} {10}$ x $\frac{4} {10}$ = 24

 

 

 연속확률변수와 정규분포

1. 연속확률변수

2. 정규분포

3. 이항분포와 정규 분포의 관계

 

 

 

 확률 밀도 함수

- 연속 확률 변수 X에  대해 다음을 만족시키는 함수 f를 X의 확률밀도함수라고 함

- f(x) >= 0

 

 

- 연속 확률 변수 X와 그 확률 밀도 함수 f(x)에 대해 X의 기댓값 E(X)는 다음과 같이 정의됨

 

- 기댓값의 성질 : 연속 확률 변수 X와 실수 c에 대해

 -> E(c) = c

 -> E(cX) = cE(X)

 

- 연속 확률 변수 X와 그 기댓값 $\mu$ = E(X)에 대해 X의 분산 V(X)는 다음과 같이 정의됨

- V(X) = E((X - $\mu$$)^2$)

- $\sigma$(X) = $\sqrt{(X)}$를 X의 표준 편차라 함

 

분산과 표준 편차의 성질

- 연속확률변수 X와 실수 c에 대하여

 

 

정규 분포

- 확률변수 X의 확률밀도함수가 다음과 같이 주어졌을 때

- X는 정규분포를 따른다고 하며 N($\mu$, $\sigma^2$)로 표기

 

- 확률 변수 X가 정규 분포 N($\mu$, $\sigma^2$)

 -> E(X) = $\mu$

 -> V(X) = $\sigma^2$

 

 

표준 정규분포

- N(0, 1)을 표준 정규분포라 함

 

표준 정규분포의 확률밀도함수

 

 

표준 정규분포표

- Z가 표준정규분포를 따르면

- Pr(Z <= 2) = ?

- Pz(-1 <= Z <= 1.96) = ?

표준정규분포표

 

정규분포와 표준 정규분포

- 확률변수 X가 정규분포 N($\mu$, $\sigma^2$를 따르면 Z = $\frac{X - \mu} {\sigma}$는 표준 정규 분포를 따름

 

표준 정규 분포 예시

- X가 정규 분포 N(1, $2^2$)를 따를 떄 -> 표준 정규 분포로 변환 후 계산

Z = $\frac{X - 1} {2}$

2Z = X - 1

2Z + 1 = X

- Pr(X <= 5) = Pr(Z <= 2) = 0. 5 + 0.4972 = 0.9772

 

 

 

 

이항 분포와 정규 분포의 관계

- 확률 변수 X가 이항 분포 B(n,p)를 따르고 n이 충분히 크면 X는 근사적으로 N(np, np(1-p))를 따름

 

300x250

'수학 > 알고리즘' 카테고리의 다른 글

알고리즘 - 1 알고리즘의 정의와 필요성  (0) 2020.06.10
이산 수학 - 20 알고리즘  (0) 2020.06.09
이산 수학 - 18 확률  (0) 2020.06.09
이산 수학 - 17 순열과 조합  (0) 2020.06.09
이산 수학 - 16 트리 활용  (0) 2020.06.08

+ Recent posts