학습한 내용
알고리즘
- 알고리즘이란
- 어떤 목적을 달성하기 위해 거치는 일련의 과정들
- 시간복잡도가 가장 낮은 알고리즘을 선택한다.
- 알고리즘의 조건
- 입력과 출력 : 0개이상의 input과 1개 이상의 output이 있어야한다.
- 명확성 : 각 단계의 명령이 명확해야한다.
- 유한성 : 유한시간내에 종료되어야한다.
- 효율성 : 명백하게 실행가능(검증 가능)한 것이어야 한다.
복잡도
- 알고리즘의 성능을 나타내는 척도
- 시간 복잡도 : 연산의 횟수
- 공간 복잡도 : 메모리의 양
점근적 표기법과 시간 복잡도
아래 블로그 참고
[학교-알고리즘] 점근적 표기법과 시간 복잡도
- 점근적 표기법
- 해당 알고리즘이 주어진 데이터의 크기를 기준으로 수행시간 혹은 사용공간이 얼마나 되는지 객관적으로 나타낼수 있는 표기법
- 빅오, 오메가, 세타
- Big O
- 점근적 상한선 의미
- 새로운 알고리즘이 아무리 나빠도 기존 비교하는 함수와 같거나 좋다는 뜻
- Big 오메가
- 점근적 하한선
- 새로운 알고리즘이 아무리 빨라도 기존 비교하는 함수와 같거나 좋지 않다는 뜻
- 빅오의 반대
- Big 세타
- 점근적 상한과 하한의 교집합
- 새로 만든 알고리즘이 아무리 나쁘거나 좋더라도 기존 함수의 범위 안에 존재한다는 뜻
- Big O가 최악의 경우라는 뜻..?
- big O가 최악의 경우이며 시간 복잡도를 나타낼때 많이 사용함
- 왜 최악의 경우를 사용할까
- 내 알고리즘은 아무리 느려도 70점은 할 수 있어 라는 느낌
- 알고리즘은 하드웨어에 영향을 많이 받아서 절대적 시간으로 평가 할 수 없어서 big O를 사용한다.
Queue
큐 (자료 구조)
- queue는 선입선출 자료구조이다.(First Come First Out)
- put(insert), get(delete)를 이용하여 구현된다.
- front(head)와 rear(tail)은 데이터의 위치를 가르킨다.
- front : 데이터를 get할 수 있는 위치
- rear : 데이터를 put할 수 있는 위치
- 오버플로우(Overflow) : 큐가 꽉 차서 더이상 put 할 수 없는 경우
- 언더플로우(Underflow) : 큐가 비어있어 get 할 수 없는 경우
Deque (덱, Double-ended queue)
[자료구조] 스택(Stack), 큐(Queue), 덱(Deque)
- 스택과 큐의 특성을 모두 갖는 자료구조
- front 와 end 양쪽에서 삭제와 삽입이 모두 가능하다.
- 하지만 중간에서 삽입과 삭제가 어렵다.
- 탐색을 거의 하지 않고, 앞 뒤에서 삽입, 삭제가 자주 일어나는 경우에 사용한다.
오늘 한 일
- 알고리즘의 조건, 복잡도
- 점근적 표기법에 대해 완벽히 이해는 못했지만 학습한 부분까지만 짚고 넘어가자. 나중에 필요할 때 더 학습하는 걸로
- 그룹 코드 리뷰시간에 내 코드를 설명하다가 막혔는데 원인이 단순히 돌아가는 코드를 짜서 발생한 것 같다. 단 하루만에 내가 짠 코드가 이해가 안 간 것이다. 코드를 작성하고 바로 코드에 대한 설명을 노션에 정리해서 왜 이렇게 구현했는지 내 자신이 알 수 있도록 하는 시간을 갖자.
- 오전에 피로함이 몰려와서 점심시간에 호수공원 한바퀴 돌고 왔다. 집으로 돌아오는 길에 눈이 펑펑 쏟아졌다.. 체력이 부족한게 확 느껴져서 운동 좀 할 걸 반성했다.
- 왜 크롬에서 구글검색 안되는거지.. 사이트는 잘 동작하는데
Todo
- 자료구조 학습하기(알고리즘보다 중요하고, 현업에서 필요한 지식)
- 자바의 정석 진도 나가기(자바 실력을 높여야 더 퀄리티 높은 미션 제출이 가능할 듯)
- 윤성우님의 자료구조 책
- 그림으로 이해하는 알고리즘 책 이번주 안에 다 읽기
- 호수공원 달리기랑 주말 등산하기
Reminder
- 코드 짤 때 내가 왜 이렇게 구현했는지 잊어버리지 않게 바로 코드 설명하는 페이지 노션에 만들기
하루만에 내가 짠 코드가 이해가 안가는 거 저도 공감해요. 바로 코드를 어떤 방식으로 짰는지 정리하는 게 확실히 좋은 거 같습니다.