상한 및 하한의 "올바른"정의는 무엇입니까?


19

하자 f(n) 이 될 크기의 입력에 문제시 실행되는 최악의 경우 n . 우리는이 문제 고정함으로써 조금 이상한합시다 f(n)=n2 에 대한 n=2k 이지만 f(n)=n 에 대한 n=2k+1 .

  1. 그렇다면 문제의 하한은 무엇입니까? 내가 이해 한 방식은 하한입니다 f(n). 그러나 우리는 f(n)=Ω(n2) 가 상수 k , 이 존재 n0하여 모든 n>n0 , 가 존재 함을 의미하며 f(n)>kn2, 이는 사실이 아닙니다. 따라서 우리는 오직 f ( n ) = Ω ( n ) 이라고 말할 수있는 것 같습니다f(n)=Ω(n). 그러나 일반적으로 문제의 하한이 Ω(n2) .

  2. 라고 가정 g(n)=Ω(n2) , 정수가 있는지 수단 k , n0 이되도록 모든 n>n0 , g(n)>kn2 . 또한 문제가 실행 시간 이라고 가정하자 g(n). 우리는 모든 소수를 위해이 문제를 줄일 수있는 경우 n (동일한 입력 크기) 또 다른 문제로, 우리는 다른 문제의 실행 시간이 낮기의 결합 말할 수 Ω(n2) ?


12
이것이 수학자들이 림 수프와 림 정보를 사용하는 이유입니다.
Peter Shor

1
그래서 나는 그 차이점을 이해한다고 생각합니다. 저는 포스트 사람들이 오메가를 무한정 자주 이해한다고 생각합니다. 그러나 명시 적으로 구별하고 싶을 때 확장 이외의 다른 표기법이 있습니까?
웨이 유

3
Kg(N)KN2LIM INFg(N)
lim supg(n)n2k
kg(n)kn2g(n)kn2n
lim infg(n)n2k
g(n)kn2n
 

12
@Wei : 대부분의 복잡한 이론가에게 (아래 Lance 참조), 함수는 θ (n ^ 2)입니다. 대부분의 알고리즘 (Knuth 또는 CLRS 참조)에게 함수는 Ο (n ^ 2) 및 Ω (n)입니다. 두 표기법은 하위 커뮤니티에서 거의 표준이지만 완전히 표준은 아닙니다. 상황을 악화시키기 위해이 두 하위 커뮤니티는 크게 겹칩니다! 따라서 어떤 표기법을 사용하는지 중요하다면 어떤 표기법을 사용하고 있는지 명시 해야합니다 . (다행히도 거의 문제가되지 않습니다.)
Jeffε

2
@ 제프. 귀하의 의견을 답변으로 게시해야한다고 생각합니다.
chazisop

답변:


13

의 올바른 정의는 이 존재 하여 무한히 많은 , 입니다. 하한에 대한 무한 정의는 문제를 처리하고 실제로 사용하는 방식입니다.k > 0 n f ( n ) k n 2f(n)=Ω(n2)k>0nf(n)kn2

나는 2005 년에이 을 올렸습니다.

일부 교과서는이 정의를 올바르게 얻지 만 일부는 그렇지 않습니다.


14
Knuth는 귀하의 의견에 동의하지 않습니다 : portal.acm.org/citation.cfm?id=1008329
Jeffε

4
CLRS와 Wikipedia도 동의하지 않습니다. 종종 정의는 주목할만한 대안이지만 덜 널리 사용되는 것 같습니다.
Anonymous

예외의 설정이 측정 0 일 때 나는이 정의가 모두 동의 생각
카터 Tazio Schonwald

2
"무한 빈도"정의의 문제점은 일반적으로 "무한도 자주"를 배제하지 않는다는 것입니다. 따라서 우리는이 정의 뿐만 아니라 f ( n ) = o ( n + 1 ) 이라는 끔찍한 결과를 얻습니다 . 여기서 Ωo 는 어떤 의미에서 엄격한 순서입니다. 나는 이것을 정말로 싫어한다. 적어도 @Carter의 측정 0 예외 제안은 약간 덜 끔찍하지만 여전히 평소보다 더 나은 순서를 허용합니다. f(n)=Ω(n2) f(n)=o(n+1)Ωo
안드라 살 라몬

2
@Jukka : 아니, 난 잘못 사용하고있어 여기에. 힌트 로 o 대신 O 를 사용하도록 내 인수를 수정해야합니다 . 따라서 o 또는 O 를 사용하지 않고 실제 이의 제기를 다시 설명하겠습니다 . "무한 종종"로, 하나 이상 갖는 것을 N = Ω ( F ( N ) ) , F ( N ) = Ω ( N 2 ) , 또 N Ω ( N 2 ) . 따라서 Ω 은 사전 주문조차하지 않습니다.oOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
András Salamon

4

크 누스 의 정의 만 주장 할 수 . 알다시피, 이것은 직관적이지 않으며 Vitányi 및 Meertens 함수 "wild"에 대해 발생합니다 . 그들은 정의를 제안합니다f(n)Ω(n)

Ω(f(n))={gδ>0:n0>0:n>n0:g(n)δf(n)}.

(이것은 Lance의 정의와 동일합니다.)이 정의로 .f(n)Ω(n2)


2

나는 가장 널리 사용되는 것을 알지 못하지만 (가장 컴퓨터 과학을위한) 가장 오래된 사용법을 알고 있다고 생각합니다.

Hartmanis & Stearns의 "1965 년 계산 알고리즘의 복잡성"에서 Corollary 2.1은 다음과 같습니다.

경우 T는 시간 기능이되도록 INF N T ( N )UT,SUSTinfnT(n)U(n)0SUST

여기서 에서 계산 가능한 모든 문제의 복잡도 종류 인 O ( K ( n은 ) ) . T (n)은 일부 정수 k 와 모든 nT ( n ) T ( n + 1 )에 대해 T ( n ) n / k 를 준수해야 하지만 시간을 구성 할 필요는 없습니다.SKO(K(n))T(n)n/kknT(n)T(n+1)

함수는 대한 첫 번째 규칙을 따르지만 두 번째 규칙을 따르지 않습니다.k=1

Corollary 2.2는 위의 역수이며 한계 최고를 사용하지만 여전히 이러한 요구 사항이 있습니다. 알고리즘이 수년에 걸쳐 복잡 해짐에 따라 요구 사항이 완화되었을 수 있습니다.


2

두 가지를 구별해야한다고 생각합니다.

  • 함수의 하한
  • 문제에 대한 하한 (알고리즘)

함수의 경우, 순서를 고칠 때 하한 / 상한 의 정의가 따릅니다. 순서 관계가 점근 적 전공 인 경우 (상수 요인 무시)

fg:c,nm>n. f(x)cg(x)

정의는 Ω 의 일반적인 정의입니다 . 둘 다 조합과 같은 다른 영역에서 광범위하게 사용됩니다.OΩ

그러나 문제 (알고리즘)에 대한 하한에 대해 이야기 할 때, 실제로 말하고 싶은 것은 문제를 해결하기 위해 알고리즘을 실행하기 위해 특정 양의 자원이 필요하다는 것입니다. 복잡성 클래스는 종종 와 같은 함수에 의해 매개 변수화되며 , 우리는 문제가 함수에 의해 하 한계라고 간단하게 말하지만 이는 멋진 함수에 대해서만 작동합니다 (예 : 알고리즘의 실행 시간은 모노톤 등). 우리가 이러한 경우에 말하고 싶은 것은 우리가 필요로하는 것입니다 n은 2 보다, 즉 적은 문제를 해결하기 위해 시간을 실행 N 2Time(t(n))n2n2실행 시간이 충분하지 않아 알고리즘의 실행 시간이 이 아니라는 Lance의 정의가됩니다 .o(t(n))

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