7일
오늘 읽고 있는 것
- 22화 – 데이터 구조와 알고리즘은 필수인가?
- 에피소드 23 – 배열이란 무엇입니까?
- 24화 – 알고리즘의 속도는 어떻게 표현하나요?
- 25화 – 검색 알고리즘이란?
책에서 기억하고 싶은 것
22화 – 데이터 구조와 알고리즘은 필수인가?
- 개발자가 되고자 하는 사람은 어느 시점에 데이터 구조와 알고리즘을 공부하고 이를 자신의 코드에 적용할 수 있어야 합니다!
데이터 구조 및 알고리즘을 처리하면 코드를 보다 효율적으로 만들 수 있습니다.
하지만 코딩 초기부터 데이터 구조와 알고리즘을 공부할 필요는 없다고 생각합니다. - 알고리즘은 컴퓨터에 주어진 일련의 명령입니다.
일상에서 예를 찾는다면 아침에 학교 갈 준비를 할 때 하는 것이 바로 학교 준비 알고리즘이다. - 다른 컴퓨터 알고리즘
가능한 한 빨리 목적지에 도착하는 방법을 알려주는 Pathfinder 알고리즘
용량을 효율적으로 줄이고 이미지 손상을 최소화할 수 있는 압축 알고리즘 - 데이터가 무작위로 저장된다면? 개발 효율이 크게 떨어집니다.
예를 들어 택배 회사가 임의로 짐을 창고에 쌓아 놓으면 그 회사는 곧 망할 것입니다.
고객의 상품을 찾는 데 시간이 오래 걸리기 때문입니다.
이러한 이유로 데이터 구조를 공부해야 합니다! - 컴퓨터에도 동일하게 적용됩니다. 데이터는 보기 좋게 저장하는 것과는 별개로 쉽게 찾을 수 있도록 적절하게 저장해야 합니다.
- 결론은 코드를 효율적으로 만드는 것입니다!
에피소드 23 – 배열이란 무엇입니까?
- 프로그래밍을 시작하면 처음 접하게 될 데이터 구조인 배열을 보게 됩니다.
그리고 배열의 속성에 대해 이야기하려면 배열에서 자주 발생하는 이벤트를 알아야 합니다.
읽기, 검색, 추가 및 삭제 프로세스의 시간 복잡성. - 시간 복잡도는 프로그램이 작업을 얼마나 빨리 수행할 수 있는지 측정하는 방법입니다.
예를 들어 어떤 코드는 5단계를 거쳐야 하고 다른 코드는 20단계를 거쳐야 한다면 어떻게 될까요?
5단계만 필요한 코드는 더 빠르게 작동한다고 합니다. - 메모리는 컴퓨터의 저장 공간을 의미합니다.
영구 메모리는 컴퓨터의 하드 드라이브와 같습니다.
휘발성 메모리의 대표적인 예로는 RAM(Random Access Memory)이 있습니다. - 질서의 원칙
- 어레이는 RAM에서 행별로 공간을 차지합니다.
- 컴퓨터는 배열의 시작 주소와 길이를 알고 있습니다. 따라서 배열은 읽기가 매우 빠릅니다.
- 어레이는 앞에서 하나씩 차례로 채워져야 합니다. 따라서 어레이 삽입 및 삭제가 느립니다.
24화 – 알고리즘의 속도는 어떻게 표현하나요?
- 시간 복잡도에 대해 이야기하면 알고리즘은 작업을 완료하기 위해 단계 수 N을 사용합니다.
O(N), O(log N) 등으로 표현되며 이를 Big-O 표기법이라고 합니다.말해 - 선형 검색 알고리즘은 배열을 처음부터 한 번에 하나씩 검색합니다.하다,
그래서 어레이 크기가 증가함에 따라 검색 시간도 정비례하여 증가합니다.~라고 불리는
배열의 길이가 N이라면 탐색횟수는 최대 N이다. 시간복잡도는 O(N)으로 표현된다.
def print_first(arr):
print(arr(0))
- 위의 코드는 중요하지 않습니다.
여기서 집중해야 할 점은 이 함수가 배열의 길이에 관계없이 한 번만 실행되고 종료된다는 것입니다.
함수가 첫 번째 데이터만 출력하기 때문입니다!
따라서 이 함수의 시간 복잡도는 O(1)입니다. 그리고 때때로 “일정한 시간에 실행”된다고 합니다.
상수 시간은 실행 횟수가 이미 고정되어 있음을 의미합니다.
def print_first(arr):
print(arr(0))
print(arr(0))
- 많은 사람들은 위의 코드가 “시간 복잡도는 O(2)로 작성할 수 있습니다”라고 생각할 것입니다.
그러나 Big-O는 이 경우에도 O(1)로 표현합니다.
Big-O는 실행 단계에 영향을 미치는 요인만 보기 때문입니다.
Big-O로서 이 함수는 배열의 길이에 관계없이 항상 같은 횟수만큼 실행되므로 1은 같은 의미로 사용됩니다.
def print_all(arr):
for n in arr:
print(n)
- 코드는 위에 있습니다 실행 시간은 배열의 길이에 따라 다릅니다. 배열 길이가 10이면 10번 출력되고, 100이면 100번 출력됩니다.
이때 시간 복잡도는 O(N)입니다.
def print_twice(arr):
for n in arr:
for x in arr:
print(x, n)
- 시간복잡도가 다른 평방 시간있다 중첩 루프가 있는 경우 2차 시간이 발생합니다.
배열 길이가 길수록 작업 속도가 2배 느려집니다.
그리고 Big-O로 표현하면 O(N^2)입니다. 제곱 배수(N*N)로 표현됩니다. - Big-O 표기법은 개발자가 이해해야 할 중요한 개념입니다.
25화 – 검색 알고리즘이란?
- 선형 검색 알고리즘은 가장 자연스러운 검색 방법입니다.당신은 말할 수 있습니다
그래프로 표현했을 때 y = x의 모양보여주다 - 이진 검색은 큰 배열에 대한 선형 검색보다 훨씬 더 나은 알고리즘입니다.
그러나 이진 검색 알고리즘은 정렬된 데이터 배열에서만 사용할 수 있습니다. - 이진 검색은 배열의 중간을 검색하여 시작한 다음 해당 숫자가 검색 중인 숫자보다 큰지 작은지 테스트합니다.
예를 들어 9를 찾으려면 3라운드에 9를 찾을 수 있습니다!
1, 2, 3, 4, 5, 6, 7, 8, 9
1, 2, 3, 4, 5, 6, 7, 8, 9
1, 2, 3, 4, 5, 6, 7, 8일, 9 - 선형 검색으로 9를 찾은 경우 검색은 9번 모두 시도했을 것입니다.
이진 검색이 3라운드에서 9를 찾는 것이 더 빠르지 않습니까?
이진 검색에서 배열 길이와 검색 시간은 y = log x의 그래프 모양을 나타냅니다. - 이진 검색은 데이터가 많을 때 빛을 발합니다.
물론 데이터를 정렬해야 하는 부담도 있습니다!
오늘 독서 기분이 어떠세요?
- 오늘 내용이 별거 아니라고 생각할 수도 있겠지만 개인적으로 굉장히 어려웠습니다.
Python으로 시작했지만 네트워킹, Linux, Cloud, Docker 및 Kubernetes에 대해 진지하게 생각했습니다.
올해 초에 알고리즘을 공부할 계획이었는데 아직 시작도 안 했어요.
빨리 SAA-C03을 취득하고 취직하고 공부합시다.
질문이 있거나 잘 이해하지 못하셨나요?
- 데이터 구조, 알고리즘 및 Big-O 표기법
오늘의 TIL 3 라인 요약
- 데이터 구조와 알고리즘은 코드를 효율적으로 만드는 역할을 합니다.
- Big-O 표기법은 이해해야 할 중요한 개념입니다.
- 선형 및 이진 검색