Що не так у сумах термінів Ландау?


14

я написав

i=1n1i=i=1nO(1)=O(n)

але мій друг каже, що це неправильно. З шпаргалки TCS я знаю, що суму називають також Hn яка має логарифмічний ріст у n . Тож мій зв’язок не дуже гострий, але достатній для аналізу, який мені знадобився.

Що я зробив не так?

Редагувати : Мій друг каже, що з тими ж міркуваннями ми можемо це довести

i=1ni=i=1nO(1)=O(n)

Тепер це, очевидно, неправильно! Що тут відбувається?


2
Дивіться дискусію щодо тегів цього питання тут .
Рафаель


Дивіться також більш конкретне трактування поширеного прикладу: Яке асимптотичне виконання цього вкладеного циклу?
Жил "ТАК - перестань бути злим"

Відповіді:


10

Те, що ви робите, - це дуже зручне зловживання нотацією.

Деякі педанти скажуть, що те, що ви пишете, - це нісенітниця, оскільки позначає набір, і ви не можете робити арифметичні операції над ними так, як ви робите.O(f)

Але це гарна ідея проігнорувати ці педанти і припустити, що означає якийсь член набору. Отже, коли ми говоримо f ( n ) = g ( n ) + O ( n ) , що ми маємо на увазі, якщо це f (O(f)f(n)=g(n)+O(n) . (Примітка: деякі педанти також можуть здригнутися від цього твердження, стверджуючи, що f ( n ) - це число, а ff(n)g(n)O(n)f(n)f це функція!)

Це робить дуже зручним писати подібні вирази

nk=1nk1/kn+O(n1/3)

Це означає, що є деякі таким чином, щоfO(n1/3)

nk=1nk1/kn+f(n)

У вашому випадку

k=1n1k=k=1nO(1)=O(n)

ви ще більше зловживаєте цим, і вам потрібно бути обережними.

Тут є дві можливі інтерпретації: чи відноситься до функції n , або до функції k ?O(1)nk

Я вважаю, що правильне тлумачення - інтерпретувати його як функцію .k

Якщо ви намагаєтеся думати про нього , як функції , думав не неправильно, це може призвести до потенційних помилках, як мислення до є O ( 1 ) і намагається записати Е н К = 1 К = ЕnkO(1)k=1nk=k=1nO(1)

Якщо ви спробуєте думати про це як про функцію , то це правда, якщо f = Ok (якості аргументу переходить до ) і г ніколи не 0 , тоf=O(g)g0

S(n)=k=1nf(k)=k=1nO(g(k))=O(k=1n|g(k)|)

Зауважимо, що в середині ми використовували зручне зловживання позначенням щоб означати, що для деякої функції h O ( g ) сума дорівнює n k = 1 h (O(g(k))hO(g) . Зауважимо, що підсумкова функція всередині O відноситься до функції n . Доведення це не так складно, але ви повинні потурбуватися про те, що ви маєте справу з асимптотичною верхньою межею (тобто для досить великих аргументів), але сума починається прямо з 1 .k=1nh(k)On1

Якщо спробувати думати про це як про функцію n , то також вірно, що якщо (як аргумент іде до ), тоf=O(g)

S(n)=k=1nf(k)=k=1nO(g(n))=O(ng(n))

Отже, ваші докази по суті вірні в будь-якій інтерпретації.


1
Підсумок: Будьте в курсі (переконайтесь), що кожне виникнення символу Ландау вводить (має) свою константу .
Рафаель

8

Те, що ви написали, цілком коректно. The n - й гармоніки числа, дійсно , в безлічі .O(n)

Доведення: . i=1n1ilnn+12n=O(n)

Верхня межа не щільна , але це правильно.O(n)


4
Гаразд: 1 / i ≤ 1 = O (1).
JeffE

1
Турбота спрямована на другий знак рівності. Як я можу це перевірити?
Рафаель

2
Але це теж правильно. Сума з n доданків, кожен з яких O (1), справді є O (n).
Суреш

2
@ Суреш Тільки якщо константи , на які посилається s, не залежать від змінної підсумовування, і тут суть (насіннєве питання). O
Рафаель

2
Помилка не в другій рівності. помилка (у другому виразі) полягає в тому, як ви ЗНАЙДАєте до цього підсумовування. Перехід від правильний. Він стверджує, що i = O ( 1 ) неправильний. Я усвідомлюю, що це очевидно для всіх зацікавлених, але я вважаю, що це проблема із питаннями "висіву" :)iO(1)=O(n)i=O(1)
Суреш

6

У другому прикладі ви не можете стверджувати, що

i=O(1)

оскільки змінюється з n . Через кілька кроків стане так, що i > n / 2 . Більш підходящим способом є сказати, що i = O ( n ), оскільки дійсно протягом усієї суми я ніколи не перевищує 1 n . За цим міркуванням, n i = 1 i = n i = 1 O ( n ) = n O ( n ) = O (ini>n/2i=O(n)i1n

i=1ni=i=1nO(n)=nO(n)=O(n2)

Однак правильним є насправді використовувати позначення big-O лише в кінці. Верхньою мірою підв’яжіть підсумки максимально щільно, і лише тоді, коли ви готові, використовуйте асимптотичні позначення, щоб уникнути цих підводних каменів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.