수학 1.8k 0

자유 [컴공을 수학적으로 다가가보자] 1.1) 이산수학의 대략적인 개요

무브그린
2019-07-18 18:13:11 705 21 5

[지난 이야기]

Prologue

0.1) 들어가기 앞서


-----------------------------------------------------------


이산수학부터 시작을 한다고 했는데, 어디서부터 시작을 해야할지 꽤 막막했습니다.

짧고 굵게 쓰고는 싶은데, 그러면 많은 내용을 담을 수 없고, 그렇다고 길게 쓰자니 귀차니즘 스텟이 쭉 올라가버리더라고요.

글 길이는 그냥 제가 최대한 이리저리 조절해보겠습니다.


-----------------------------------------------------------


0cd8b7f680ebec5f4cb4c3e8e63586f9.png

오랜만에 이산수학 PDF 파일 보는데, 정신이 꽤 아찔해집니다.

2016년이 2학년 때라서 4학년인 지금에 와서 기억을 살려내는데 꽤 애를 먹긴 했습니다.

이산수학을 가르치셨던 교수님이 족보를 뿌려주는 스타일이어서 족보를 모아뒀습니다. 원하는 후배는 1도 없었다는 것이 킬링포인트

어차피 숫자랑 기호 한두개만 바꿔도 못 맞춘다면서... 그리고 그건 참인 명제라는 것을 시험 보면서 깨달았죠.


-----------------------------------------------------------


먼저, 이산수학의 정의를 짚고 넘어가는게 맞는거 같습니다.

꺼라위키에 따르면, 이산수학은

684296aa7631182d2a7f83c9c380dac5.png

라고는 하는데, 솔직히 뭔 말인지 1도 모르는 수준의 글입니다.

제가 이산수학을 배우면서 이산수학이 어떤 걸 가르치는가에 대해서 생각해 봤을때,

이산수학은 우리가 머릿속에서 생각한 논리를 식으로 나타내는 수학이라고 생각합니다.

이산수학에서 배우는 것들은 논리, 증명, 집합, 관계, 그래프, 행렬 등 우리가 매양 보던 수식과는 전혀 다른 것들이 나오며, 이것들을 종합적으로 봤을 때 이것들은 거의 대부분이 우리가 머릿속에서 생각해낸 명제들을 식이나 그림으로 나타낸 것들입니다.

그래서 생전 처음 보는 단어들과 글자들이 우수수 튀어 나옵니다.

그래도 우리는 기존 교육과정에서 이런 것들에 대해서 알게 모르게 배워왔습니다. 이산수학인데 이름만 떼고 나온거죠.

다만 지금은 행렬이 교육과정에서 사라졌기 때문에 행렬은 시간이 될 때 보고 오는게 정신건강에 이롭습니다.

올해 있었던 이산수학에서, 18학번 학생들의 대부분이 틀렸던 문제가 행렬문제였습니다...


-----------------------------------------------------------


컴퓨터공학과에서 이산수학이 차지하는 비중은 매우 크다고 할 수 있습니다.

왜냐면 전반적으로 이산수학이 깔려있고, 그 위에서 노는 경우가 허다하기 때문이죠.

간단한 예시를 보여주자면,

    while (1){

        Strike = 0, Ball = 0;


        printf("※ %d 번째 시도입니다.\n", Count+1);

        printf("※ 첫번째 숫자를 입력하세요 : ");

        scanf("%d", &First);

        printf("※ 두번째 숫자를 입력하세요 : ");

        scanf("%d", &Second);

        printf("※ 세번째 숫자를 입력하세요 : ");

        scanf("%d", &Third);


        if (First == RandomBall[0])

            Strike++;

        if(Second == RandomBall[1])

            Strike++;

        if(Third == RandomBall[2])

            Strike++ ;


        if(First == RandomBall[1])

            Ball++;

        else if(First == RandomBall[2])

            Ball++;


        if(Second == RandomBall[0])

            Ball++;

        else if(Second == RandomBall[2])

            Ball++;


        if (Third == RandomBall[0])

            Ball++;

        else if(Third == RandomBall[1])

            Ball++;


        printf("※ Strike : %d\n", Strike);

        printf("※ Ball : %d\n\n", Ball);


        if (Strike != 3)

            Count++;


        if (Strike == 3)

            break;


        if (Count == 10){

            printf("※ 패배하셨습니다!\n");

            printf("※ 당신이 맞추려 했던 번호는 %d, %d, %d 였습니다.\n\n", RandomBall[0], RandomBall[1], RandomBall[2]);

            

            goto ReplayMenu;

        }

    }


이 코드는 제가 대학교 1학년 때 만든 숫자야구게임 중 일부를 갖고 온 겁니다.

노가다로 만들어서 그런지, 코드가 매우 허접하게 느껴질 수 있습니다. (마지막엔 goto문까지 있습니다. 풋풋했던 시절...)

대신 그 때 만든 코드여서 코딩 좀 해보셨다면 이해하기는 꽤 쉬운 예제입니다.

세 개의 숫자를 랜덤으로 지정하고, 그 숫자를 맞추는 게임인데, 무수한 if절과 else절이 짜여져있습니다.

이 절들이 바로 명제이며, 이 명제가 참이면 절 안의 코드를 돌려라! 가 기본적인 작동 방식입니다.

while절도 어찌보면 명제입니다. 안의 수식이 참일 동안에 계속 돌려라! 가 되니까요.

아주 단적으로만 봤을 뿐인데도, 이산수학은 매우 중요한 위치에 있다는 걸 알 수 있습니다.

또한 저 코드가 잘 보시면 초기 형태의 인공지능과 매우 비슷합니다.

각 대응되는 현상에 맞게 대처를 한, 초창기의 인공지능입니다. 다만 문제점이 많아서 바로 사장되었죠.

인공지능은 나중에 시간이 될 때 이야기를 더 해보겠습니다.


-----------------------------------------------------------


이것만이 다는 아닙니다!

f0ef30ac81aa2069d0c45d731d10b066.png

위의 그래프는 가장 유명한 데이터 구조 방식인 Binary Tree입니다.

이걸 이해하려면 그래프라는 개념이 필요하며, 이는 이산수학에 속합니다.

나중에 그래프 순회를 어떻게 할 것인지에 따라 데이터를 읽는 순서가 완전히 달라집니다. (전위, 중위, 후위)

이것의 기초 베이스는 당연히 그래프이며, 이는 정보처리기사 등 대부분의 시험에서 단골로 나오는 문제이기도 합니다.


-----------------------------------------------------------


가장 중요한 부분을 빼먹을뻔 했습니다.

a93a56686adfdc6a64a40b3e18c43318.png

이산수학 중에서는 알고리즘도 다루며, 위의 그래프는 알고리즘의 시간복잡도에 따른 빅 오(O)를 나타낸 것입니다.

알고리즘이 간단해질수록 시간복잡도는 줄어들게 되며, 그만큼 빨라지게 되며, 그만큼 시간을 아끼게 됩니다.

그래서 알고리즘을 파는 사람들이 엄청 많습니다. 알고리즘을 잘 짠다면 돈이랑 바로 직결되기 때문이죠.


-----------------------------------------------------------


이렇듯, 이산수학은 컴퓨터공학에서 어느 한 분야에 크리티컬하다기 보다는, 전체적으로 골고루 퍼져있는 기본 베이스라고 할 수 있습니다.

그래서 거의 모든 대학교에서는 이산수학(또는 이산구조)가 필수 과목으로 지정되어 있습니다.

기초도 없이 심화를 배우는건 말이 안 맞으니까요.

대신, 컴퓨터공학과에서는 컴퓨터공학과에서 중요하게 다루는 부분만을 다루는 편입니다.

실제로 제가 이산수학을 배우면서, 확률은 배우지 않았고(확률과통계라는 과목이 있어서), 더 깊은 논리 증명까지 가지도 않았습니다. 기껏해야 비둘기집 원리정도였던걸로 기억합니다.

시험용으로 낸 죽어라 증명 문제도 있었지


-----------------------------------------------------------


지금까지 대략적으로 왜 컴퓨터공학과에서 이산수학을 배우는지를 봤습니다.

아무래도 이산수학이란 과목 자체가 여러개로 퍼져있고, 또한 기초과목이다보니 챕터 구분이 참 어려웠는데요.

다음에 쓸 글은 스피디하게 짚고만 넘어갈 예정입니다. 필요한거만 딱딱 구분해서 말이죠.


건의사항이 있으면 댓글로 작성해주세요. 최대한 반영해보겠습니다.


감사합니다.

댓글 5개  
이전 댓글 더 보기
▼아랫글 수학문제 개노답 삼형제 parfaits
광고
수학질문자유입시상담지식이 늘었다.
0
수학질문
극한문제좀 봐주십쇼. [2]
고딩2
10-02
0
수학질문
집합론 증명문제 질문이요 [9]
뉴비!
09-27
1
수학질문
최대공약수 [2]
chjart1004
09-14
0
수학질문
도와주세용 [4]
슬기로운언어생활
09-12
1
수학질문
벤다이어그램
asdsagd
09-11
0
수학질문
후방)조공 받고 좀 도와주십쇼 [2]
신림살림살이
08-31
1
수학질문
횐님덜,,, [7]
hplus08
08-30
2
08-30
1
08-27
3
자유
Fiber, Fibre
trakatus
08-21
3
입시상담
과목 선택관련 지문입니다. [4]
남할리
08-18
8
08-14
69
자유
학부생 시절 자격지심이 생겼던 썰.txt [5]
수학못하는수학자
08-14
4
자유
통계학의 원리 [4]
smp2040
08-08
4
수학질문
죄송합니다 [1]
ㅣ넬로ㅣ
08-07
0
수학질문
이거 이해 좀 시켜줘요 [2]
아멜리아
08-06
0
수학질문
분수의 나눗셈 질문 [5]
supply2demand
08-05
6
08-03
5
수학질문
고딩 정적분 개념 질문점요. [3]
고딩임
08-02
8
07-23
3
수학질문
Y={f(x) | x€X} 해석 좀 도와주십셔 [2]
모킹_제이
07-23
인기글 글 쓰기