[오늘의 과제]
✅ 에피소드 22~25 까지 읽기
✅ TIL 작성하기
📝 오늘의 TIL 📝
✔️ 책에서 기억하고 싶은 내용들 정리
- 에피소드 22 : 자료구조와 알고리즘은 필수라고?
- 자료구조, 알고리즘은 효율적이고 빠른 코드를 위해 필요하다.
- 알고리즘은 컴퓨터에게 더 효율적이고 빠른 지시사항을 알려주는것
지도: 패스파인더(pathfinder) 알고리즘
이미지압축: 압축(compression)알고리즘
- 데이터를 보기좋고 찾기 좋게 제대로 보관할 수 있는 것이 자료구조.
- 에피소드 23 : 배열이 뭐죠?
- 배열은 램에 줄줄이 이어진 형태로 공간을 차지하고 있다.
- 컴퓨터는 배열의 시작 주소와 길이를 알고 있다. 그래서 배열은 읽는 속도가 아주 빠르다.
- 배열은 맨 앞부터 차곡차곡 채워져있어야하기 때문에 삽입과 삭제가 느리다.
- 에피소드 24: 알고리즘의 속도는 어떻게 표현할까?
- 알고리즘의 속도를 표현하는 방법? => Big-O
사용하는이유? >> 설명이 간단, 보고 어떤 알고리즘인지 파악하기 쉬움
Big-O 예시 1. >>
O(N) 표기법(선형검색알고리즘):배열을 앞에서부터 하나하나 검색하여 배열의 길이만큼 걸리는 시간이 정비례로 늘어난다.
def print_first(arr) # 배열을 인수로 받는다
print(arr[0])
👆👆👆배열의 길이와 상관없이 첫번째 데이터만 출력하고 함수는 바로 끝난다, 이때 시간복잡도는 O(1)👆👆👆
def print_first(arr) # 배열을 인수로 받는다
print(arr[0])
print(arr[0])
👆👆👆위와 코드는 같지만 배열의 데이터를 두번 출력한다, 하지만 여전히 시간복잡도는O(1).
Big-O는 실행단계에 영향을 주는 요소만 보기 때문. 👆👆👆
Big-O 예시 2. >>
O(N²) 표기법(이차시간): 중첩 반복문에서 발생
def print_twice(arr) # 역시 배열을 인수로 받는다
for n in arr:
for x in arr:
print(x,n)
👆👆👆이중 반복문으로 배열의 길이가 길어질 수록 작업속도가 제곱배로 느려진다. O(N²) 👆👆👆
에피소드 25 : 검색 알고리즘이 뭐죠?
- 배열의 길이가 짧다면 선형알고리즘도 좋지만 길어진다면 이진검색(binary search) 알고리즘으로.
하지만 중앙값을 기준으로 찾아가기 때문에 오름차순 또는 내림차순으로 정렬이 된 배열에서만 가넝.
이진검색 예 >>
<상황>
배열 [1,2,3,4,5,6,7,8,9] 에서 6을 찾고싶다.
1. 중앙값을 찾는다. -> 5
2. 6은 중앙값인 5보다 큼 -> 5왼쪽의 배열은 볼 필요 없음
3. 5중심으로 오른쪽에서 중앙값을 찾음 -> 7
4. 6은 7보다 작음 -> 6찾음!🥳
선형알고리즘처럼 여섯번만에 찾을 것을 네번만에 찾아버림
🧐 감명깊었던 구절
네이버지도나 구글맵도 목적지까지 최대한 빨리 가는 방법을 알려주는 기능을 구현하기 위해
pathfinder알고리즘을 이용한다.
한참 ~ 알고리즘 알고리즘 얘기가 나왔을때 별신경안쓰고 뭐야 왜 기분나쁘게 내가 검색한거 다 얘기한거 좋아하는거 다 알고 있지? 소름이다는 생각을 했었다. 지도에서까지 어떻게 가는게 제일 빠르고 제일 편하게 갈 수 있는지를 알고리즘을 이용해서 알려준다니 ㅋㅋ.. chat GPT가 핫한 요즘, 세상정말 편하다는 생각과 무섭다는 생각이 공존하는 오늘 😶
✍🏻 오늘의 짧디 짧은 소감
오호 알고리즘과 자료구조가 왜 필요한지 정확히 모르는 상태에서 계속 공부하다보니 재미도 없고 막막했는데 이제 명분(?) 이유(?)를 알게되어 재미있게 공부 할 수 있을것 같다. 나의 클린하고 빠른 코드를 위해 빠이팅 레츠고🫡
생각난김에 프로그래머스 하나 풀고 자야겠다....ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
점점 내용이 어려워짐을 느낀다, 특히 Big-O표기법은 제대로 공부를 더해야할듯