Prečo by sme sa mali naučiť programovať vlastnú funkciu na hľadanie maxima a nespoliehať sa na predpripravenú funkciu, ak ju náš programovací jazyk poskytuje?
Programovanie je umenie riešenia problémov a tvorby efektívneho kódu. Hoci existujú vstavané funkcie, ktoré uľahčujú niektoré úlohy, je dôležité porozumieť ich fungovaniu a v prípade potreby ich vedieť nahradiť vlastným riešením. Jedným z takých príkladov je funkcia na nájdenie najväčšieho prvku v zozname prvkov.
Porozumenie princípom programovania
Vytvorenie vlastnej funkcie my_max()
nás núti premýšľať o princípoch programovania. Ako funguje vyhľadávanie maximálneho prvku? Ako riešiť rôzne situácie a nejednoznačnosti? Ako otestovať správnosť nášho riešenia?
Programovanie nie je len o napísaní kódu, ale aj o pochopení, ako kód pracuje, vedieť zovšeobecňovať. Vytváraním vlastnej funkcie a ladením kódu sa rozvíjajú naše analytické schopnosti a schopnosť riešiť komplexné úlohy.
Nie všetky programovacie jazyky majú vstavanú funkciu max()
. Učenie sa tvoriť vlastné riešenia nás pripravuje na prácu s rôznymi jazykmi a technológiami.
Flexibilita a prispôsobivosť
Vlastná implementácia nám umožňuje prispôsobiť funkciu našim konkrétnym potrebám. Napríklad môžeme vytvoriť verziu funkcie my_max()
, ktorá zohľadňuje rôzne netradičné kritériá na určenie najväčšieho prvku.
Napríklad môžeme mať požiadavku nájsť posledné meno podľa abecedy, pričom niekedy sú mená napísané s veľkými začiatočnými písmenami a inokedy s malými, napríklad nasledovné mená:
„Adam“, „andy“, „Bob“, „bea“
Štandardná funkcia na nájdenie maxima správne nájde meno „bea“.
My by sme však potrebovali, aby našla meno „Bob“. Upozorňujeme, že mená musia ostať vo svojej pôvodnej podobe.
Ďalšou možnou požiadavkou by mohlo byť nájdenie najväčšej absolútnej hodnoty medzi kladnými a zápornými číslami.
+5, -3, +4, -9
Štandardná funkcia na nájdenie maxima správne nájde číslo 5.
My by sme však potrebovali, aby našla číslo -9. Upozorňujeme, že čísla musia ostať vo svojej pôvodnej podobe.
Pozornému čitateľovi určite už napadlo, že takéto požiadavky sa týkajú akejkoľvek funkcie. Nájdite to x, pre ktoré f(x) je najväčšie.
Efektívne využitie zdrojov
Nie vždy sú štandardné funkcie najefektívnejšie. Vytvorením vlastnej implementácie môžeme optimalizovať kód na naše konkrétne potreby, čo môže viesť k rýchlejšiemu a efektívnejšiemu spracovaniu dát.
Tu prichádzajú na scénu pamäťová zložitosť a časová zložitosť, ktoré predstavujú dôležitý aspekt v analýze algoritmov.
Pre nezoradené zoznamy, kde maximálny prvok nie je predom známy, je časová zložitosť hľadania maximálneho prvku lineárna, teda O(N), kde N je počet prvkov v zozname. Funkcia musí prejsť každý prvok zoznamu aspoň raz na identifikáciu najväčšieho prvku. Vstavané funkcie nájdu maximum v tomto čase a naša vlastná funkcia by nemala byť pomalšia 🙂
Pamäťová zložitosť je považovaná za konštantnú, teda O(1), čo znamená, že množstvo pamäte, ktoré algoritmus spotrebuje, nie je závislé od veľkosti vstupných dát. Funkcia jednoducho udržuje internú premennú pre aktuálny maximálny prvok a prechádza všetky prvky zoznamu. Naša vlastná funkcia by nemala zaberať oveľa viac pamäte a nemali by sme bez uváženia kopírovať prvky do pomocných zoznamov, pretože by to zvýšilo pamäťovú zložitosť na O(N).
Záver
Preto sa snažte vnímať programovanie nielen ako nástroj na dosahovanie výsledkov, ale aj ako prostriedok na hlbšie pochopenie fungovania kódu a zlepšovanie svojich programátorských zručností.