시간 복잡도가 O ( mn ) 인 함수가 있는데 , 여기서 m 과 n 이 두 입력의 크기 인 경우, 시간 복잡도를 "선형"( m 과 n 모두에서 선형이므로 ) 또는 "2 차"( 두 가지 크기의 제품이기 때문에)? 또는 다른 것?
O (m + n)도 선형이지만 훨씬 빠르기 때문에 "선형"이라고 부르는 것이 혼란 스럽지만 각 변수에서 개별적으로 선형이기 때문에 "이차"라고 부르는 것도 이상합니다.
시간 복잡도가 O ( mn ) 인 함수가 있는데 , 여기서 m 과 n 이 두 입력의 크기 인 경우, 시간 복잡도를 "선형"( m 과 n 모두에서 선형이므로 ) 또는 "2 차"( 두 가지 크기의 제품이기 때문에)? 또는 다른 것?
O (m + n)도 선형이지만 훨씬 빠르기 때문에 "선형"이라고 부르는 것이 혼란 스럽지만 각 변수에서 개별적으로 선형이기 때문에 "이차"라고 부르는 것도 이상합니다.
답변:
의견의 논의를 설명하기 위해서는 성장을 측정하는 것이 중요합니다.
@Kaveh가 언급했듯이, 은 동시에 선형이 아니지만 하나가 상수이고 다른 하나가 자라면 선형입니다.
반면에 은 선형으로 간주 될 수 있습니다. 직관적으로, 두 배이거나, 두 배이거나, 과 모두 두 배인 경우에도 은 두 배를 초과 할 수 없습니다. 이것은 해당되지 않습니다 . 경우 과 모두 더블 4로 상승 많은 상황에서이 실행 시간 차 간주되는 이유입니다. 몇 단락에서 문자열 일치를 사용하여 이에 대한 예를 제공합니다.m n m n m + n m n m n m n
그러나 일반적으로 Big- 표기법을 사용할 때는 특히 무언가를 참조하여 사용합니다. 우리는 대부분 이론가이기 때문에 일반적으로 문제에 대한 입력의 크기입니다.
예를 들어, 매트릭스 추가를 보자. 두 행렬을 추가하는 데 시간 이 걸립니다 . 그러나 입력의 각 요소는 한 번만 터치되므로 일반적으로 선형이라고합니다. 다시 말해, 입력 값의 크기는 이므로 실행 시간 은 입력 크기에서 선형입니다.O ( m , N ) O ( m , N ) O ( m , N )
이제 문자열 일치를 살펴 봅시다. 즉, 크기가 인 문자열과 크기가 문자열이 주어지고 더 큰 문자열 내에 작은 문자열이 나타나는지 확인하려고합니다. 우리는 순진에서 확인 가능 시간; 이것은 일반적으로 이차로 간주됩니다. 왜? 경우 과 아무것도 설정 될 수 . 그런 다음 실행 시간은 이고 입력 크기는 입니다.N O ( m의 N ) m N m = N O ( m 2 ) 2 m
반면에 Rabin-Karp 알고리즘을 사용하면 평균적으로 시간을 얻 습니다. 입력은 두 문자열로 구성되었으므로 입력 크기는 입니다. 따라서이를 일반적으로 선형이라고합니다.O ( m + n )
요약하자면, 은 일반적으로 입력의 크기가 선형이기 때문에 행렬 곱셈과 같은 것에 대해서는 선형이라고하지만 일반적으로 입력이 작기 때문에 문자열 일치와 같은 것에 대해서는 2 차라고합니다. 적절한 용어는 사용중인 컨텍스트에 따라 다릅니다.