log (n!) = Θ (n · log (n))입니까?


218

나는 log ( n !) = Θ ( n · log ( n )) 을 보여 주어야합니다 .

n n으로 상한을 표시하고 ( n / 2) ( n / 2)로 하한을 표시해야한다는 힌트가 주어졌습니다 . 이것은 나에게 직관적이지 않은 것 같습니다. 왜 그런가요? n nn · log ( n ) 로 변환하는 방법 (즉 방정식의 양변을 로그 하는 방법)을 확실히 볼 수 있지만, 역으로 작동합니다.

이 문제를 해결하는 올바른 방법은 무엇입니까? 재귀 트리를 그려야합니까? 이것에 대해 재귀가 없으므로 가능한 접근 방식처럼 보이지 않습니다.


1
"as n-> ∞"
MartW

2
재미있는 운동 : 비슷한 트릭을 사용하여 고조파 시리즈 1/1 + 1/2 + 1/3 + 1/4 + ...가 무한대로 갈라지는 것을 보여줍니다.
Yoo

10
cs.stackexchange.com에 있지 않아야합니까?
CodyBugstein

5
@CodyBugstein, cs.stackexchange.com은 질문을 받았을 때 다시 존재하지 않았습니다
MrMartin

답변:


303

기억

log(n!) = log(1) + log(2) + ... + log(n-1) + log(n)

당신은에 의해 상한을 얻을 수 있습니다

log(1) + log(2) + ... + log(n) <= log(n) + log(n) + ... + log(n)
                                = n*log(n)

그리고 합계의 전반부를 버리고 비슷한 일을함으로써 하한을 얻을 수 있습니다.

log(1) + ... + log(n/2) + ... + log(n) >= log(n/2) + ... + log(n) 
                                       = log(n/2) + log(n/2+1) + ... + log(n-1) + log(n)
                                       >= log(n/2) + ... + log(n/2)
                                        = n/2 * log(n/2) 

5
이것은 상한에 대한 아주 좋은 증거입니다. log (n!) = log (1) + ... + log (n) <= n log (n) => log (n!) = O (n log n ). 그러나 하한 (그리고 결과적으로 큰 테타)을 증명하기 위해서는 아마도 스털링의 근사치가 필요할 것입니다.
Mehrdad Afshari

33
하한에 대해서는 Sterling의 근사값이 필요하지 않습니다. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = 오메가 (n log n).
Keith Randall

2
@Keith : 아직 얻지 못했습니다. "log (n / 2) + ... + log (n)"의 "..."부분에서 저 (또는 누군가)를 위해 몇 가지 용어를 더 추가 할 수 있습니까? 감사!
j_random_hacker

6
@j_random_hacker : log(n/2) + log(n/2 + 1) + ... + log(n - 1) + log(n)(의 용어 중 절반 이상 log(n!)). 실제로, 나는 단지 그 질문을 읽고 그 단서가 그 질문에 언급되어 있음을 보았다. 기본적으로 (n/2)^(n/2) <= n! <= n^n=> log((n/2)^(n/2))<=log(n!)<=log(n^n)=>Θ(n/2 * log(n/2))<=log(n!)<=Θ(n*log(n))
Mehrdad Afshari

4
이 설명은 허용 대답과 비슷하지만 좀 더 자세한 내용이 mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm
gayavat을

40

나는 이것이 받아 들일 수있는 대답이있는 매우 오래된 질문이라는 것을 알고 있지만 실제로는 힌트에서 제안한 접근법을 사용하지 않습니다.

꽤 간단한 주장입니다.

n!(= 1 * 2 * 3 * ... * n)은 n각각보다 작거나 같은 숫자 의 곱입니다 n. 그러므로 그것은 n모두 같은 수 의 곱보다 작습니다 n. 즉 n^n.

제품 n/2에서 숫자의 절반 (즉, 숫자) n!이보다 크거나 같습니다 n/2. 그러므로 그들의 곱은 n/2모두 같은 곱의 곱보다 큽니다 n/2. 즉 (n/2)^(n/2).

결과를 설정하기 위해 전체 로그를 가져옵니다.


9
이것은 실제로 허용 된 답변의 로그 버전과 동일하지만 이전 대신 로그를 가져옵니다. (힌트를 더 명확하게 사용합니다)
hugomg

14

여기에 이미지 설명을 입력하십시오

죄송합니다. stackoverflow에서 LaTeX 구문을 사용하는 방법을 모르겠습니다.


1
이것은 훌륭한 설명입니다! 7 단계까지이 작업을 수행 할 수 있지만 7 단계와 8 단계 사이에 발생하는
매스 매직을

3
@ Z3d4s 7 단계의 인수는 기본적으로 오른쪽의 첫 번째 항이 지배적 인 항이고 따라서 log (n!)은 n log (n)에 의해 근사 될 수 있거나 n log (n) 차수라는 것입니다. 이는 큰 O 표기법 O (n * log (n))으로 표시됩니다.
random9

1
@ Z3d4s 7-8 변환 단계에서 n logn == log (n ^ n)이라고 말하고 여기에 경계를 표시하기 위해 첫 번째 항이 항상 큰 값을 확인할 수있는 두 번째 항보다 크다고 말할 수 있습니다. 큰 O 복잡성을 표현하기 위해 우리는 항상 모든 것을 지배하는 항목을 취할 것입니다. 따라서 n logn은 big-O 시간에 기여합니다.
Shiv Prakash


7

하한의 경우

lg(n!) = lg(n)+lg(n-1)+...+lg(n/2)+...+lg2+lg1
       >= lg(n/2)+lg(n/2)+...+lg(n/2)+ ((n-1)/2) lg 2 (leave last term lg1(=0); replace first n/2 terms as lg(n/2); replace last (n-1)/2 terms as lg2 which will make cancellation easier later)
       = n/2 lg(n/2) + (n/2) lg 2 - 1/2 lg 2
       = n/2 lg n - (n/2)(lg 2) + n/2 - 1/2
       = n/2 lg n - 1/2

lg (n!)> = (1/2) (n lg n-1)

두 경계를 결합 :

1/2 (n lg n-1) <= lg (n!) <= n lg n

(1/2)보다 큰 하한 상수를 선택하면 브래킷 내부의 -1을 보상 할 수 있습니다.

따라서 lg (n!) = Theta (n lg n)


2
이 확장 파생은 "something"> = n / 2 * lg (n / 2)가 이전 주석 중 하나에서 언급 된 omega (n lg n)과 같지 않기 때문에 필요합니다.
Vivek Anand Sampath

하한값을 찾으려고 할 때 "(1/2)보다 일정한 SMALLER"로 표시되어야합니다. (1/2)보다 작은 상수 c는 결국 충분히 큰 n에 대해 c n logn <= (1/2) n * logn- (1/2) n을 만듭니다.
Matthew

3

Mick Sharpe가 당신을 떠난 곳에서 더 당신을 돕기 :

탈선은 매우 간단합니다. http://en.wikipedia.org/wiki/Logarithm- > Group Theory를 참조하십시오 .

log (n!) = log (n * (n-1) * (n-2) * ... * 2 * 1) = log (n) + log (n-1) + ... + log (2 ) + 로그 (1)

n을 무한히 큰 것으로 생각하십시오 . 무한 빼기 1이란 무엇입니까? 또는 빼기 2? 기타

log (inf) + log (inf) + log (inf) + ... = inf * log (inf)

그런 다음 inf 를 n으로 생각하십시오 .



1

도움이 될 수 있습니다.

e ln (x) = x

(l m ) n = l m * n

3
실제로, 그것은 틀 렸습니다 : 1 ^ (m ^ n)! = 1 ^ (m n) 반드시 (1 ^ m) ^ n = 1 ^ (m n)
Pindatjuh

위의 주석에서 1 대신 L을 의미합니다.
Pindatjuh

그는 1 ^ (m ^ n)을 쓰지 않았습니다. (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein : 문제를 해결하기 위해 편집 한 내용이 있습니다. 몇 년 후 오류가 기록에 숨겨져 있다고 언급 한 경우
Ben Voigt

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