[algorithm] 알고리즘 01 : 소개
자바로 쉽게 배우는 알고리즘 - part 1 : 알고리즘 소개
알고리즘의 조건
- 명확성 : 알고리즘의 각 단계는 애매모호 하지 않고 명확해야 한다.
- 정확성 : 유효한 입력에 대해 올바른 결과를 출력해야 한다. 유효한 입력에 대햔 명확하게 명시되어야 한다.
- 정지성 : 유효한 입력이 되면 반드시 유한한(짧은) 시간 내에 종료되어야 한다.
알고리즘의 문제 해결 과정
- 문제이해 : 주어진 문제를 완전히 이해 한다. 애매한것은 명확하게 확인한다.
- 알고리즘 설계 : 이 책을 배우는 이유
- 정확성 증명 : 만들어진 알고리즘이 모든 유효한 입력에 대한 유한한 시간 내에 정확한 결과를 만들어 낸다는 것을 증명한다. 수학적 귀납법을 사용한다. 틀린 사례 한 가지라도 존제하면 끝이다.
- 알고리즘 분석 : 알고리즘의 효율성 분석, 효율성이 떨어지면 재설계
알고리즘의 효율성
- 시간의 효율성 : 처리시간의 효율성
- 공간의 효율성 : 사용하는 메모리의 효율성
- 코드의 효율성 : 보이는 코드의 간결성, 가독성
- 알고리즘 구현 : 설계된 알고리즘을 코드로 작성, input validation 기능
알고리즘의 표현
FindMAximum.java 참조
- 자연어 (한글, 영어) : 문제가 복잡하면 애매해진다.
- 의사코드(Pseduocode) : 실제 프로그램과 유사하게 표현한 자연어 코드
- 프로그래밍 언어 코드(java) : 설계된 알고리즘으로 구현된 코드
알고리즘의 분류 : 이책을 배우는 이유
알고리즘 설계 기법을 배우는 외우는 것이 목적!
문제를 해결하는 주요 알고리즘
- 분할정복 : 5장
- 동적계획 : 6장
- 탐욕기법 : 7장
- 되추적 : 9장
- 분기한정 : 10장
그외 문제 유형에 따라 여러 가지 알고리즘 존재
- 억지 기법
- 무작위 알고리즘
- 근사 알고리즘
- 병렬 알고리즘
- 분산 알고리즘
- 양자 알고리즘
- 유전자 알고리즘
알고리즘을 해결하는 문제 유형에 따라
- 정렬 알고리즘
- 탐색 알고리즘
- 문자열 처리 알고리즘
- 그래프 알고리즘
- 조합 알고리즘
- 기하학적 알고리즘
- 수치 알고리즘
- 등등 …
Comments