1. 알고리즘이란?
알고리즘은 크게 우리가 고등학교 때 풀었던 수학문제의 '풀이법'이라고 볼 수 있다.
풀이법에는 여러 방법이 존재하고 어떻게해야 명확하게 빨리 풀 수 있는지, 방법이 존재한다.
때로는 경우의 수를, 때로는 정형화된 공식을 사용할 수 있어야한다.
알고리즘은 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로, 컴퓨터 언어로 표현한 것이다.
이 것이 알고리즘이 동작하는 방식이다.
2. 알고리즘의 종류 예시
순차탐색
임의의 숫자를 찾을 때 뒷 숫자와 앞 숫자를 비교해서 큰 숫자만을 계속 들고 있는 방식으로 가장 큰수를 찾을 수 있다.
*이진탐색: 정렬된 데이터를 반으로 나누고, 숫자를 비교하고 다시 반으로 나누고 하는 작업을 반복 한 뒤에 원하는 데이터를 찾는 방식. 기존 순차 탐색에 비해 훨씬 빠름
그리디 알고리즘
가장 큰 액면의 동전부터 지불하면서 동전을 소비해나가는 방식을 선택한다.
한붓 그리기(오일러 트레일)
시작점 부터 모든 선분을 한 번만 지나서 출발점으로 돌아오는 방법은? 선분은 겹치면 안되지만 점을 겹쳐도된다.
모든 꼭지점이 짝수점이거나 단 두개의 꼭지점만 홀수점이면 가능.
3. 알고리즘 표현 방식
종류 | 내용 | 특성 |
자연어 | 일반적인 언어 | 부적절 |
순서도 | 알고리즘 도식화 | 쉬움, 단순한 것만 가능 |
의사 코드 | 유사 프로그래밍 언어 | 가상코드, 유사코드, 슈도 코드라 불림. 프로그래밍 언어에 비해 덜 엄격한 문법 |
프로그래밍 언어 | C와 같은 실제 프로그래밍 언어 | 복잡한 것 가능. 너무 엄격해서 비효율적일 수도 있음 |
실제로 알고리즘은 순서도와 프로그래밍 언어를 가장 많이 쓴다.
머리 속에서 구성할 때는 순서도를 그려서 간단하게, 실제로 도출할 때는 프로그래밍 언어를 사용한다.
4. 알고리즘의 조건
- 입력: 외부에서 제공되는 자료가 0개 이상이다.
- 출력: 적어도 1개 이상의 결과를 생성한다.
- 명백성: 각 명령어는 의미가 모호하지 않다.
- 유한성: 무한히 동작해서는 안된다.
- 유효성: 불필요한 연산을 포함해서는 안된다.
지금까지의 알고리즘은 그다지 어렵지 않을 것이다. 뭔가 수학 공식이라고 생각하고 구하면 되니까!그건 니생각이고
다음번에는 알고리즘을 제일 먼저 포기하게 된다는 복잡도에 대해서 '쉽게' 알아보도록 하자.
'Data Structure [C] > 문돌이도 할 수 있는 [C언어 자료구조]' 카테고리의 다른 글
#6 [C 자료구조] 알고리즘 성능의 척도: 시간 복잡도의 계산법 (0) | 2019.04.18 |
---|---|
#5 [C 자료구조] 지옥의 알고리즘 성능분석 (0) | 2019.04.18 |
#3 [C 자료구조] 자료구조의 분류 (0) | 2019.04.17 |
#2 [C 자료구조] 자료구조와 알고리즘을 배우는 목적? (1) | 2019.03.13 |
#1 [C 자료구조] 문돌이, 알려준다 알고리즘 (0) | 2019.03.13 |