함수 an + b가 O (n ^ 2)와 Θ (n)에 속한다는 진술을 설명해주십시오.


12

선형 함수가 있다고 가정 해 봅시다. f(n)= an+b이 함수가 O (n 2 )에 속한다는 것을 증명하는 가장 좋은 방법은 무엇 Θ(n)입니까?

여기서는 수학적으로 엄격 할 필요가 없습니다. 프로그래머 답변이 필요합니다. 논리적으로 설명하는 방법.

이것이 바로 수학 Q & A에 질문을 게시하지 않은 대신 프로그래머 Q & A에 게시 한 이유입니다.


2
@EmmadKareem 문헌에서 종종 Big O 표기법은 기본적으로 Θ (n) 인 꽉 찬 경계를 나타 내기 위해 자주 사용됩니다. Big O는 실제로 상한입니다.
Geek

1
@EmmadKareem "O (n)의 상한은 n * n이 아닙니다.", O (n)의 상한은 없습니다. O (n) 자체는 상한을 정의합니다. 실제로 c> 0 (예 : c = 1) 및 x0 (예 : x0 = 5)이 존재하기 때문에 조건을 만족하는 함수 집합을 포함 할 수 있습니다. f (x) ∈ O (g (x)) ) <x> x0 일 때마다 <cg (x).
Geek

2
@EmmadKareem 실제로 O (n) \ subset O (n ^ 2) \ subset O (n ^ 3) 등 따라서 \ subset의 전이성에 의해 f \ in O (n ^ 2)입니다. \ subset은 \ subseteq가 아닙니다.
scarfridge

6
"프로그래머가 대답해야합니다. 설명하는 논리적 방법이 있습니다." - "논리적"을 어떻게 정의합니까? 수학은 논리적입니다. 엄격한 생각보다 작은 것은 잘못 되었습니다. 주제를 설명해 볼 수는 있지만 (그렇지 않으면 어려운) 수학을 소화하지 않으면 실제로 얻을 수는 없습니다.
Tamás Szelei

2
@ 괴짜 : 당신은 수학 을 의미하는 것 같아요 ? cs.SE 도 좋은 주소입니다.
Raphael

답변:


20

Big Oh 표기법 (O, Theta, Omega)은 기능의 성장률에 관한 것입니다.

알고리즘을 구현할 때 데이터 집합을 늘릴 때 런타임이 어떻게 변경되는지 특정 특성이 있습니다. 이제 알고리즘을 최적화하여 100 배 더 빠르게 실행되도록 할 수 있습니다. 물론 이것은 훌륭하지만 본질적으로 여전히 동일한 알고리즘입니다. 마찬가지로, 몇 년 안에 컴퓨터는 오늘날보다 두 배 빠릅니다.

Landau 표기법은 이러한 상수 요소를 추상화합니다. 알고리즘 f이 다른 알고리즘보다 항상 두 배 빠르다 는 것은 신경 쓰지 않습니다 g. 어쩌면 g4 배 빠르게 실행되도록 최적화하거나 대신 더 빠른 하드웨어를 구입할 수 있습니다. 이 관점에서 보면 "동일하다"고 말할 수 있습니다. (실제로 상수 요소를 무시할 수 있다고 말할 수는 없습니다.)

Big oh는 상한을 지정하며 <=관계 와 유사합니다 .

당신은 그것이 1 < 2사실 이라는 것에 동의 할 것입니다. 그것은 1다른 숫자보다 작을 수 없다는 것을 의미합니까 ? 확실히. 보다 큰 수의 숫자가 있습니다 1.

성장률도 비슷합니다. O(n)선형으로 (또는 더 느리게) 성장하는 모든 기능 세트를 나타냅니다. O(n^2)반면에 2 차 적분 (또는 느리게)으로 증가하는 모든 함수를 나타냅니다. 선형 함수가 2 차 함수보다 느리게 성장한다는 데 동의 할 것입니다.

이것이 함수가 둘 이상의 "Big-oh"클래스에있을 수있는 이유입니다.

다음은 여러 기능을 제약다음 과 비교 한 것입니다 . (Knuth 's Concrete 수학)

성장률 비교

왼쪽에서 오른쪽으로 기능이 더 빨리 커집니다.

또한 여기에 이미지 설명을 입력하십시오2> 1이므로 n ^ 2가 n ^ 1보다 빠르게 커짐을 의미합니다.

정의

정의 오메가

"f는 g만큼 빠르거나 똑같이 빠르게 자랍니다."

고화질 아

"f는 g만큼 느리게 또는 똑같이 빠르게 자랍니다."

정의 세타

위의 두 가지의 조합. 이 함수는 다음 f과 같이 "똑같이 빠르게"커집니다 g. 동등성 관계입니다.

해석

이제 두 개의 알고리즘을 가지고 있다고 가정 해 봅시다 f하고 g.

오메가

가정 f는 g의 세타에 있지 않다, g의 오메가에서 f어떤 예산을 중요 수단, 당신은 당신의 시스템에 추가 할 수있는 파워 컴퓨팅의 정수를 양이 없습니다 f항상 빨리로 실행됩니다 g.

큰 오

가정 f는 g의 세타에 있지 않다, g의 Big Oh에서 f충분한 데이터가있는 경우, 있음을 의미 f항상보다 빠른 실행되지 않습니다 g상관없이 당신이 당신의 시스템에 추가 얼마나 많은 컴퓨팅 파워는.

증명

실제로이를 증명하려는 경우 사용자의 기능이 필요한 조건을 충족한다는 Landau 표기법의 정의를 사용하여 표시해야합니다.

당신이 값을 찾을 필요가 그래서 c, d, n_0조건은 보유하고있다.

하한에 대한 방법은 다음과 c같습니다.

증명

내가 완벽하게 괜찮은 c것보다 작은 것으로 임의로 정의한다는 것을 인식하는 것이 중요 a-1합니다. Theta (g)의 정의는 "이 존재합니다 c" 라고 말합니다 . 0보다 크면 아무 값이나 될 수 있습니다. ( a양의 실수 이면 a - 1실제로 음수 일 수 있으므로 증거를 약간 변경해야합니다. )

( a긍정적 이라고 가정 합니다. 그렇지 않으면 함수는의 큰 값에 대해 항상 음수 n이므로 런타임을 나타내는 함수에는 의미가 없습니다.)

상한에 대해 시도해 볼 수 있습니다. 매우 비슷합니다. 당신이 방법을 모른다면, 나는 당신을위한 증거를 제공 할 수 있습니다.

힌트 :로 시작 d > a + 1

주의

잘못된 방향으로 증명하지 않는 것이 중요합니다. (an + b)가 O (n)에 있다고 가정하고 원하는 것을 증명하지 않은 경우. 당신은 당신의 모든 단계가 모두 길을 갈 대신, 즉 있는지 확인해야합니다 =>있는 당신 <=>.


2
그게 다야. 수학 때문에 너무 나쁜 사람들이 놀라서 실제로는 매우 간단합니다.
Tamás Szelei

질문 상태 : "나는 여기에 수학적인 엄격함이 필요하지 않습니다 나는 프로그래머 응답 ...이 필요합니다." 표기법이 질문에 대한 좋은 맞는처럼 보이지 않는이 답변에 사용을
모기

1
@ gnat 흠, 질문이 한 시점에서 "증명"되었다고 생각했습니다. 어쨌든, 나는 수학적 정의에 대한 해석을 추가했습니다.
phant0m

@ phant0m 좋은 답변입니다. 정확히 내가 찾던 것. 원래의 질문에서 "수학"이 구체적으로 요구되지는 않았지만 답안의 수학은 더 견고 해졌다. 엄청 고마워.
Geek

@ ,, 당신이 좋아서 기뻐요. 더 이상 질문이 있으시면 언제든지 문의하십시오. 답변을 명확하게 / 확장 할 수 있습니다.
phant0m

5

다항식을 다룰 때는 다항식의 정도만 신경 씁니다. 즉 an + b, 당신은에 대해서만 관심이 n있습니다. 만약 그렇다면 an^3 + bn^2 + cn + d, 당신은 단지 걱정할 것 n^3입니다.

따라서 차수 d 의 다항식 은 항상입니다 Θ(n^d). 단순한.

이제 우리는 Θ와 O의 차이에 대해 이야기해야합니다. 본질적으로, ==그리고 <=각각 과 같은 차이 입니다. 그래서 Θ(n)그것은 수단 이다 의 일정 비율 내에서 항상 n. O(n)는 항상 상수 n또는 이하의 요소 내에 있음을 의미합니다 n.

이 방법은 어떤 기능을하는 것이 Θ(s)어떤 위해가 s도 될 것이다 O(s). 함수가있는 경우 또한, Θ(s)그리고 s항상 적은 다른 기능보다 t, 그 기능에 O(t)있지만 Θ(t).

완전성을 위해 또한 있습니다 Ω(n). 경우 Θ대표 ==O대표 <=, Ω나타냅니다 >=. 그래서 an + b에서이다 Ω(1), Θ(n)하고 O(n^2).

앞서 말했듯이, 클래스 다항식이 무엇인지 알아내는 것은 정말 쉽습니다. 정도를 보면됩니다. 작업하기 쉬운 다른 기능도 있습니다.

어떤 형태의 함수 a^bn임의 용 ab에있다 Θ(a^n). 어떤 가치를 위해 c >= a, 그들은 안에 O(c^n)있습니다. 모든 다항식은 안에 O(2^n)있습니다. 본질적으로 이것은 지수 함수가 항상 다항식을 능가하고 지수 함수의 기초가 중요하다는 것을 말합니다.

대수는 반대입니다. 하나를 들어, log_b nΘ(log n)어떤을 위해 b. 이는 밑이 로그에 중요하지 않음을 의미합니다. 대수에서 서로 다른 염기 간을 전환하는 데 상수를 곱하기 때문입니다. 대수 함수도 있습니다. O(n)즉, 대수 함수는 다항식보다 작습니다 (적어도 1도).

이러한 기능의 합계를 고려할 때 가장 큰 기능이 "승리"됩니다. 그래서 n + log nΘ(n)때문에 n용어가 지배하는 log n용어. 곱셈이 더 복잡합니다. CS를 들어, 당신이 알아야 할 유일한 것은 즉 nlog n사이 nn^2.


1
꽤 좋아요 내 기억에 따라 위의 설명은 클래식 알고리즘 디자인 매뉴얼 과 비슷합니다.
gnat

1
@Tikhlon의 멋진 글쓰기 +1. 그러나 내가 받아 들인 것은 훨씬 좋았습니다.
Geek

-2

많은 수학을 사용하지 않고 함수 f (n) = an + b를 취하고 모든 상수를 삭제하므로이 f (n) = n과 같은 식으로 응답 QED로 가장 높은 "n"을 얻습니다. Θ (n)

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