CS50 2: 알고리즘

2021. 3. 18. 15:26TIL/CS50

728x90
알고리즘이란 무엇인가?

입력값을 출력값의 형태로 바꾸기 위해 어떤 명령들이 수행되어야 하는지에 대한 규칙들의 순서적 나열

알고리즘은 정확성과 효율성을 필요로 한다

 

 

 

 

더보기

의사 코드(Pseudocode)

그 동안 여기저기서 들어보았던 수도 코드가 이것이었다!

문법 걱정 없이 알고리즘을 단계별로 표현할 수 있는 유용한 방법이며 프로그램의 논리를 이해하는데 더 효과적인 방법

프로그램을 짜기 전 의사코드를 작성해보면 문제가 무엇인지, 어떻게 해결해야 좋을지 보다 더 직관적으로 보고 판단할 수 있다는 것이 큰 장점이다

 

 

 

더보기

선형 탐색

원하는 원소가 발견될 때까지 처음부터 마지막 자료까지 차례대로 탐색하는 방법

정확하지만 아주 효율적이지 못한 방법

자료가 정렬되어 있지 않거나 그 어떤 정보도 없어 하나씩 찾아야 하는 경우에 유용하다

 

더보기

버블 정렬

두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법

n개의 원소에 대해서 버블 정렬을 한번 수행할 때마다 n번째의 원소가 제 자리를 찾게 된다

최악의 경우 n-1번의 과정을 거쳐야 하기 때문에 효율적이지 못하다

 

더보기

선택 정렬

가장 작은 수(혹은 가장 큰 수)를 찾아 첫 번째 위치(혹은 가장 마지막 위치)의 수와 교환해주는 방식의 정렬

교환 횟수를 최소화하는 반면 각 자료를 비교하는 횟수는 증가한다

n-1번의 교환, n²번의 비교, 최악의 경우와 최선의 경우에서 수행하게 되는 교환, 비교 횟수가 동일하다

 

더보기

삽입 정렬

정렬되지 않은 부분의 자료가 정렬된 부분의 자리로 삽입되는 형태의 정렬 방법

자료의 양이 적을 때 성능이 우수하며 자료 대부분이 이미 정렬이 되어있는 경우 효율적

 

더보기

합병 정렬

원소가 한 개가 될 때까지 계속해서 반으로 나누다가 다시 합쳐나가며 정렬을 하는 방식

n개의 원소가 있을 때 완전히 다 나누어지기까지 호출되는 함수의 개수는 log n개

합쳐지는 과정에서 각 원소들의 크기를 비교하기 때문에 n번의 비교 과정

즉 한번 나누어질 때마다 n번의 비교 횟수가 추가되기 때문에 시간 복잡도는 Ο(n log n)

 

더보기

이진 탐색

자료를 절반으로 나눈 후 찾는 값이 어느 쪽에 있는지 파악해 탐색의 범위를 반으로 줄여나가는 탐색 알고리즘

 

 

 

Big-O 표기법

최악의 경우에 대한 시간 복잡도를 나타내는 표현

 

 

Big Ω (omega) 표기법

최선의 경우에 대한 시간 복잡도를 나타내는 표현

 

 

 

 

 

 

 

고등학교 수학을 이용해서 계산한 거라는데 나는 하나도 모르겠다...^^

제곱 계산하는것도 힘든 나는 그냥 그렇구나.. 하고 넘어가는걸로....ㅎㅎㅎ

'TIL > CS50' 카테고리의 다른 글

CS50 1: 컴퓨터와 컴퓨팅  (0) 2021.03.18