선형 함수가 있다고 가정 해 봅시다. f(n)= an+b
이 함수가 O (n 2 )에 속한다는 것을 증명하는 가장 좋은 방법은 무엇 Θ(n)
입니까?
여기서는 수학적으로 엄격 할 필요가 없습니다. 프로그래머 답변이 필요합니다. 논리적으로 설명하는 방법.
이것이 바로 수학 Q & A에 질문을 게시하지 않은 대신 프로그래머 Q & A에 게시 한 이유입니다.
선형 함수가 있다고 가정 해 봅시다. f(n)= an+b
이 함수가 O (n 2 )에 속한다는 것을 증명하는 가장 좋은 방법은 무엇 Θ(n)
입니까?
여기서는 수학적으로 엄격 할 필요가 없습니다. 프로그래머 답변이 필요합니다. 논리적으로 설명하는 방법.
이것이 바로 수학 Q & A에 질문을 게시하지 않은 대신 프로그래머 Q & A에 게시 한 이유입니다.
답변:
Big Oh 표기법 (O, Theta, Omega)은 기능의 성장률에 관한 것입니다.
알고리즘을 구현할 때 데이터 집합을 늘릴 때 런타임이 어떻게 변경되는지 특정 특성이 있습니다. 이제 알고리즘을 최적화하여 100 배 더 빠르게 실행되도록 할 수 있습니다. 물론 이것은 훌륭하지만 본질적으로 여전히 동일한 알고리즘입니다. 마찬가지로, 몇 년 안에 컴퓨터는 오늘날보다 두 배 빠릅니다.
Landau 표기법은 이러한 상수 요소를 추상화합니다. 알고리즘 f
이 다른 알고리즘보다 항상 두 배 빠르다 는 것은 신경 쓰지 않습니다 g
. 어쩌면 g
4 배 빠르게 실행되도록 최적화하거나 대신 더 빠른 하드웨어를 구입할 수 있습니다. 이 관점에서 보면 "동일하다"고 말할 수 있습니다. (실제로 상수 요소를 무시할 수 있다고 말할 수는 없습니다.)
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
.
큰 오
가정 , 충분한 데이터가있는 경우, 있음을 의미 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)에 있다고 가정하고 원하는 것을 증명하지 않은 경우. 당신은 당신의 모든 단계가 모두 길을 갈 대신, 즉 있는지 확인해야합니다 =>
있는 당신 <=>
.
다항식을 다룰 때는 다항식의 정도만 신경 씁니다. 즉 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
임의 용 a
및 b
에있다 Θ(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
사이 n
와 n^2
.