Чи журнал (n!) = Θ (n · log (n))?


218

Я повинен показати той журнал ( 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) = Omega (n журналу n).
Кіт Рендалл

2
@Keith: Я ще цього не розумію. Чи можете ви (чи хтось) розгорнути ще кілька термінів для мене в частині "..." журналу (n / 2) + ... + журналу (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 в основному полягає в тому, що перший член праворуч є домінуючим терміном, і тому журнал (n!) Може бути наближений до n log (n) або що він є порядком n log (n) що виражається великим позначенням O (n * log (n)).
випадково9

1
@ Z3d4s те, що кроки 7-8 перетворення говорить про те, що n logn == log (n ^ n), і для показу тут пов'язаного ви можете сказати, що перший доданок завжди більше, ніж другий член, ви можете перевірити наявність будь-яких більших значень, і для вираження складності big-O ми завжди візьмемо домінуючий предмет у всіх. Тож n logn сприяє великому часу O.
Шив Пракаш


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)", оскільки ми намагаємося знайти нижню межу. Будь-яка константа, с, менша за (1/2), врешті-решт зробить c n logn <= (1/2) n * logn- (1/2) n, для досить великого n.
Метью

3

Допомагаючи вам далі, де вас залишив Мік Шарп:

Це виведення досить просто: див. Http://en.wikipedia.org/wiki/ Логаритм -> Теорія групи

log (n!) = log (n * (n-1) * (n-2) * ... * 2 * 1) = log (n) + log (n-1) + ... + log (2 ) + журнал (1)

Подумайте про російську як нескінченно велику . Що таке нескінченний мінус один? або мінус два? тощо.

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

А потім подумайте про інф як про п.


2

Дякую, я знайшов ваші відповіді переконливими, але в моєму випадку я повинен використовувати Θ властивості:

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)
Піндатюх

Помилка. Я маю на увазі 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.