알고리즘
알고리즘은 수학과 컴퓨터과학, 언어학 또는 엮인 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차입니다. 계산을 실행하기 위한 단계적 절차를 의미하기도 합니다. 즉, 문제 풀이에 필요한 계산절차 또는 처리과정의 순서를 뜻합니다. 프로그램명령어의 집합을 의미하기도 합니다.
알고리즘의 표현
자연어 알고리즘
자연어 알고리즘을 쉽게 표현하면 자연어 표현법, 일상 언어 표현법이라고도 합니다. 이 방법은 일상적으로 사용하는 말로써 문제를 해결하는 과정을 순서대로 나열하는 것입니다. 일상적인 언어를 사용하기 때문에 매우 쉽게 표현할 수 있지만 모호하게 표현될 수 있다는 단점이 있습니다.
라면 조리법으로 알고리즘 예시를 들어보겠습니다.
- 냄비에 물을 넣는다.
- 물을 끓인다.
- 면, 스프 등을 넣는다.
- 조리가 완료될 때까지 끓인다.
- 맛있게 먹는다.
순서도
순서도는 약속된 기호를 사용하여 알고리즘을 표현하는 방법입니다. 순서도 표현 방식에는 일련의 수행과정을 공용의 약속 기호로 표시하고, 화살표로 수행 과정을 순서대로 연결하여 알고리즘을 표현합니다. 순서도 방식은 수행 과정을 전체적으로 쉽게 살펴볼 수 있다는 장점이 있지만 복잡한 알고리즘이나 블록현 언어를 표현하기 어렵다는 단점을 가지고 있습니다.
의사코드
일반적인 언어로 코드를 흉내 내어 알고리즘을 써놓은 코드입니다.
시작
라면, 냄비를 준비한다
냄비에 물을 넣고 불을 켠다
기다린다
if(물이 안 끓었다면) {
기다린다
}
면, 스프 등을 넣는다
기다린다
if(조리가 완료되지 않았다면) {
기다린다
}
맛있게 먹는다
끝
프로그래밍 언어
프로그래밍 언어는 컴퓨터 시스템을 구동시키는 소프트웨어를 작성하기 위한 형식언어입니다.
public static void main(String[] args){
class Ramen{
}
class Water{
}
class Pot{
Ramen ramen;
Water water;
boolean boil = false;
boolean sauce = false;
public Pot(Ramen ramen, Water water) {
this.ramen = ramen;
this.water = water;
}
public void addSauce() {
this.sauce = true;
}
}
Ramen ramen = new Ramen();
Water water = new Water();
Pot pot = new Pot(ramen,water);
if(pot.boil != true) {
System.out.println("기다린다.");
}
pot.addSauce();
if(pot.sauce != true) {
System.out.println("기다린다.");
}
System.out.println("맛있게 먹는다");
}
알고리즘의 조건
알고리즘은 다음의 조건을 만족해야 합니다.
- 입력 : 필요한 자료를 외부로부터 받아들인다. 경우에 따라, 자료가 외부로부터 입력되지 않고 내부에서 생성할 수도 있다.
- 출력 : 문제를 처리했을 때 적어도 하나 이상의 결과값이 나와야 한다.
- 명확성 : 각 단계별로 무엇을 하는지 명확하게 표현되어야 한다.
- 수행 가능성 : 알고리즘의 각 명령어는 논리적이어야 한다.
- 유한성 : 실행하면 주어진 과정을 처리한 후 반드시 종료되어야 한다.
알고리즘의 특징
- 정밀성 : 변하지 않는 명확한 작업 단계를 가져야 합니다.
- 유일성 : 각 단계마다 명확한 다음 단계를 가져야 합니다.
- 타당성 : 구현할 수 있고 실용적이어야 합니다.
- 입력 : 정의된 입력을 받아들일 수 있어야 합니다.
- 출력 : 답으로 출력을 내보낼 수 있어야 합니다.
- 유한성 : 특정 수의 작업 이후에 정지해야 합니다.
- 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 합니다.
'Programming > 지식' 카테고리의 다른 글
로그 (0) | 2022.10.19 |
---|---|
정렬 알고리즘 (0) | 2022.10.08 |
프레임워크, 라이브러리 (0) | 2022.10.06 |
결합도와 응집도 (0) | 2022.10.06 |
OOP (0) | 2022.10.04 |