logo

Naučte sa dátové štruktúry a algoritmy | Príručka DSA

Dátové štruktúry a algoritmy (DSA) odkazujú na štúdium metód na organizáciu a ukladanie dát a návrh procedúr (algoritmov) na riešenie problémov, ktoré fungujú na týchto dátových štruktúrach. DSA je jednou z najdôležitejších zručností, ktoré musí mať každý študent informatiky. Často je vidieť, že ľudia s dobrými znalosťami týchto technológií sú lepšími programátormi ako ostatní, a preto prelomia rozhovory takmer každého technologického giganta. Toto Výukový program DSA má za cieľ pomôcť vám rýchlo a jednoducho naučiť sa dátové štruktúry a algoritmy (DSA).



Obsah

  • Naučte sa algoritmy
  • Prečítajte si o zložitostiach
  • Precvičte si problémové cheaty
  • Úplný formulár DSA

    Pojem DSA znamená Dátové štruktúry a algoritmy , v kontexte informatiky.

    Čo je DSA?

    Dátové štruktúry a algoritmy (DSA) odkazujú na štúdium metód na organizáciu a ukladanie dát a návrh procedúr (algoritmov) na riešenie problémov, ktoré fungujú na týchto dátových štruktúrach.



    Ako sa naučiť DSA?

    Prvou a najdôležitejšou vecou je rozdelenie celkového postupu na malé časti, ktoré je potrebné vykonať postupne. Celý proces učenia DSA od nuly možno rozdeliť do 5 častí:

    1. Naučte sa aspoň jeden programovací jazyk (necháme to na vašom výbere.)
    2. Naučte sa dátové štruktúry
    3. Naučte sa algoritmy
    4. Získajte informácie o časových a priestorových zložitostiach
    5. Cvičné problémy na DSA
    Ako sa naučiť DSA?

    Ako sa naučiť DSA?

    Dúfame, že ste sa naučili programovací jazyk podľa vášho výberu, dovoľte nám pokročiť v ďalšom kroku, aby ste sa naučili DSA v tomto návode na DSA.



    Tu prichádza najdôležitejšia a najočakávanejšia fáza plánu na učenie sa štruktúry údajov a algoritmu – fáza, v ktorej sa začnete učiť o DSA. Téma DSA pozostáva z dvoch častí:

    • Dátové štruktúry
    • Algoritmy

    Hoci sú to dve rozdielne veci, sú veľmi prepojené a je veľmi dôležité sledovať správnu cestu, aby ste sa ich naučili čo najefektívnejšie. Ak si nie ste istí, ktorý z nich sa naučiť ako prvý, odporúčame vám prejsť si našu podrobnú analýzu na túto tému: Tu sme sledovali tok učenia sa dátovej štruktúry a potom najpríbuznejšie a najdôležitejšie algoritmy používané touto dátovou štruktúrou.

    Naučte sa dátové štruktúry

    Dátové štruktúry sú základné komponenty, ktoré pomáhajú efektívne organizovať a ukladať dáta v pamäti počítača. Poskytujú spôsob, ako efektívne spravovať a manipulovať s údajmi, umožňujúc rýchlejší prístup, operácie vkladania a odstraňovania. Bežné dátové štruktúry zahŕňajú polia, prepojené zoznamy, zásobníky, fronty, stromy a grafy , pričom každý slúži na špecifické účely na základe požiadaviek daného problému. Pochopenie dátových štruktúr je základom pre navrhovanie efektívnych algoritmov a optimalizáciu výkonu softvéru.

    Pole je lineárna dátová štruktúra, ktorá uchováva kolekciu prvkov rovnakého dátového typu. Prvky majú pridelenú súvislú pamäť, čo umožňuje prístup v konštantnom čase. Každý prvok má jedinečné indexové číslo.

    • Operácie na poli:
      • Prechádzanie : Iterácia cez prvky poľa.
      • Vkladanie : Pridanie prvku do poľa na konkrétnom indexe.
      • Vymazanie : Odstránenie prvku z poľa na konkrétnom indexe.
      • Hľadanie : Nájdenie prvku v poli podľa jeho hodnoty alebo indexu.
    • Typy polí :
      • Jednorozmerné pole : Jednoduché pole s jedným rozmerom.
      • Viacrozmerné pole : Pole s viacerými rozmermi, ako napríklad matica.
    • Aplikácie Array :
      • Ukladanie údajov sekvenčným spôsobom
      • Implementácia frontov, zásobníkov a iných dátových štruktúr
      • Znázorňujúce matice a tabuľky
    • Súvisiace témy na poli:
      • Príručka o poliach
      • 50 najčastejších problémov s kódovaním polí pri rozhovoroch
      • Cvičte problémy na poliach

    2. Reťazec

    A reťazec je postupnosť znakov, ktorá sa zvyčajne používa na reprezentáciu textu. Považuje sa za dátový typ, ktorý umožňuje manipuláciu a spracovanie textových údajov v počítačových programoch.

    • Operácie na reťazci :
      • Reťazenie : Spojenie dvoch reťazcov dohromady.
      • Porovnanie : Porovnanie dvoch reťazcov lexikograficky.
      • Podreťazec extrakcia : Extrahovanie podreťazca z reťazca.
      • Vyhľadávanie : Vyhľadávanie podreťazca v reťazci.
      • Modifikácia : Zmena alebo nahradenie znakov v reťazci.
    • Aplikácie reťazca :
      • Spracovanie textu
      • Zhoda vzorov
      • Overovanie dát
      • Správa databázy
    • Súvisiace príspevky:
      • Strunový návod
      • 50 najčastejších problémov s kódovaním reťazcov pri rozhovoroch
      • Cvičné problémy na strune

    3. Prepojené zoznamy

    A prepojený zoznam je lineárna dátová štruktúra, ktorá ukladá dáta v uzloch, ktoré sú prepojené ukazovateľmi. Na rozdiel od polí nie sú prepojené zoznamy uložené v súvislých pamäťových miestach.

    • Charakteristika prepojeného zoznamu:
      • Dynamický : Veľkosť prepojených zoznamov možno jednoducho zmeniť pridaním alebo odstránením uzlov.
      • Nesúvislé : Uzly sú uložené v náhodných pamäťových miestach a sú spojené ukazovateľmi.
      • Sekvenčný prístup : Uzly sú prístupné iba postupne, počnúc od začiatku zoznamu.
    • Operácie na prepojenom zozname:
      • Tvorba : Vytvorenie nového prepojeného zoznamu alebo pridanie nového uzla do existujúceho zoznamu.
      • Prechádzanie : Iterovanie cez zoznam a prístup ku každému uzlu.
      • Vkladanie : Pridanie nového uzla na konkrétnu pozíciu v zozname.
      • Vymazanie : Odstránenie uzla zo zoznamu.
      • Vyhľadávanie : Nájdenie uzla so špecifickou hodnotou v zozname.
    • Typy prepojeného zoznamu :
      • Samostatne prepojený zoznam : Každý uzol ukazuje na ďalší uzol v zozname.
      • Dvojito prepojený zoznam : Každý uzol ukazuje na nasledujúci aj predchádzajúci uzol v zozname.
      • Kruhový prepojený zoznam : Posledný uzol smeruje späť k prvému uzlu a tvorí kruhovú slučku.
    • Aplikácie prepojeného zoznamu :
      • Prepojené zoznamy sa používajú v rôznych aplikáciách vrátane:
      • Implementácia frontov a zásobníkov
      • Reprezentácia grafov a stromov
      • Udržiavanie objednaných údajov
      • Správa pamäte
    • Súvisiace témy:
      • Návod na prepojený zoznam
      • 50 najčastejších problémov na prepojenom zozname pre rozhovory
      • Precvičte si problémy na prepojených zoznamoch

    4. Matica/mriežka

    A matice je dvojrozmerné pole prvkov usporiadaných do riadkov a stĺpcov. Je znázornená ako obdĺžniková mriežka, pričom každý prvok je priesečníkom riadka a stĺpca.

    • Kľúčové pojmy:
      • Riadky : Vodorovné čiary prvkov v matici.
      • Stĺpce : Zvislé čiary prvkov v matici.
      • Rozmery : Počet riadkov a stĺpcov v matici (napr. matica 3×4 má 3 riadky a 4 stĺpce).
      • Element Prístup : Prvky sú dostupné pomocou riadkových a stĺpcových indexov (napr. M[2][3] odkazuje na prvok v riadku 2, stĺpci 3).
    • Aplikácie Matrix/Grid :
      • Spracovanie obrazu
      • Analýza dát
      • Problémy s optimalizáciou
    • Súvisiace príspevky:
      • Matrix/Grid Tutorial
      • 50 najlepších problémov v matici/mriežke pre rozhovory
      • Cvičné problémy na matici/mriežke

    5. Stoh

    Stoh je lineárna dátová štruktúra, ktorá sleduje určité poradie, v ktorom sa operácie vykonávajú. Objednávka môže byť LIFO (Last In First Out) alebo FILO (prvý dnu, posledný von) . LIFO znamená, že prvok, ktorý je vložený ako posledný, vychádza ako prvý a RIADOK znamená, že prvok, ktorý je vložený ako prvý, vychádza ako posledný.

    • Operácia na zásobníku :
      • TAM : Pridá prvok na vrch zásobníka
      • Pop : Odstráni a vráti prvok v hornej časti zásobníka
      • Nahliadnuť : Vráti prvok v hornej časti zásobníka bez jeho odstránenia
      • Veľkosť : Vráti počet prvkov v zásobníku
      • Je prázdny : Skontroluje, či je zásobník prázdny
    • Aplikácie Stack :
      • Volania funkcií
      • Hodnotenie výrazov
      • Backtracking
      • Späť/znova vykonať operácie
    • Súvisiace témy v zásobníku:
      • Výukový program zásobníka
      • Top 50 problémov v zásobníku pre rozhovory
      • Cvičte problémy na Stack

    6. Fronta

    A Fronta Štruktúra údajov je základný koncept v informatike, ktorý sa používa na ukladanie a správu údajov v určitom poradí. Riadi sa princípom Prvý dnu prvý von ( FIFO ), kde prvý prvok pridaný do frontu je prvý, ktorý sa má odstrániť

    • Prevádzka vo fronte :
      • Zaradiť do radu : Pridá prvok do zadnej časti frontu
      • Podľa toho : Odstráni prvok z prednej časti frontu
      • Nahliadnuť : Obnoví predný prvok bez jeho odstránenia
      • Je prázdny : Kontroluje, či je front prázdny
      • Je plný : Kontroluje, či je front plný
    • Typ frontu :
      • Kruhový rad : Posledný prvok sa pripája k prvému prvku
      • Dvojitý front (Deque) : Operácie je možné vykonávať z oboch strán
      • Prioritný front : Prvky sú usporiadané podľa priority
    • Aplikácie frontu :
      • Plánovanie práce
      • Radenie správ
      • Simulačné modelovanie
      • Ukladanie údajov do vyrovnávacej pamäte
    • Súvisiace témy:
      • Poradie výučby
      • 50 najčastejších problémov v rade na pohovory
      • Cvičte problémy vo fronte

    7. Hromada

    A Hromada je úplná binárna stromová dátová štruktúra, ktorá spĺňa vlastnosť haldy: pre každý uzol je hodnota jeho potomkov menšia alebo rovná jeho vlastnej hodnote. Na realizáciu sa zvyčajne používajú haldy prioritné fronty , kde najmenší (alebo najväčší) prvok je vždy v koreni stromu.

    • Operácie haldy :
      • Vložiť : Pridá nový prvok do haldy pri zachovaní vlastností haldy.
      • Extrakt-Max/Extract-Min : Odstraňuje koreňový prvok a reštrukturalizuje haldu.
      • Tlačidlo zvýšenia/zníženia : Aktualizuje hodnotu uzla a reštrukturalizuje haldu.
    • Typy haldy :
      • Max-Heap : Koreňový uzol má medzi svojimi potomkami maximálnu hodnotu.
      • Min-Hroma : Koreňový uzol má medzi svojimi potomkami minimálnu hodnotu.
    • Aplikácie haldy :
      • Prioritné fronty
      • Triedenie
      • Grafové algoritmy (napr. Dijkstrov algoritmus)
    • Súvisiace príspevky:
      • Výukový program haldy
      • Top 50 problémov na hromade pre rozhovory
      • Cvičné problémy na halde

    8. Hash

    Hašovanie je technika, ktorá generuje výstup s pevnou veľkosťou (hodnota hash) zo vstupu premenlivej veľkosti pomocou matematických vzorcov tzv. hašovacie funkcie . Hašovanie sa používa na určenie indexu alebo miesta na uloženie položky v dátovej štruktúre, čo umožňuje efektívne vyhľadávanie a vkladanie.

    • Kľúčové pojmy:
      • Hash funkcia : Matematická funkcia, ktorá mapuje vstup na hodnotu hash.
      • Tabuľka hash : dátová štruktúra, ktorá ukladá páry kľúč – hodnota, kde kľúčom je hodnota hash a hodnota sú skutočné údaje.
      • Zrážka : Keď dva rôzne kľúče vytvárajú rovnakú hodnotu hash.
    • Typy hashovacích funkcií :
      • Deliaca metóda : Rozdelí vstup konštantou a zvyšok použije ako hash hodnotu.
      • Stredné námestie Metóda: Odmocní vstup a berie stredné číslice ako hash hodnotu.
      • Metóda skladania : Rozdelí vstup na bloky rovnakej veľkosti a sčíta ich, aby sa získala hodnota hash.
      • Metóda násobenia : Vynásobí vstup konštantou a použije zlomkovú časť ako hodnotu hash.
    • Techniky riešenia kolízie :
      • Oddelené reťazenie (otvorené hašovanie) : Ukladá kolidujúce prvky v prepojenom zozname s príslušnou hodnotou hash.
      • Otvorené adresovanie (uzavreté hašovanie) : Používa rôzne stratégie na nájdenie alternatívneho umiestnenia pre kolízne prvky v tabuľke hash.
    • Aplikácie hashovania :
      • Efektívne ukladanie a získavanie údajov v databázach a súborových systémoch.
      • Overovanie hesiel a digitálnych podpisov.
      • Distribúcia požiadaviek na viacero serverov.
      • Generovanie bezpečných hashov pre integritu údajov a autentifikáciu.
    • Súvisiace príspevky:
      • Hash Tutorial
      • Cvičte problémy s hašovaním

    9. Strom

    A strom je nelineárna hierarchická dátová štruktúra pozostávajúca z uzlov spojených hranami, pričom horný uzol sa nazýva koreň a uzly majú dcérske uzly. Používa sa v informatike na efektívnu organizáciu údajov.

    jedinečný kľúč mysql
    • Prechod stromu : Metódy prechodu cez strom sa používajú na návštevu a spracovanie uzlov v stromovej dátovej štruktúre. Tri bežné spôsoby prechodu sú:
      • V poradí : Navštívte ľavý podstrom, aktuálny uzol a potom pravý podstrom.
      • Predobjednať : Navštívte aktuálny uzol, ľavý podstrom, potom pravý podstrom.
      • Po objednávke : Navštívte ľavý podstrom, pravý podstrom a potom aktuálny uzol.
    • Klasifikácia stromov:
      • Klasifikácia Stromy odkazujú na zoskupenie stromov na základe určitých charakteristík alebo kritérií. To môže zahŕňať kategorizáciu stromov na základe ich balančného faktora, stupňa uzlov, vlastností usporiadania atď. Nižšie sú uvedené niektoré dôležité klasifikácie stromu.
    Klasifikácia Popis

    Typ

    Popis

    Podľa stupňa

    Stromy možno klasifikovať na základe maximálneho počtu detí, ktoré môže mať každý uzol.

    Binárny strom

    Každý uzol má najviac dve deti.

    Ternárny strom

    Každý uzol má najviac tri deti.

    N-árny strom

    Každý uzol má najviac N detí.

    Objednávkou

    Stromy možno klasifikovať na základe poradia uzlov a podstromov

    Binárny vyhľadávací strom (BST)

    Ľavé dieťa

    Hromada

    Špecializovaný binárny strom s vlastnosťou halda.

    Podľa rovnováhy

    Stromy možno klasifikovať podľa toho, ako dobre sú vyvážené.

    Vyvážený strom

    Výšky podstromov sa líšia najviac o jednu. Príklady zahŕňajú AVL stromy a červeno-čierne stromy.

    Nevyvážený strom

    Výšky podstromov sa môžu výrazne líšiť, čo ovplyvňuje výkon pri operáciách, ako je vyhľadávanie a vkladanie.

    • Aplikácia stromov:
      • Súborové systémy
      • databázy
      • XML dokumenty
      • Umela inteligencia
    • Súvisiace príspevky:
      • Príručka o strome
      • 50 najčastejších problémov s kódovaním stromov
      • Precvičte si problémy na strome

    10. Graf

    A Graf je nelineárna dátová štruktúra pozostávajúca z konečnej množiny vrcholov (alebo uzlov) a množiny hrán, ktoré spájajú pár uzlov.

    Naučte sa algoritmy

    Keď ste si vyjasnili pojmy Dátové štruktúry , teraz je čas začať svoju cestu cez Algoritmy . Na základe typu povahy a použitia sú algoritmy zoskupené do niekoľkých kategórií, ako je uvedené nižšie:

    1. Algoritmus vyhľadávania

    Vyhľadávacie algoritmy sa používajú na nájdenie konkrétnych údajov v rámci väčšieho súboru údajov. Pomáha nájsť prítomnosť cieľovej hodnoty v údajoch. Existujú rôzne typy vyhľadávacích algoritmov, z ktorých každý má svoj vlastný prístup a efektivitu.

    • Najbežnejšie vyhľadávacie algoritmy:
      • Lineárne vyhľadávanie : Iteratívne vyhľadávanie z jedného konca na druhý.
      • Binárne vyhľadávanie : Vyhľadávanie rozdeľuj a panuj v triedenom poli, pričom pri každej iterácii sa priestor vyhľadávania zmenšuje na polovicu.
      • Ternárne vyhľadávanie : Vyhľadávanie rozdeľuj a panuj v triedenom poli, pričom pri každej iterácii sa priestor vyhľadávania rozdelí na tri časti.
    • Ďalšie vyhľadávacie algoritmy:
      • Prejsť na vyhľadávanie
      • Vyhľadávanie interpolácie
      • Exponenciálne vyhľadávanie
    • Súvisiace témy:
      • Precvičte si úlohy na vyhľadávacom algoritme

    2. Algoritmus triedenia

    Algoritmy triedenia sa používajú na usporiadanie prvkov zoznamu v určitom poradí, ako je numerické alebo abecedné. Organizuje položky systematickým spôsobom, čím uľahčuje vyhľadávanie a prístup k špecifickým prvkom.

    Existuje mnoho rôznych typov triediacich algoritmov. Niektoré široko používané algoritmy sú:

    ubuntu build nevyhnutné
    Algoritmus triedenia Popis
    Bublinové triedenie Iteračne porovnáva susedné prvky a zamieňa ich, ak sú mimo poradia. Najväčší prvok pri každom prechode prebubláva na koniec zoznamu.
    Výber Zoradiť Vyhľadá minimálny prvok v nezoradenej časti zoznamu a vymení ho s prvým prvkom. Tento postup sa opakuje, kým sa nezoradí celý zoznam.
    Triedenie vloženia Vytvára zoradený zoznam po jednotlivých prvkoch vložením každého nezoradeného prvku na jeho správnu pozíciu v zoradenej časti.
    Rýchle triedenie Algoritmus rozdelenia a panovania, ktorý vyberie prvok pivot, rozdelí zoznam na dva podzoznamy na základe pivot a rekurzívne aplikuje rovnaký proces na podzoznamy.
    Zlúčiť triedenie Ďalší algoritmus rozdeľuj a panuj, ktorý rekurzívne rozdeľuje zoznam na menšie podzoznamy, triedi ich a potom ich opäť spája, aby získal zoradený zoznam.

    Súvisiace témy:

    • Návod na algoritmus triedenia
    • Najlepšie triedenie otázok a problémov na pohovore
    • Precvičte si problémy s triediacim algoritmom

    3. Algoritmus rozdeľuj a panuj

    Rozdeľuj a panuj Algoritmy sa riadia rekurzívnou stratégiou na riešenie problémov ich rozdelením na menšie čiastkové problémy, riešením týchto čiastkových problémov a kombináciou riešení na získanie konečného riešenia.

    Kroky:

    1. Rozdeliť : Rozdeľte problém na menšie, nezávislé podproblémy.
    2. dobyť : Rekurzívne riešte každý podproblém.
    3. Skombinujte : Zlúčením riešení čiastkových problémov získate konečné riešenie.

    Príklady:

    • Zlúčiť triedenie: Rozdelí pole na dve polovice, každú polovicu zoradí rekurzívne a zlúči zoradené polovice.
    • Rýchle zoradenie: Vyberie prvok pivot, rozdelí pole do dvoch podpolí na základe pivot a rekurzívne zoradí každé podpole.
    • Binárne vyhľadávanie: Opakovane rozdeľuje vyhľadávací priestor na polovicu, kým sa nenájde cieľový prvok alebo kým sa nevyčerpá priestor vyhľadávania.

    Súvisiace články:

    • Návod Rozdeľ a panuj
    • Precvičte si úlohy na algoritme Rozdeľ a panuj

    4. Chamtivé algoritmy

    Ako už názov napovedá, tento algoritmus zostavuje riešenie jeden kus po druhom a vyberá ďalší kus, ktorý poskytuje najzrejmejší a okamžitý úžitok, t. j. ktorý je v danom momente najoptimálnejšou voľbou. Takže problémy, pri ktorých výber lokálne optimálneho vedie aj ku globálnym riešeniam, sú pre Greedyho najvhodnejšie.

    Niektoré dôležité problémy chamtivých algoritmov sú:

    Algoritmus Popis
    Frakčný batoh Nájdite maximálnu celkovú hodnotu položiek, ktoré možno umiestniť do batohu, čo umožňuje čiastočné zahrnutie položiek.
    Dijkstrov algoritmus Nájde najkratšiu cestu zo zdrojového vrcholu do všetkých ostatných vrcholov vo váženom grafe.
    Kruskalov algoritmus Nájde minimálnu kostru váženého grafu.
    Huffmanovo kódovanie Vytvára optimálny prefixový kód pre množinu symbolov, čím sa minimalizuje celková dĺžka kódovania.

    Súvisiace články:

    • Výukový program Greedy Algorithm
    • Precvičte si problémy na Greedyho algoritme

    5. Rekurzia

    Rekurzia je programovacia technika, kde funkcia volá samu seba v rámci svojej vlastnej definície. Zvyčajne sa používa na riešenie problémov, ktoré možno rozdeliť na menšie prípady toho istého problému. Napríklad: Hanojské veže (TOH) , Faktorový výpočet a Fibonacciho sekvencia atď.

    Kroky :

    • Základný prípad : Definujte podmienku, ktorá zastaví rekurzívne volania a poskytne riešenie.
    • Rekurzívny prípad : Definujte kroky na rozdelenie problému na menšie inštancie a uskutočnenie rekurzívnych volaní.
    • Návrat : Vráťte riešenie z rekurzívnych volaní a skombinujte ich, aby ste vyriešili pôvodný problém.

    Pointa, ktorá robí rekurziu jedným z najpoužívanejších algoritmov je, že tvorí základ pre mnoho ďalších algoritmov, ako napr. Prechody stromov , Prechádzanie grafom , Algoritmy rozdeľuj a panuj a Algoritmy spätného sledovania .

    Súvisiace témy:

    6. Algoritmus spätného sledovania

    Ako už bolo spomenuté, Backtracking algoritmus je odvodený od rekurzívneho algoritmu s možnosťou vrátiť sa späť, ak rekurzívne riešenie zlyhá, t.j. v prípade zlyhania riešenia sa program vráti do momentu, kedy zlyhalo a stavia na inom riešení. V podstate teda skúša všetky možné riešenia a nájde to správne.

    Niektoré dôležité a najbežnejšie problémy algoritmov spätného sledovania, ktoré musíte vyriešiť pred tým, ako sa pohnete ďalej, sú:

    Problém Popis
    Problém s rytierskym zájazdom Nájdenie postupnosti ťahov rytiera na šachovnici tak, aby navštívil každé pole práve raz.
    Potkan v bludisku Nájdenie cesty z východiskovej pozície k východu v bludisku s prekážkami znázornenými ako steny.
    Problém N-Queen Umiestnenie N dám na šachovnicu N × N tak, aby na seba neútočili žiadne dve dámy.
    Problém podmnožiny súčtu Určenie, či existuje podmnožina danej množiny s daným súčtom.
    sudoku Riešenie mriežkovej hádanky 9×9 s číslami od 1 do 9 tak, že každý riadok, stĺpec a podmriežka 3×3 obsahuje všetky číslice bez opakovania.

    Súvisiaci článok:

    • Backtracking Tutorial
    • Precvičte si problémy na algoritme Backtracking

    7. Dynamické programovanie

    Dynamické programovanie je metóda používaná v matematike a informatike na riešenie zložitých problémov ich rozdelením na jednoduchšie podproblémy. Tým, že sa každý podproblém rieši iba raz a výsledky sa ukladajú, vyhýba sa nadbytočným výpočtom, čo vedie k efektívnejším riešeniam širokého spektra problémov.

    Kľúčové pojmy:

    • Optimálna spodná konštrukcia : Optimálne riešenie problému možno skonštruovať z optimálnych riešení jeho podproblémov.
    • Prekrývajúce sa podproblémy : Podproblémy sa často opakujú vo väčšom probléme, čo vedie k nadbytočným výpočtom.
    • Zapamätanie / Tabuľkovanie : Ukladanie riešení čiastkových problémov, aby sa zabránilo prepočítavaniu.

    Niektoré dôležité a najbežnejšie problémy algoritmov dynamického programovania, ktoré musíte vyriešiť predtým, ako budete pokračovať, sú:

    Problém Popis
    Fibonacciho sekvencia Generovanie Fibonacciho čísel pomocou dynamického programovania, aby sa predišlo nadbytočným výpočtom.
    Najdlhšia spoločná sekvencia Nájdenie najdlhšej podsekvencie spoločnej pre dve postupnosti.
    Najdlhšia rastúca následná sekvencia Nájdenie najdlhšej podsekvencie danej postupnosti, v ktorej sú prvky zoradené v rastúcom poradí.
    0/1 Problém s batohom Určenie maximálnej hodnoty, ktorú možno získať výberom položiek s danými hmotnosťami a hodnotami, pričom sa neprekročí stanovený hmotnostný limit.
    Problém rezania tyče Maximalizácia zisku rozrezaním tyče danej dĺžky na kusy a ich predajom podľa daných cien.
    Problém výmeny mincí Určenie počtu spôsobov, ako vykonať zmenu pre danú sumu pomocou danej sady nominálnych hodnôt mincí.
    Upraviť vzdialenosť Nájdenie minimálneho počtu operácií (vloženie, vymazanie, nahradenie) potrebných na konverziu jedného reťazca na iný.
    Problém podmnožiny súčtu Určenie, či existuje podmnožina danej množiny s daným súčtom.
    Najdlhšia palindromická sekvencia Nájdenie najdlhšej podsekvencie danej sekvencie, ktorou je palindróm.
    Maximálna čiastková suma Nájdenie súvislého podpola s najväčším súčtom v rámci daného jednorozmerného poľa.
    Partition Equal Subset Sum Určenie, či je možné rozdeliť danú množinu na dve podmnožiny s rovnakým súčtom.
    Cesta minimálnych nákladov Nájdenie cesty minimálnych nákladov z ľavého horného rohu do pravého dolného rohu danej mriežky.
    Maximálny produkt Subarray Nájdenie súvislého podpola s najväčším produktom v rámci daného jednorozmerného poľa.

    Súvisiace články:

    • Tabuľka verzus memorizácia
    • Ako vyriešiť problém dynamického programovania?
    • Príručka dynamického programovania
    • 50 najčastejších problémov s kódovaním dynamického programovania pre rozhovory
    • Precvičte si úlohy na algoritme dynamického programovania

    8. Grafové algoritmy :

    Grafové algoritmy v dátových štruktúrach a algoritmoch (DSA) sú súborom techník a metód používaných na riešenie problémov súvisiacich s grafmi, ktoré sú súborom uzlov a hrán. Tieto algoritmy sú určené na vykonávanie rôznych operácií s grafmi, ako napr hľadanie, prechádzanie, hľadanie najkratšej cesty a určovanie konektivitu . Sú nevyhnutné na riešenie širokého spektra problémov v reálnom svete vrátane smerovania siete, analýzy sociálnych sietí a prideľovania zdrojov.

    Téma

    Popis témy

    Algoritmus Popis algoritmu
    Prechádzanie grafom

    Techniky pre návštevu všetkých vrcholov v grafe.

    Hĺbkové vyhľadávanie (DFS) Preskúma tak ďaleko, ako je to možné, pozdĺž každej vetvy, kým sa vráti späť.
    Breadth-First Search (BFS) Preskúma susedné vrcholy pred prechodom na ďalšiu úroveň vrcholov.

    Minimálne kostry

    Minimum Spanning Trees sú najmenšie stromy, ktoré spájajú všetky uzly v grafe bez vytvárania cyklov, dosiahnuté pridaním čo najkratších hrán.

    Kruskalov algoritmus

    Nájde minimálnu kostru pre spojený vážený graf. Pridáva najmenšiu hranu hmotnosti, ktorá netvorí cyklus.

    Primov algoritmus

    Nájde tiež minimálnu kostru pre spojený vážený graf. Pridáva najmenšiu hranu hmotnosti, ktorá spája dva stromy.

    Topologické triedenie

    Topologické triedenie je lineárne usporiadanie vrcholov v orientovanom acyklickom grafe (DAG) tak, že pre každú smerovanú hranu od vrcholu u k vrcholu v je u v poradí pred v.

    Kahnov algoritmus Kahnov algoritmus nájde topologické usporiadanie smerovaného acyklického grafu (DAG).
    Algoritmus založený na DFS Algoritmus založený na DFS používa hĺbkové prvé vyhľadávanie na vykonanie topologického triedenia v riadenom acyklickom grafe (DAG).

    Najkratšia cesta

    Najkratšia cesta v grafe je cesta medzi dvoma vrcholmi v grafe, ktorá má na svojich okrajoch minimálny súčet váh v porovnaní so všetkými ostatnými cestami medzi rovnakými dvoma vrcholmi.

    Dijkstrov algoritmus

    Chamtivý algoritmus na nájdenie najkratšej cesty medzi všetkými uzlami v čase O(E * V logV).

    Floyd-Warshallov algoritmus

    Nájde najkratšiu cestu medzi všetkými pármi uzlov v čase O(V^3).

    Algoritmus Bellmana Forda

    Nájde najkratšiu cestu z jedného zdroja v čase O(V * E).

    Johnsonov algoritmus

    Nájde najkratšie cesty medzi všetkými pármi vrcholov v čase O(V^2 logV + V * E).

    Silne pripojené komponenty

    Silne spojený komponent (SCC) orientovaného grafu je maximálna množina vrcholov tak, že z každého vrcholu v množine existuje cesta ku každému druhému vrcholu v množine.

    Kosarajuov algoritmus

    Kosaraju's Algorithm je dvojpriechodový algoritmus, ktorý efektívne nájde silne spojené komponenty (SCC) orientovaného grafu.

    Tarjanov algoritmus

    Tarjanov algoritmus je ďalším účinným algoritmom na nájdenie SCC v orientovanom grafe

    Súvisiace témy:

    • Grafický návod
    • 50 najčastejších problémov s kódovaním grafov pri rozhovoroch
    • Cvičný problém s grafovými algoritmami

    9 . Vyhľadávanie vzorov

    Vyhľadávanie vzorov je základná technika v DSA používaná na nájdenie výskytov špecifického vzoru v danom texte.

    Nižšie sú uvedené niektoré štandardné algoritmy vyhľadávania vzorov:

    Algoritmus Popis Časová zložitosť
    Hrubou silou Porovnáva vzor s každým podreťazcom textu O(mn)
    Knuth-Morris-Pratt Používa predpočítanú funkciu zlyhania na preskočenie nepotrebných porovnaní O(m + n)
    Boyer-Moore Porovnáva vzor sprava doľava, pričom znaky preskakuje na základe poslednej nezhody O(mn)
    Rabin-Karp Používa hašovanie na rýchlu kontrolu potenciálnych zhôd O(m + n)

    Súvisiace témy:

    • Návod na vyhľadávanie vzorov
    • Cvičte problém zapnutý Vyhľadávanie vzorov

    10 . Matematické algoritmy

    Matematické algoritmy sú triedou algoritmov, ktoré riešia problémy súvisiace s matematickými konceptmi. Sú široko používané v rôznych oblastiach, vrátane počítačovej grafiky, numerickej analýzy, optimalizácie a kryptografie.

    Algoritmus Popis
    GCD a LCM Nájdite najväčšieho spoločného deliteľa a najmenšieho spoločného násobku dvoch čísel.
    Prvotná faktorizácia Rozložte číslo na jeho prvočísla.
    Fibonacciho čísla Vytvorte Fibonacciho postupnosť, kde každé číslo je súčtom dvoch predchádzajúcich.
    Katalánske čísla Spočítajte počet platných výrazov s daným počtom párov zátvoriek.
    Modulárna aritmetika Vykonajte aritmetické operácie s číslami modulo danej hodnoty.
    Funkcia Euler Totient Spočítajte počet kladných celých čísel menších ako dané číslo, ktoré sú relatívne prvočíslo.
    nCr výpočty Vypočítajte binomický koeficient, ktorý predstavuje počet spôsobov výberu r prvkov z množiny n prvkov.
    Prvočísla a testy prvočíselnosti Zistite, či je dané číslo prvočíslo, a efektívne nájdite prvočísla.
    Sitové algoritmy Nájdite všetky prvočísla do daného limitu.

    Súvisiace témy:

    • Cvičný problém s matematickým algoritmom

    11. Geometrické algoritmy

    Geometrické algoritmy sú triedou algoritmov, ktoré riešia problémy súvisiace s geometriou. Geometrické algoritmy sú nevyhnutné na riešenie širokého spektra problémov v informatike, ako napríklad:

    Algoritmus Popis
    Konvexný trup Nájde najmenší konvexný mnohouholník, ktorý obsahuje množinu bodov.
    Najbližšia dvojica bodov Nájde dva body v množine, ktoré sú k sebe najbližšie.
    Priesečník liniek Určuje, či sa dve priamky pretínajú, a ak áno, nájde priesečník.
    Bod v polygóne Určuje, či je daný bod vnútri alebo mimo mnohouholníka.

    Súvisiace témy:

    • Cvičný problém s geometrickými algoritmami

    12. Bitové algoritmy

    Bitové algoritmy sú algoritmy, ktoré pracujú s jednotlivými bitmi čísel. Tieto algoritmy manipulujú s binárnou reprezentáciou čísel na vykonávanie úloh, ako je bitová manipulácia, bitové logické operácie (AND, OR, XOR), posúvanie bitov , a nastavenie alebo vymazanie konkrétnych bitov v rámci čísla. Bitové algoritmy sa bežne používajú v nízkoúrovňové programovanie, kryptografia a optimalizačné úlohy kde je potrebná efektívna manipulácia s jednotlivými bitmi.

    slnečný deol
    Téma Popis
    Bitový posun Posúva bity doľava alebo doprava o určený počet pozícií.
    Ľavý posun (<<) Posúva bity doľava, čím sa číslo efektívne vynásobí 2.
    Posun doprava (>>) Posúva bity doprava, čím efektívne vydelí číslo 2.
    Extrahujte bity Použitie masiek na extrahovanie konkrétnych bitov z celého čísla.
    Nastavenie bitov Použitie masiek na nastavenie konkrétnych bitov na 1 v celom čísle.
    Čistenie bitov Použitie masiek na nastavenie konkrétnych bitov na 0 v celom čísle.
    Prepínanie bitov Použitie XOR (^) na prepínanie konkrétnych bitov v celom čísle.
    Počítanie Set bitov Počítanie počtu nastavených bitov (1s) v celom čísle.

    Súvisiace témy:

    • Kurz bitových algoritmov
    • Cvičný problém s bitovými algoritmami

    13. Randomizované algoritmy

    Randomizované algoritmy sú algoritmy, ktoré používajú náhodnosť na riešenie problémov. Na dosiahnutie svojich cieľov využívajú náhodné vstupy, čo často vedie k jednoduchším alebo efektívnejším riešeniam.

    Typy randomizovaných algoritmov:

    • Las Vegas : Vždy vytvára správny výsledok, ale doba trvania je náhodná.
    • Monte Carlo : Môže priniesť nesprávny výsledok s malou pravdepodobnosťou, ale doba chodu je zvyčajne rýchlejšia.

    Dôležité algoritmy, ktoré používajú algoritmy náhodnosti:

    Algoritmus Popis
    QuickSort Randomizovaný triediaci algoritmus s časovou zložitosťou priemerného prípadu O(n log n).
    Preskočiť zoznam Randomizovaná dátová štruktúra, ktorá poskytuje rýchle operácie vyhľadávania a vkladania.
    Bloom Filter Štruktúra pravdepodobnostných údajov pre efektívne testovanie členstva v množine.

    14. Algoritmus vetvenia a viazania

    The Algoritmus vetvenia a viazania je metóda používaná v problémoch kombinatorickej optimalizácie na systematické hľadanie najlepšieho riešenia. Funguje tak, že sa problém rozdelí na menšie podproblémy alebo vetvy a potom sa určité vetvy odstránia na základe hraníc optimálneho riešenia. Tento proces pokračuje, kým sa nenájde najlepšie riešenie alebo kým sa nepreskúmajú všetky vetvy.

    Štandardné problémy s vetveným a viazaným algoritmom:

    Jedinečný problém Popis
    0/1 batoh pomocou vetvenia a viazania Podrobnosti o implementácii vetvy a viazaného prístupu na riešenie problému batohu 0/1.
    0/1 batoh pomocou vetvenia a viazania s najnižšou cenou Riešenie problému batohu 0/1 pomocou najlacnejšej vetvy a techniky viazania.
    8 hlavolam Problém s použitím Branch and Bound Aplikácia vetvy a viazaná na vyriešenie problému 8 puzzle, populárnej posuvnej logickej hry.
    N Queen Problém s použitím Branch and Bound Využite vetvu a musíte nájsť riešenia problému N Queens, klasického šachového problému.

    Súvisiace témy:

    • Výukový program vetveného a viazaného algoritmu

    Prečítajte si o zložitostiach

    V dátových štruktúrach a algoritmoch (DSA) je hlavným cieľom efektívne a efektívne riešenie problémov. Na určenie efektívnosti programu sa pozrieme na dva typy zložitosti:

    1. Časová zložitosť : Toto nám hovorí, koľko času trvá spustenie nášho kódu.
    2. Vesmírna zložitosť : Toto nám hovorí, koľko pamäte používa náš kód.

    Asymptotická notácia :

    Na porovnanie účinnosti algoritmov používame asymptotickú notáciu, matematický nástroj, ktorý odhaduje čas založené na vstupná veľkosť bez spustenia kódu. Zameriava sa na počet základných operácií v programe.

    Notový zápis Popis
    Big-O (Ο) Opisuje scenár najhoršieho prípadu a poskytuje hornú časovú hranicu algoritmu.
    Omega (Ω) Opisuje najlepší možný scenár a ponúka nižšiu časovú hranicu algoritmu.
    theta (θ) Predstavuje priemernú zložitosť algoritmu algoritmu.

    Najbežnejšie používaný zápis na analýzu kódu je Veľký O zápis , ktorý poskytuje horný limit doby chodu alebo využitia pamäte, pokiaľ ide o veľkosť vstupu.

    Súvisiace témy:

    Cvičenie problémových cheatov:

    Vybrané zoznamy problémov z nižšie uvedených článkov:

    • Plán DSA od Sandeep Jain
    • SDE SHEET – Kompletný sprievodca prípravou SDE
    • techcodeview.com Master Sheet – Zoznam všetkých Cheat Sheetov