티스토리 뷰
점근적 실행 시간(Asymptotic Running Time)
- 입력값 n이 커질 때, 즉 입력값이 무한대를 향할 때 함수의 실행 시간의 추이를 의미한다.
시간복잡도(Time Complexity)
- 어떤 알고리즘을 수행하는 데 걸리는 시간을 설명하는 계산 복잡도(Computational Complexity)
빅오 별 특징
- O(1) : 1초가 걸린다는 것이 아니라 입력값이 아무리 커도 실행 시간이 일정하다는 뜻이다. 상수 시간이라는 것이 빠르다고 생각이 들 수 있지만 일정하다는 것이 포인트이므로 이 상수값 자체가 엄청나게 크다면 사실상 일정한 시간의 의미가 없다. 해시테이블의 조회 및 삽입이 이에 해당한다.
- O(logN) : 매우 큰 입력값에도 크게 영향을 받지 않는 편으로 웬만한 n의 크기에 대해서도 매우 견고하다. 이진 검색이 이에 해당한다.
- O(N) : 선형시간 알고리즘(Linear-Time)이라고도 하며 수행 시간이 입력값에 비례한다. 정렬되지 않은 리스트에서 최대값 또는 최솟값 경우가 이에 해당한다.
- O(NlogN) : 병합 정렬을 비롯한 대부분의 효율적인 알고리즘이 이에 해당한다. 적어도 모든 수에 대해 한 번 이상은 비교해야 하는 Comparison Algorithm은 아무리 좋은 알고리즘도 O(NlogN)보다 빠를 수 없다. 물론 입력값이 최선인 경우, 비교를 건너뛰어 O(N)이 되며 Tim Sort가 이에 해당한다.
- O(N^2) : 버블 정렬 같은 비효율적인 정렬 알고리즘이 이에 해당한다.
- O(2^N) : 피보나치를 재귀로 계산하는 알고리즘이 이에 해당한다.
- O(N!) : 각 도시를 방문하고 돌아오는 가장 짧은 경로를 찾는 외판원 문제(Traveling Salesman Problem)를 Brute Force로 풀이할 때가 이에 해당한다.
빅오(O), 빅오메가(Ω), 빅세타(Θ)
- 빅오 : 상한(Upper Bound)를 의미한다. 주어진(최선/최악/평균) 경우의 수행 시간의 상한을 나타낸다.
- 빅오메가 : 하한(Lower Bound)를 의미한다.
- 빅세타 : 평균을 의미한다.
- 학계와 달리 업계에서는 빅세타와 빅오를 하나로 합쳐서 단순화해 표현한다. 평균적인 시간보다 상한 시간으로 단순화해서 표현한다.
- 상한은 최악의 경우와 다르다. 빅오 표기법은 정확하게 쓰기에는 너무 길고 복잡한 함수를 적당히 정확하게 표현하는 것이다.
로무토 파티션(Lomuto Partition)
- 퀵 정렬(Quick Sort)시, 피벗을 정할 때 가장 우측을 택하는 가장 단순한 피벗 선택 방식이다.
파이썬 정수형
- C언어와 달리 파이썬은 int의 범위를 넘어서는 정수형 데이터가 들어오면 오버플로우가 발생하는 것이 아니라 자동으로 long 타입으로 변경된다. 그래서 long 타입 선언없이 파이썬은 정수형 자료형으로 int만 가지고 있다.
파이썬 bool 타입
- bool은 엄밀히 따지면 논리 자료형이지만 파이썬에서는 내부적으로 1과 0으로 처리되는 int의 서브 클래스이다.
임의 정밀도
- 임의 정밀도 정수형이란 무제한 자릿수를 제공하는 정수형을 말한다. 정수를 숫자의 배열로 간주하고 자릿수 단위로 쪼개어 배열 형태로 표현한다.
원시 타입
- 메모리에 정확하게 타입 크기만큼의 공간을 할당하고 그 공간을 오로지 값으로 채워넣는다.
- C언어는 원시 타입만을 제공하며 JAVA는 원시타입과 객체를 동시에 제공한다.
- 파이썬은 애초에 편리한 기능 제공이 우선순위 이므로 느린 속도와 더 많은 메모리를 차지하더라도 다양한 기능을 제공하는 객체만 제공하고 원시 타입은 지원하지 않는다.
가변 객체(mutable object) vs 불변 객체(immutable object)
클래스 | 불변 객체 |
bool | O |
int | O |
float | O |
list | X |
tuple | O |
str | O |
set | X |
dict | X |
is vs ==
- 파이썬의 비교 연산자 중 is와 ==가 있다.
- is : id() 값을 비교하는 함수이다. None은 널(null)로서 값 자체가 정의되어 있지 않으므로 ==로 비교 불가능하다.
- == : 값을 비교하는 연산자이다.
'알고리즘 학습 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글
[파이썬 알고리즘 인터뷰] - 7장 (배열) (0) | 2020.11.18 |
---|---|
[파이썬 알고리즘 인터뷰] - 6장 (문자열 조작) (0) | 2020.11.12 |
[파이썬 알고리즘 인터뷰] - 5장 (리스트, 딕셔너리) (0) | 2020.11.12 |
[파이썬 알고리즘 인터뷰] - 3장 (파이썬) (0) | 2020.11.06 |
[파이썬 알고리즘 인터뷰] - 2장 프로그래밍 언어 (0) | 2020.11.05 |
- Total
- Today
- Yesterday
- 미로 탐색#백준알고리즘#Python
- 리모컨#완전탐색#BOJ#Python
- 종이자르기#분할정복#BOJ#Python
- django
- 텀 프로젝트#백준알고리즘#Python
- 쿼드트리#BOJ#분할정복#Python
- 배열합치기#분할정복#BOJ#Python
- 섬의개수#백준알고리즘#Python
- Distinct#Codility#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 랜선자르기#이분탐색#BOJ#Python
- 반복수열#백준알고리즘#Python
- 토마토#백준알고리즘#Python
- 나무자르기#BOJ#이분탐색#Python
- 터틀비치#리콘#xbox#controller
- django#slicing
- 병든 나이트#BOJ#탐욕법#Python
- 백준 알고리즘#BackTracking
- Brackets#Stacks and Queues#Codility#Python
- 공유기 설치#BOJ#이분탐색#Python
- PassingCars#Codility#Python
- Swift#Tuples#Range
- Triangle#Sorting#Codility#Python
- 날짜 계산#BOJ#완전탐색#Python
- 순열사이클#BOJ#Python
- API#lazy#
- filter#isalnum#lower
- N으로 표현#DP#Programmers#Python
- 암호코드#dp#BOJ#Python
- 파이썬알고리즘인터뷰#4장
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |