Table of Contents
Big-O 표기는 무엇입니까?
Big-O 표기는 컴퓨터 과학에서 사용되는 수학 프레임 워크로 worst-case performance]의 알고리즘을 입력 크기로 성장합니다. 형태적으로, 함수의 성장률에 상한 경계를 부여합니다. 입력 크기 ]n]], 표기 O ]f(LTn]]]])[FLTn]]] ]]]]의 기본을 초과하는 경우, 이 중점은 여러 가지를 초과하지 않습니다.
Big-O는 코딩 인터뷰에서 효율성에 대해 가장 일반적인 도구입니다. 인터뷰자들은 가능한 한, 더 효율적인 대안을 제안 할 때, 솔루션의 성능을 단화 할 것으로 예상됩니다. Big-O의 견고한 파악은 시간과 공간 사이에 미립자 거래가 가능하고 실제 데이터를 처리하는 데 중요한 역할을하는 기술에 대해 중요하게 생각합니다.
왜 빅오 매트러가 코딩 인터뷰에서
면접관은 작업 솔루션을 생산할 수 있지만 문제 해결 과정을 평가하는 경우 볼 수 없습니다. Big-O는 평가에 대한 중앙 역할을합니다. 접근의 시간 복잡성을 설명 할 때, 당신은 trivial를 표시하는 문제조차도 성능 제약의 인식을 입증합니다. 또한 많은 면접 질문은 네이티브 솔루션이 큰 입력을 위해 너무 느리게 설계됩니다. 적절한 대답은 종종 O (n2)에서 O (n2)에서 O (n2) 또는 O (n)로 복잡성을 줄이기 위해 얼마나 이해해야합니다.
또한 Big-O 쇼에 대해 논의하면 다른 전략 사이에 거래가 있는지 할 수 있습니다. 예를 들어, 여분의 메모리 (공간)을 사용하여 런타임 (시간)을 가속화하는 고전적인 인터뷰 패턴입니다. 해시 테이블 수율 O (1) 조회를 설명 할 수있을 때 목록이 O (n)이 기계적으로 문제를 해결하는 후보자로부터 출발 할 수 있습니다.
일반적인 시간 복잡성 예제와 설명
O(1) – 일정한 시간
실행 시간이 입력 크기에 따라 달라지는 경우 알고리즘은 일정한 시간에 실행됩니다. Example:] 배열에 인덱스에 의해 요소를 액세스. 배열이 10 또는 10 백만 요소가 있는 경우, 조회는 기계 단계의 동일한 수를 걸립니다.
def get_first(arr):
return arr[0] # O(1)
O(log n) – 논리 시간
논리적으로 입력 크기를 반발 할 때 논리 복잡성 발생. 예 :] 정렬 된 배열에 바이너리 검색. 각 반복 장애 절반 나머지 요소, 그래서 작업의 수는 log2(n)에 비례입니다.
def binary_search(arr, target):
left, right = 0, len(arr)-1
while left <= right:
mid = (left+right)//2
if arr[mid] == target: return mid
elif arr[mid] < target: left = mid+1
else: right = mid-1
return -1 # O(log n)
O(n) – 선형 시간
선형 시간 알고리즘은 입력을 통해 단일 패스를 수행합니다. Example:] 언스테이션된 목록에서 최대 값을 찾습니다. 한번마다 각 요소를 검사해야 합니다.
def find_max(arr):
max_val = arr[0]
for i in arr[1:]:
if i > max_val: max_val = i
return max_val # O(n)
O(n log n) – 로그 라인어 시간
이 복잡성은 병합, 힙소, 그리고 많은 언어의 표준 라이브러리 종류와 같은 효율적인 정렬 알고리즘에 대한 전형적인 것입니다. 그것은 반브 (로그 n 레벨)으로 입력을 분할하고 각 레벨 (레벨당 작업)에서 선형 작업을 수행하기 위해 발생한다.
def mergesort(arr):
if len(arr) <= 1: return arr
mid = len(arr)//2
left = mergesort(arr[:mid])
right = mergesort(arr[mid:])
return merge(left, right) # O(n log n)
O(n2) – 쿼드레이틱 시간
Quadratic 시간은 입력을 통해 배열 된 루프가있을 때 나타납니다. Example:] 버블 정렬, 외부 루프가 n 번 실행하고 내부 루프가 실행 (n - i) 시간, n (n-1)/2 ≈ n2 비교에서 결과.
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr)-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j] # O(n²)
O(2^n) – 노출 시간
각 단계가 가능성을 두 배로 늘릴 때 노출되는 복잡성. 예금:]예금 없이 Fibonacci 숫자의 비열한 반복적인 계산. 재발 트리는 exponentially, n > 30 또는 이렇게 이 접근을 위해 실제적으로 성장합니다.
def fib(n):
if n <= 1: return n
return fib(n-1) + fib(n-2) # O(2^n)
Algorithm의 복잡성을 분석하는 방법
마스터링 빅오 분석은 체계적인 접근을 요구합니다. 인터뷰에서 알고리즘을 만날 때 이러한 단계를 따르십시오.
- 입력 크기를 식별 – 일반적으로 ]n]] 단일 입력에 대한, 또는 여러 입력에 대한 별도의 변수 (예를 들어, n]]] 및 m).
- 지배적인 조작 – 가장 런타임에 기여하는 작업(예: 분류에 대한 비교, 검색에 대한 액세스 배열).
- ] 동작이 실행하는 몇 번 ] ]n]의 함수로 ]를 실행하는 방법.
- Drop 상수 인자와 낮은 주문 조건 – 가장 빠르게 성장하는 기간만 유지. 예를 들어, 3n2 + 5n + 1이 O(n2)가 됩니다.
- 더 최악의 경우 – 명시되지 않는 한, 대부분의 작업을 일으키는 입력을 가정한다. 많은 문제를 위해 이것은 정의된 케이스이다.
공간 복잡성을 위해 메모리 사용과 동일한 논리를 적용합니다. 실행 중 입력 자체 만 추가 저장을 계산하지 마십시오.
일반적인 Pitfalls 및 Misconceptions
최고의, 평균 및 최악의 사례를 혼란
Big-O는 항상 worst-case 을 바꿉니다. 그러나 평균 케이스 복잡성 (예, 빠른 평균 O(n log n) 하지만 최악의 경우 O(n2))에 대해 논의할 준비가되어야 합니다. 면접관은 서로 다른 결과를 설명하고 실제 성능을 설명할 수 있는 후보를 평가합니다.
일정한 요인을 무시
Big-O는 일정을 무시하지만, 연습 일정은 중요. 거대한 상수가있는 O (n) 알고리즘은 O (n2)보다 작을 수 있습니다 n]. 인터뷰에서, 당신은 상수도를 이해하지만 asymptotic 성능에 초점을 언급.
Analyze Space에 대한 추가
Time complexity는 종종 기본 초점이지만 공간 복잡성은 똑같이 중요합니다. 많은 인터뷰자는 직접 물어 봅시다. "공간 복잡성이란 무엇입니까?" 항상 두 가지를 준비하고 입력 크기로 여분의 메모리 스케일을 지 여부를주의하거나 일정하게 유지하십시오.
모든 반복을 모을 O(n)
두 개의 배열 루프는 항상 O (n2)를 의미하지 않습니다. 내부 루프가 일정한 수의 시간을 실행하면 (예를 들어, 고정 알파벳 크기 이상), 총 O (n)입니다. 정확하게 경계를 분석합니다.
인터뷰의 날에 대한 실용적인 팁
- brute-force 솔루션과 함께 시작하면 복잡성을 주목합니다. 그런 다음 최적화를 제안하고 각 변경이 Big-O에 영향을 미치는지 논의하십시오.
- 통신 도구로 큰 O 표기를 사용합니다. 예를 들어: “내 현재 솔루션은 모든 쌍을 통해 배열된 루프로 인해 O(n log n)를 우선 정렬하여 O(n log n)로 줄 수 있습니다.
- 코드를 분석할 때, 라인으로 걸어가십시오. 계산에 추가하는 설명 (예를 들어, 루프, 반복 통화).
- 일반적인 가족 나무와 함께 편안한: 입력 → O (n), 입력 → O (log n) 또는 O (n 로그 n)를 분할 재발, 크게 지점을 재발 → O (2^n).
- Big-O는 하나의 메트릭만 알고 있습니다. 코드 읽을 수 있는, 유지성 및 입력 제약 (예를 들어, 작은 n은 더 간단한 O(n2) 솔루션을 선호할 수 있습니다)와 같은 거래 오프를 토론하십시오.
Deeper Understanding에 대한 외부 리소스
지식을 고집하기 위해, 이러한 참조를 탐구:
- Wikipedia: Big O Notation – 종합적인 수학 개요.
- Khan Academy: Algorithms Course – 복잡성 분석에 대한 대화식 수업.
- Big-O Cheat Sheet] – 일반적인 데이터 구조와 알고리즘에 대한 빠른 참조.
관련 기사
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.