본문 바로가기
카테고리 없음

[노개북 스터디] 7일차_2023/02/23

by 율✌️ 2023. 2. 23.
[오늘의 과제]
✅ 에피소드 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표기법은 제대로 공부를 더해야할듯