#알고리즘의 정의

 

 알고리즘이라는 용어는 문제를 해결하기 위한 절차나 방법을 의미하는 단어로 넒은 범위에서 사용된다. 조금 더 정확한 의미를 따져보자면 알고리즘은 어떠한 행동을 하기 위해서 만들어진 명령어들의 유한 집합(finite set)이다. 


#알고리즘의 조건

 

 입력 

 알고리즘은 0 또는 그 이상의 외부에서 제공된 자료가 존재한다.

 출력 

 알고리즘은 최소 1개 이상의 결과를 가진다.

 명확성 

 알고리즘의 각 단계는 명확하여 애매함이 없어야 한다.

 유한성 

 알고리즘은 단계들을 유한한 횟수로 거친 후 문제가 해결되고 종료되어야 한다. 알고리즘의 한 단계 이후 m의 값은 n 보다 작으며, m!=0이면 n의 값은 다음 번 단계에서 줄어든다.

 효과성 

 알고리즘의 모든 연산들은 사람이 종이와 연필을 이용하여 유한한 시간 안에 정확하게 수행할 수 있을 정도로 충분히 단순해야 한다



#좋은 알고리즘


 알고리즘이 위의 조건들을 모두 만족한다면 문제를 풀 수 있다고 할 수 있지만, '효과적으로' 풀어낸다고 할 수는 없다. 위에서 말한 유한한 시간이 몇 달 혹은 몇 년이 될 수도 있기 때문이다. 따라서 우리는 알고리즘을 효율성으로 평가하게 되고, 컴퓨터에서는 시간과 메모리라는 두 자원을 얼마나 소모하는지가 효율성의 중점이 된다.


평가기준

-시간 복잡도(time complexity) : 얼마나 적은 시간안에 문제를 풀어 내는가

-공간 복잡도(space complexity) : 얼마나 적은 공간(메모리)을 활용해서 문제를 물어 내는가



#공부할 사이트



https://www.digitalculture.or.kr/koi/StudyOnline.do


공부할 사이트는 한국 정보 올림피아드 라는 사이트로



정보올림피아드 대회를 위한 

문제해결을 위한 창인적인 알고리즘 강좌들을 

두루 제공하는데

강좌 내용이 아주 고급지고 알맹이만 있어서

이미 C언어에 익숙하고 알고리즘을 조금 짜본 사람에게는

매우매우 효과적인 사이트이다.


강좌는 중급과 고급편이 각각 12편씩 총 24편으로 구성되어있다.

(편당 약 20분 정도)



중급에는 주로 여러가지 자료 탐색 알고리즘을 배우고





고급에서는 재귀함수의 확장, 동적 테이블 응용, 이분 탐색, 자료구조를 이용한 알고리즘 고속화 및 문제해결 등이 있다.


알고리즘을 깊숙히 배워볼 생각이 있으면 꼭 한번 쯤 듣고 따라 쳐봤으면좋겠다.





reference:https://namu.wiki/w/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98



WRITTEN BY
Who1sth1s

,