ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터 공학에서의 수학의 필요성 또는 유용성
    과제. 2021. 5. 18. 23:23

    컴퓨터 공학에 수학은 필수적으로 따라오는 과목이다.

    따라서 대부분의 대학교의 컴퓨터 공학과에서는 커리큘럼에 확률과 통계학, 이산수학, 선형대수학등의 과목을 포함한다.

    프로그래밍, 빅 데이터, 인공지능, 컴퓨터 보안 등, 컴퓨터 공학의 거의 모든 분야에 수학이 사용된다.

    오히려 사용하지 않는 곳을 찾기 더 힘들다고 할 수 있다.

     

    컴퓨터 공학에서 수학이 활용된다고 하는 이유에는 '알고리즘이 수학적 내용을 담고있다.', '프로그래밍에 수학이 사용된다.', '데이터를 다루기 위해 통계나 확률 등이 사용된다.' 등 여러 이유가 있다.

    위의 내용도 컴퓨터 공학에서 수학이 필요한 이유 중 하나이다. 하지만 근본적으로 컴퓨터 공학에서 수학을 필요로 하는 이유는 컴퓨터는 기계이기 때문이다. 사람이 아니다. 아래 예시를 들어 보겠다.

    날씨가 덥다면, 선풍기를 틀어라

    위의 문장을 사람은 쉽게 이해하고 행동할 수 있다. 하지만 컴퓨터는 어떨까? 이해하지 못한다. 날씨가 덥다는 것이 온도가 높다는 것인지, 높다면 몇도 인지 명시해줘야한다.

     

    if( 방의 온도 > 28){
        선풍기.전원키기( )
    }

    다음과 같이 컴퓨터는 숫자를 이용해 명확한 규칙을 작성해주어야한다.

    이처럼 사람이 보거나 듣는 것, 느끼는 것 등 여러가지를 컴퓨터가 쉽게 이해하기 위해, 숫자를 사용한다.

    수학은 세상을 숫자로 표현하는 학문이고, 숫자는 컴퓨터에게 명확한 판단의 근거를 제시한다.

     

    컴퓨터 공학에 수학이 필요한 원초적 이유 이외에도, 컴퓨터 공학에 실제로 수학이 어떻게 활용되고 있는지 알아보자.

     

    1. 데이터 분석에 사용되는 행렬

    데이터를 분석을 하는 방법 중 하나로, 수학의 행렬을 활용해 분석하는 방법이 존재한다.

    아래는 프로그래밍 언어 중 하나인 Python을 활용해 데이터 분석한 것이다.

    산점도 행렬

    산점도행렬(scatter matrix)는 데이터의 특성간의 관계를 쉽게 알아보기 위해 사용된다.

     

    2. 머신러닝 회귀분석에서의 평균제곱오차

    평균제곱오차(MSE) : 통계학에서 사용되며, 오차의 제곱에 대해 평균을 취한 값이며, 통계적 추정의 정확성에 대한 척도로 많이 사용된다.

    머신러닝은 Machine Learning, 즉 기계(컴퓨터)를 학습시킨다고 볼 수 있다.

    머신러닝에서는 컴퓨터를 학습시킨 후, 특정 입력 값을 넣어주면 결과(예측) 값이 출력된다.

    이때, 출력된 값이 얼마나 정확한지를 평균제곱오차를 통해 해당 모델을 평가하고 개선해나간다.

     

    MSE

     

    3. 컴퓨터보안에 활용되는 소수와 소인수분해

    컴퓨터 보안 중 암호학은 수학으로만 이루어졌다고 해도 과언이 아닌다.

    아래 암호의 두가지 종류 RSA와 ECC에 대해 알아보자

    아래 내용의 경우 생활 속의 수학4강에서도 배웠다. 두 소수를 곱하는 것은 쉽지만, 곱한 수를 소인수분해 하는 것은 어렵다.

    암호화는 쉽지만 복호화는 어려운 RSA는 현재 인터넷 암호화 및 인증 시스템등에 사용되고 있다.

     

    타원곡선암호, ECC는 큰 수를 거둡제곱 꼴로 나타내는 것이 어렵다는 것을 이용하였다.

    암호키의 길이가 길어지면 보안성은 좋아지지만, 속도가 저하된다. 하지만, ECC의 경우 짧은 키로도 높은 보안성을 가진다. 

     

    4. 알고리즘의 시간 복잡도 계산

    알고리즘의 소요 시간을 정확히 알 수는 없다. 따라서 자료의 수가 n일 때, 얼마나 걸리는지를 시간복잡도에 의해 나타낸다.

    컴퓨터 과학에서는 알고리즘의 시간 복잡도 계산을 통해 알고리즘의 대략적인 성능을 평가한다.

     

    5. 에라토스테네스의 체 알고리즘

    고대 그리스 수학자 에라토스테네스가 발견한 알고리즘으로 소수를 찾는 알고리즘이다.

     

    100이하의 소수를 에라토스테네스의 체 알고리즘을 통해 찾아보겠다.

    1. 일단 1부터 100까지 숫자를 나열한다.
    2. 소수도, 합성수도 아닌 유일한 자연수 1을 제거한다.
    3. 2를 제외한 2의 배수를 제거한다.
    4. 3을 제외한 3의 배수를 제거한다.
    5. 2, 3 다음으로 남아있는 가장 작은 소수, 즉 5를 제외한 5의 배수를 제거한다.
    6. 위와 같이 7의 배수 또한 제거한다.
    7. 11도 소수지만 11의 제곱은 121로 100을 초과하기 때문에 지울 필요 없다.

    이므로 11보다 작은 수의 배수들만 지워도 충분하다. 즉, 120보다 작거나 같은 수 가운데 2, 3, 5, 7의 배수를 지우고 남는 수는 모두 소수이다.

    #include <stdio.h>
    
    //범위의 소수 판별 
    void find_primeNumber(int target) {
    
        bool arr[target+1]; // 숫자를 지울 배열
    	
        arr[0] = true;
        arr[1] = true;
    
        // 2부터 특정 수의 배수에 해당하는 수를 모두 지움
        for(int i=2;i<=target;i++) {
            if(arr[i]) continue; // 이미 지워진 수라면 건너뜀
    
            // 이미 지워진 숫자가 아니라면, 해당 숫자의 배수를 모두 true로 만듦
            for(int j=2*i;j<=target; j+=i) {
                arr[j] = true;
            }
        }
    
        // 남아있는 수를 모두 출력 (배열에서 false인 index) 
        for(int i=2;i<=target;i++) {
            if(!arr[i]) printf("%d ", i);
        }
    }
    
    int main(void) {
        find_primeNumber(120); //120까지 
        return 0;
    }

    '과제.' 카테고리의 다른 글

    포켓몬backup  (0) 2021.07.17
    python_sum(file)  (0) 2021.05.20
Designed by Tistory.