O (mn)는 "선형"또는 "2 차"성장으로 간주됩니까?


24

시간 복잡도가 O ( mn ) 인 함수가 있는데 , 여기서 mn 이 두 입력의 크기 인 경우, 시간 복잡도를 "선형"( mn 모두에서 선형이므로 ) 또는 "2 차"( 두 가지 크기의 제품이기 때문에)? 또는 다른 것?

O (m + n)도 선형이지만 훨씬 빠르기 때문에 "선형"이라고 부르는 것이 혼란 스럽지만 각 변수에서 개별적으로 선형이기 때문에 "이차"라고 부르는 것도 이상합니다.


7
무엇을 선형이라고 말하는 것이 중요합니다 . 예를 들어, 우리가 모서리와 개의 정점 을 갖는 그래프를 가지고 있다면, 은 모서리의 수에서 선형이지만 정점의 수에서 (잠재적으로) 2 차입니다. N O ( m + N )mnO(m+n)
Raphael

3
라파엘의 의견은 바로 그 자리에 있다고 생각합니다. "선형"은 종종 입력의 크기와 관련하여 사용해야합니다. 바꾸는 경우 입력의 크기가 이므로 행렬 은 "선형" 입니다. 만약 당신의 발생에있는 거 검색 에서 문자열 문자열, O (백만) 선형 아니다 --- O (m + n)이 될 것이다. O ( m , N ) O ( m , N ) N m의 O ( m , N ) O ( m + N )m×nO(mn)O(mn)nmO(mn)O(m+n)
SamM

3
@Raphael의 의견에도 동의하지만 동시에 사람들이 특정 시간의 복잡성이 무엇에 대한 언급없이 "선형 적"이라고 말하는 것을 듣는 것은 드문 일이 아닙니다. 그리고 어떤 경우에는 중요하지 않습니다. 예를 들어 O (m + n)은 모든 입력에 대해 선형이므로 SamM이 위에서 한 것처럼 선형 호출에 대해서는 두 번 생각하지 않습니다. 그러나 그것은 의문을 제기합니다.
Mehrdad 2013

3
@Mehrdad :베이스 라인은 "투입기 테이프에서 입력이 이진 문자열로 인코딩되었다고 가정 할 때 입력 크기"라고 생각합니다. 이 입력 크기는 nm 자체 의 함수입니다 . SamM이 좋은 예입니다.
Raphael

1
여러 변수의 랜도 표기법에 대해서는 people.cis.ksu.edu/~rhowell/asymptotic.pdf 를 참조하십시오 .
Jonas Kölker 2013

답변:


18

수학에서 이와 같은 함수를 다중 선 함수 라고 합니다. 그러나 컴퓨터 과학자들은 아마이 용어를 알지 못할 것입니다. 이 기능은 확실히해야 하지 당신이 합리적 중 하나 고려하지 않는 한, 수학이나 컴퓨터 과학에서 하나, 선형라고 및 상수.nmn


과 중 하나를 일정 하게 고려하는 이유는 무엇입니까 ? nmn
user2768

11

의견의 논의를 설명하기 위해서는 성장을 측정하는 것이 중요합니다.

@Kaveh가 언급했듯이, 은 동시에 선형이 아니지만 하나가 상수이고 다른 하나가 자라면 선형입니다.O(mn)

반면에 은 선형으로 간주 될 수 있습니다. 직관적으로, 두 배이거나, 두 배이거나, 과 모두 두 배인 경우에도 은 두 배를 초과 할 수 없습니다. 이것은 해당되지 않습니다 . 경우 과 모두 더블 4로 상승 많은 상황에서이 실행 시간 차 간주되는 이유입니다. 몇 단락에서 문자열 일치를 사용하여 이에 대한 예를 제공합니다.m n m n m + n m n m n m nO(m+n)mnmnm+nmnmnmn

그러나 일반적으로 Big- 표기법을 사용할 때는 특히 무언가를 참조하여 사용합니다. 우리는 대부분 이론가이기 때문에 일반적으로 문제에 대한 입력의 크기입니다.O

예를 들어, 매트릭스 추가를 보자. 두 행렬을 추가하는 데 시간 이 걸립니다 . 그러나 입력의 각 요소는 한 번만 터치되므로 일반적으로 선형이라고합니다. 다시 말해, 입력 값의 크기는 이므로 실행 시간 은 입력 크기에서 선형입니다.O ( m , N ) O ( m , N ) O ( m , N )m×nO(mn)영형()영형()

이제 문자열 일치를 살펴 봅시다. 즉, 크기가 인 문자열과 크기가 문자열이 주어지고 더 큰 문자열 내에 작은 문자열이 나타나는지 확인하려고합니다. 우리는 순진에서 확인 가능 시간; 이것은 일반적으로 이차로 간주됩니다. 왜? 경우 과 아무것도 설정 될 수 . 그런 다음 실행 시간은 이고 입력 크기는 입니다.N O ( m의 N ) m N m = N O ( m 2 ) 2 m영형()=영형(2)2

반면에 Rabin-Karp 알고리즘을 사용하면 평균적으로 시간을 얻 습니다. 입력은 두 문자열로 구성되었으므로 입력 크기는 입니다. 따라서이를 일반적으로 선형이라고합니다.O ( m + n )O(m+n)O(m+n)

요약하자면, 은 일반적으로 입력의 크기가 선형이기 때문에 행렬 곱셈과 같은 것에 대해서는 선형이라고하지만 일반적으로 입력이 작기 때문에 문자열 일치와 같은 것에 대해서는 2 차라고합니다. 적절한 용어는 사용중인 컨텍스트에 따라 다릅니다.O(mn)


8

실행 시간을 로 측정하는 경우 은 의 선형 함수 가 아닙니다 . 과 사이에 관계가 없으면 이 함수는 일반적으로 2 차적 으로 증가 할 수 있습니다 .O ( m의 N ) ( m , N ) m의 N(m,n)O(mn)(m,n)mn

그러나 각각 개별적으로 선형 함수입니다. 즉, 하나를 수정하고 다른 변수의 성장을 보면 다른 변수의 선형 함수입니다.


3

여러 입력 문제의 복잡성을 측정하려면 한 가지 방법은 우세 변수를 찾은 다음 해당 변수를 기반으로 다른 입력을 바인딩하는 것입니다. 이 방법을 사용하면 단일 변수를 기반으로 복잡한 기능을 가질 수 있습니다 .


2
노드와 모서리 수가 많은 경우와 같이 지배적 인 변수가 없을 수 있습니다.
Raphael

0

주어진 언어 와 함수 F 되도록 { | 1 | , | 2 | } F ( | w | ) 각에 대한 당신의 실행 시간을 예상 할 수있는L={w1#w2|wi(Σ{#}),}fmin{|w1|,|w2|}f(|w|)O ( | w 1 || w 2 | ) L O ( f ( | w | ) ( | w |f ( | w | ) ) = O ( f ( | w | ) | w |f ( | w |w=w1#w2LO(|w1||w2|) 을 로 인식하는 알고리즘 .LO(f(|w|)(|w|f(|w|))=O(f(|w|)|w|f(|w|)2)=O(f(|w|)|w|)

즉, 입력의 작은 부분이 전체 입력에 비해 일정하면 선형 시간을 얻습니다. 일차적 인 경우 ( 과 같은 경우) 선형 인 경우 2 차 런타임입니다.O(nlogn)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.