Today I Learned 5일차
- 알고리즘 시작!
- 느낀점
1. 알고리즘 시작!
미니 프로젝트가 마무리 되기 무섭게 바로 알고리즘 주차가 시작되었다.
다음주부터 시작되는 문제풀이 주차에 주눅들지 않도록 밤이 새더라도! 이번주까지 주어진 강의를 다 듣고 내 것으로 소화시키는 것이 목표다.
알고리즘이란,
- 어떤 문제의 해결을 위하여 입력된 자료를 토대로 원하는 출력을 유도하는 규칙내 집합
- 좋은 알고리즘은 좋은 프로그램 즉, 적은 공간을 이용해서 빠른 속도로 수행되는 프로그램을
구현할 수 있게해준다.
- 좋은 알고리즘를 구현하기 위해서는 상황에 맞는 자료구조나 접근방법을 선택할 수 있어야한다.
시간 복잡도
정의
- 시간복잡도란 입력값과 문제를 해결하는데 걸리는 시간간에 상관관계이다.
- 즉, 좋은 알고리즘에서 시간복잡도는 입력값이 늘어나도 그 것을 해결하는 시간은 덜 늘어나는 것이다.
계산법
- 코드의 각 줄이 실행되는 걸 한번의 연산이라고 생각
- 배열 반복문을 'N'이라고 했을 때 중첩 반복문이 사용된 코드의 시간복잡도는 N^2
- 그 외 연산자들은 줄 개수에 따라 상수로 처리
- N의 지수가 커질 수록 시간복잡도가 커진다
공간 복잡도
정의
- 입력값과 문제를 해결하는데 걸리는 공간관의 상관관계이다.
- 좋은 알고리즘은 입력값이 늘어나도 공간이 덜 늘어나는 것이다.
계산법
- 저장하는 데이터의 양이 1개의 공간을 사용한다고 계산
시간복잡도와 공간복잡도 중 우선 순위는 "시간복잡도"다.
알고리즘의 성능은 시간복잡도에 의해 결정되며 공간을 희생해서라도 시간을 더 효율적으로 쓰는게 좋다구..
점근 표기법
정의
- 어떤 함수의 증가 양상을 다른 함수와의 비교로 표현하는 수론과 해석학의 방법
- 즉, 알고리즘의 성능을 수학적으로 표기하여 효율성을 평가하는 방법
접근 표기법 종류
Big-O (빅오) O(N)
- 최악의 성능이 나올 때 어느 정도의 연산량
- 알고리즘은 항상 성능이 동일한게 아니라 입력값에 따라서 달라지기 때문에 'N'으로 표기(ㅎ..확실하지않음)
* 예를 들어 배열에 특정값을 찾을 때 해당 값이 어느 인덱스에 있는지에 따라서 성능이 달라질 수 있다.
Big-Ω (빅오메가) Ω(1)
통상 최선이라는 것은 없기에..최악의 상황을 대비한 Big-O 표기법이 주로 쓰인다고한다.
우선 이것만 기억하자구!!
- 입력값에 비례해서 시간이 얼마나 늘어날지 생각해보자 1/N/N^2
- 공간보다는 시간 복잡도를 줄이기위해 고민하자!
- 최악!의 경우에 시간이 얼마큼 소요될 지 (빅오 표기법) 에 대해 고민하자
2. 느낀점
오늘 오전부터 프로젝트에 대한 간단한 회고록 작성을 하고 오시영 담당 튜터님께 개발일지 쓰는 팁을 전수받았다.
안그래도 전부터 개발일지 쓰는 것에 대한 부담감이 있었는데 튜터님 이야기를 들으면서 '꾸준히' 작성하는 것이 중요하다는 걸 깨달았다.
맞는 거 같다. 물론 내용까지 알차면 좋겠지만..괜히 처음부터 욕심내다가 지치지말고! 짧게라도 꾸준히 기록하는 것을 습관화하는 걸 목표로 삼아야겠다!
눈이..ㄴ눈이 감기는 거 같지만 아직 들어야하는 알고리즘 강의가 산더미이다.
이 친구들도 꾸준히 공부해서 벨로그에 남겨야지...
오늘 하루도 화이팅했고 오늘 저녁에 좀 더 화이팅하자!!