Asymptotický zložitosť

Programovacie jazyky, rady, poradňa...
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Asymptotický zložitosť

Príspevok od používateľa Mr-Freek »

Zdravíčko, v KSI seminári som narazil na mini-úlohu ktorá ma dosť zarazila a neviem ju asi správne natlačiť do hlavy. Našiel by sa niekto kto mi to vysvetlí polopate??

Hovorí sa o funkciách ktoré majú vstup prirodzené číslo a funkčnú hodnotu tiež prirodzené číslo. Táto časť je pochopiteľná, ak som teda správne pochopil že rast funkcie predstavuje časovú náročnosť v danom čase vykonávania algoritmu.

Pliesť sa mi to ale začína keď treba eliminovať pri porovnávaní násobenie konštantami a malé vstupné hodnoty. Tým pádom môžem o funkcií prehlásiť že algoritmy sú časovo rovnako náročné (funkcie rastú rovnako rýchlo) ak sa tá pomalšie rastúra funkcia dá vynásobiť konštantou tak že bude aspoň tak veľká ako hodnota rýchlejšej rastúcej funkcie? Tu ma trochu pletie ten výraz "aspoň tak veľká" prečo nie rovnaká s niakou odchylkou?

Potom to vysvetlili cez konštanty "c" a "x0" pre ktoré platí že f(x) <= c*g(x) pre každý vstup väčší než x0. Znamená to teda že c je konštanta ktorou musím vynásobiť danú funkčnú hodnotu funkcie tak aby bola rovnako veľká ako druhá? A toto c je rovnaké pre všetky funkčné hodnoty alebo sa mení? No a x0 nechápem vôbec, prečo toto platí iba od istého vstupu a nie hneď od začiatku??

Dostal som tieto funkcie aby som im určil c a x0 ale som z toho úplne mimo, nie je to zadanie na body len kus vysvetlovania cez ktorý to mám pochopiť. Možno ak mi niekto na pár príkladoch vysvetlí čo to má byť tak pochopím :D pretože mám pocit že v základe to chápem len mi uniká drobnosť, hlavne to aká funkcia je "n", mám si to predstavi ako y = n? veď to je konštantná funkcia..

//autoeditácia príspevku (05 Dec 2015, 10:14)
alebo predstavuje os x čas a os y vykonané operácie v algoritme??
Prílohy
funkcie.png
funkcie.png (7 KiB) 1274 zobrazení
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: Asymptotický zložitosť

Príspevok od používateľa mirak2 »

definicia O:
funkcia f(n) patri do triedy O(g(n)), ak vies najst taku kladnu realnu konstantu c a taky vstup do funkcie f(n) n0, pre ktore mozes s istotou prehlasit, ze pre vsetky vstupy vacsie ako tvoje n0 bude c*g(n) vacsi alebo rovny ako f(n)
takze, ked mas priklad n je z O(n), tak f(n) = n a g(n) = n... teraz musis najst nejake c a nejake n0, pre ktore bude platit, ze ak n>n0 tak c*n >= n a toto je lahky priklad, takze n0 = 1 a c = 1 a urcite plati ze 1*n >= n pre vsetky n vacsie ako 1 (aj ako 0, ale bavime sa o prirodzenych cislach a to, ci nula je alebo nie je prirodzena je vecou dohody)
druhy priklad: c*(n+3) >= n opat ti staci c = 1 a n0=1 a 1*(n+3) >= n
v podstate ani nemusis pre tuto ulohu hladat najmensie c a n0, staci, ze najdes jedno.
PS: y = n nie je konstantna funkcia :)
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: Asymptotický zložitosť

Príspevok od používateľa Mr-Freek »

ešte som to poriadne neprečítal ale hneď prvá otázka :D n mám brať ako randomnú premennú alebo ako množinu prirodzených čísel?

//autoeditácia príspevku (05 Dec 2015, 11:18)
no myslím že sa začínam chytať, takže povedzme tretí príklad: n z O(n+3), musím nájsť také c ktoré vynásobí n tak aby bolo >= n+3?? takže napr. c = 2? tým pádom 2*n >= n+3 a platí to od n0 = 3?? či som mimo? :D

alebo n z O(3*n) takže c = 3 pretože c*n >= 3*n takže 3*n >= 3*n ?

Tú konštantu teda asi chápem ale stále mi uniká význam toho n0, alebo je to tak ako som to určil v tretom príklade?? a celkového využitia v programovaní je aké? To by asi stačila keby mi odpovedáš na otázku čo tá funkcia vyjadruje?? resp. čo si mám predstaviť pod osou x a y??

//autoeditácia príspevku (05 Dec 2015, 11:23)
a ešte jeden detail, v týchto prípadoch som teda dokázal že funkcie rastú asymptoticky rovnako rýchlo resp. že sú rovnako časovo náročné pri použití vykonnejšieho počítača. V akom prípade ale nebudem schopný nájsť také c aby to platilo?? neviem si taký prípad predstaviť... to ma zároveň privádza k otázke ako určím pre algoritmus túto funkciu?
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: Asymptotický zložitosť

Príspevok od používateľa mirak2 »

som ti chcel dat linku na prezentaciu z mojej skoly, kde to je vysvetlene, som zabudol sry... mozno to odpovie na niektore tvoje otazky. http://web.ics.upjs.sk/paz1b/files/pred ... naska2.pdf od str. 21
n je vstup do funkcie. a na zaciatku pises, ze funkcie beru ako vstup prirodzene cislo. zvycajne sa prirodzene cisla oznacuju n. chapem, ze to trochu matie, ked mas potom pouzivane f(x) vo vysvetleni.
ta funkcia zvycajne vyjadruje pocet krokov, ktore sa vykonaju v algoritme pre vstup dlzky n (retazec dlzky n, pole dlzky n, ...) a realne vyuzitie je na to, aby si vedel povedat, ze tvoj algoritmus vykona pre vstup dlzky n najviac napriklad n^3 krokov
take c nenajdes ak budes mat algoritmus, ktory potrebuje min. n^2 krokov a budes chciet skalopevne vsetkych presvedcit, ze patri do triedy O(n), teda ze potrebuje najviac n krokov :lol:
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: Asymptotický zložitosť

Príspevok od používateľa Mr-Freek »

Myslím že už som to pochopil, trochu mi tam špatí to n0 ale aj to mi dáva zmysel. Ďakujem :) ale ak sa nájde niekto kto mi to vysvetlí inak tak s radosťou vypočujem.
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: Asymptotický zložitosť

Príspevok od používateľa mirak2 »

to n0 je tam preto, ze to nemusi platit pre uplne vsetky vstupy, ale iba od urcitej dlzky. nepytaj sa preco je to tak :lol:
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: Asymptotický zložitosť

Príspevok od používateľa Mr-Freek »

no keď sa nad tým zamyslím tak to dáva zmysel, keby chcem napr. dokázať že n+3 je z O(n) tak n môžem násobiť napr. konštantou c = 2. Potom by ale c*n >= n+3 platilo až od n = 3. Tým pádom c=2 a n0 = 3 či? :D ale zase keby použijem väčšiu konštantu c tak by to platilo už od 1 :D asi zbytočne aplikujem sedliacky rozum na niečo kde by som nemal.. :D
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Asymptotický zložitosť

Príspevok od používateľa harrison314 »

Mr-Freek napísal:no keď sa nad tým zamyslím tak to dáva zmysel, keby chcem napr. dokázať že n+3 je z O(n) tak n môžem násobiť napr. konštantou c = 2. Potom by ale c*n >= n+3 platilo až od n = 3. Tým pádom c=2 a n0 = 3 či? :D ale zase keby použijem väčšiu konštantu c tak by to platilo už od 1 :D asi zbytočne aplikujem sedliacky rozum na niečo kde by som nemal.. :D
Ano, pri malych no tom nema zmysel ani uvazovat.
Trosku polopatistycky O(n) = O(2*n), aj s toho dovodu, ze vynaosnie konstantou ti zotrie rozdiel medzi pocitacmi, a teda v podstate nehra rolu.
Za n sa skor dosadzuju velke cisla, pri ktorych ti algoritmus s lineranou zlozitostou zbehne do sekundy no s n^4 moze bezat aj par dni alebo rokov, a vtedy ti je naozaj jedno, ci ti program zbehne za rok alebo za dva, budes hladat linearne riesnie :D
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: Asymptotický zložitosť

Príspevok od používateľa Mr-Freek »

a v praxi je kvadratické riešenie vlastne vnorený cyklus.. či? :D ma odje*al tento seminár teraz.. doteraz mini-úlohy typu loops, zoznami, trocha teórie a zrazu tieto funkcie :D informatika je plná zábavy :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Asymptotický zložitosť

Príspevok od používateľa harrison314 »

Mr-Freek napísal:a v praxi je kvadratické riešenie vlastne vnorený cyklus.. či?
Ked prechadzas vsteymi prvami aj vo vnorenom cykle, tak ano.
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: Asymptotický zložitosť

Príspevok od používateľa Mr-Freek »

Tak pochopené, vyriešené. Zase raz ten pocit keď som sa ráno pozeral nato ako puk a teraz to chápem. Milujem matematiku.

PS: najlepšie na tom je že keby toto počuje niekto kompetentný hneď mi dokáže že to nechápem :D aj tak ju stále milujem
Napísať odpoveď