미적분 등과 같이 연속적인 수학 구조에 대해 연구하는 연속 수학과 달리, 불연속적인 상태를 나타내는 이산적 수학구조에 대해 연구하는 수학의 한 분야이다. 일반적으로 디지털 컴퓨터가 다루는 데이터는 0과 1처럼 이산적인 값을 가지므로 이산수학은 디지털 컴퓨터가 데이터를 처리하는 과정에 필요한 수학적인 개념을 제공한다.
연속수학은 실수처럼 연속적인 특징을 가진 집합에 중점을 두며 '셀 수 없다'는 특징이 있는 반면, 이산수학은 자연수와 같이 딱딱 별개로 구분되는 집합에 집중한다. 이산수학은 유한하거나, '셀 수 있다'는 특징이 있다. 연속수학을 그래프로 표현하면 선의 형태로, 이산수학을 그래프로 표현하면 점의 형태로 확인할 수 있다. 또 컴퓨터 과학에서 처리하는 데이터가 연속적인 형태라면 아날로그 컴퓨터, 이산적인 형태라면 디지털 컴퓨터로 볼 수 있다. 아날로그 시계와 디지털 시계를 떠올리면 쉽다.
*수학적인 도구, 기법, 방법론을 이용해 문제를 해결하려면 우선 실생활의 문제를 수학적 모델로 변화시켜야 하는데, 이런 과정을 수학적 모델링이라고 한다.
도구, 기법, 방법론 예시 (축구)
- 도구 - 축구공, 축구화, 보호대, 유니폼, 축구장, 골대 등
- 기법 - 킥, 헤딩, 트래핑, 스토핑, 태클 등
- 방법론 - 누가, 언제, 어디서, 왜, 어떤 도구와 기법을 사용해야하는지에 대한 내용을 담은 개념의 집합
실생활의 문제를 컴퓨터의 영역으로 옮기는 과정을 데이터 모델링이라고 한다.
수학적 모델링이든, 데이터 모델링이든 추상화 과정을 거쳐야 한다. 문제의 해결을 위해서 필요한 핵심을 제외하고는 모두 제거하며 문제를 단순화 하는 것이다.
사람이 일상 속에서 사용하는 자연어는 모호성이 있어 알고리즘을 표현하고 기술하기에 적절하지 않다. 그렇다면 알고리즘을 명확하게 표현할 수 있는 대안 중에는 어떤 것들이 있을까? 바로 다음의 세가지를 들 수 있다.
- 컴퓨터 프로그래밍 언어
- 순서도(flowchart)
- 의사코드(pseudocode)
Java, Python, C 언어 등 컴퓨터 프로그래밍에 사용하는 언어를 말한다.
특정 프로그래밍 언어 문법에 따라 작성된 것이 아니라, 일반적인 언어로 프로그래밍 언어를 흉내내서 작성한 코드이다. 컴퓨터에서 실행되지않고 사람에게 알고리즘의 작동 방식을 설명하는 용도로만 사용된다.
x ⬅️ a+1;
변수x의 값에 a+1 을 대입한다.
x ⬅️ 0;
x ⬅️ x+1;
x ⬅️ x+2;
변수x의 값에 0을 대입한 뒤, x+1, x+2 를 순차적으로 대입한다.
if(x>0) print "pos";
else if (x<0) print "neg";
else print "zero";
x가 0보다 크면 "pos"를, 작으면 "neg"를 출력한다.
switch(x){
case 0:
print '0';
break;
case 1:
print '1';
break;
default :
print 'please input 1 or 0';
break;
}
x의 값에 따라 '0'과 '1' 또는 'please input 1 or 0' 문자열을 출력한다.
for x ⬅️ 5 to 0
{
print x;
}
print "finish";
5,4,3,2,1,0 을 차례대로 출력한 다음 finish 라는 단어를 출력한다.
x ⬅️ 5;
while x >= 0 do
{
print x;
x ⬅️ x-1;
}
print "finish";
5,4,3,2,1,0 을 차례대로 출력한 다음 finish 라는 단어를 출력한다.
foreach x in {5,4,3,2,1,0}
{
print x;
}
print "finish";
5,4,3,2,1,0 을 차례대로 출력한 다음 finish 라는 단어를 출력한다.