Является ли log (n!) = Θ (n · log (n))?


218

Я должен показать, что log ( n !) = Θ ( n · log ( n )) .

Намек был дан, что я должен показать верхнюю границу с n n и показать нижнюю границу с ( n / 2) ( n / 2) . Это не кажется мне настолько интуитивным. Почему это так? Я определенно могу видеть, как преобразовать n n в n · log ( n ) (т.е. записать обе части уравнения), но это работает в обратном направлении.

Каков будет правильный подход к решению этой проблемы? Должен ли я нарисовать рекурсивное дерево? В этом нет ничего рекурсивного, так что это не похоже на вероятный подход.


1
Вы должны действительно написать это включая «как 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 ). Однако, чтобы доказать нижнюю границу (и, следовательно, биг-тету), вам, вероятно, понадобится приближение Стирлинга.
Мехрдад Афшари

33
Вам не нужно приближение Стерлинга для нижней границы. log (n!) = log (1) + ... + log (n)> = log (n / 2) + ... + log (n)> = n / 2 * log (n / 2) = омега (п лог п).
Кит Рэндалл

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))
Мехрдад Афшари

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

введите описание изображения здесь

Извините, я не знаю, как использовать синтаксис LaTeX в stackoverflow ...


1
Это отличное объяснение! Я мог бы следовать этому до шага 7, но тогда я не могу расшифровать математику, которая происходит между шагами 7 и 8 ... :-(
Z3d4s

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), и для показа здесь границы можно сказать, что первый член всегда больше второго, который вы можете проверить для любых больших значений, и для выражения сложности big-O мы всегда будем брать доминирующий элемент из всех. Таким образом, n logn способствует большому времени.
Шив Пракаш


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
Этот расширенный вывод необходим, потому что «что-то»> = n / 2 * lg (n / 2) не равно омеге (n lg n), которое было упомянуто в одном из предыдущих комментариев.
Вивек Ананд Сампат

Это должно читаться как «константа МЕНЬШЕ, чем (1/2)», так как мы пытаемся найти нижнюю границу. Любая константа, c, меньшая (1/2), в конечном итоге сделает c n logn <= (1/2) n * logn- (1/2) n для достаточно большого n.
Мэтью

3

Помогая вам дальше, где оставил вас Мик Шарп:

Это deriveration довольно просто: см http://en.wikipedia.org/wiki/Logarithm -> Теория групп

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

Думайте как бесконечно большой . Что такое бесконечный минус один? или минус два? и т.п.

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

А затем подумайте о inf как n.


2

Спасибо, я нашел ваши ответы убедительны , но в моем случае, я должен использовать thetas ; свойства:

log(n!) = Θ(n·log n) =>  log(n!) = O(n log n) and log(n!) = Ω(n log n)

чтобы проверить проблему, я нашел эту сеть, где у вас есть весь процесс объяснил: http://www.mcs.sdsmt.edu/ecorwin/cs372/handouts/theta_n_factorial.htm


1

Это может помочь:

e ln (x) = x

и

(l m ) n = l m * n

3
На самом деле, это неправильно: 1 ^ (m ^ n)! = 1 ^ (m n) должно быть (1 ^ m) ^ n = 1 ^ (m n)
Пиндатюх

Errr Я имею в виду L вместо 1 в комментарии выше.
Пиндатюх

Он не написал 1 ^ (m ^ n), он написал (l ^ m) ^ n
CodyBugstein

1
@CodyBugstein: Для исправления проблемы была сделана правка, которую вы прокомментировали спустя годы, когда ошибка была скрыта в истории
Бен Фойгт,

0

http://en.wikipedia.org/wiki/Stirling%27s_approximation Аппроксимация Стирлинга может помочь вам. Это действительно полезно при решении проблем факториалов, связанных с огромными числами порядка 10 ^ 10 и выше.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.