logo

Naučte se datové struktury a algoritmy | Výukový program DSA

Datové struktury a algoritmy (DSA) odkazují na studium metod organizace a ukládání dat a návrh procedur (algoritmů) pro řešení problémů, které na těchto datových strukturách pracují. DSA je jednou z nejdůležitějších dovedností, kterou musí mít každý student informatiky. Často je vidět, že lidé s dobrými znalostmi těchto technologií jsou lepšími programátory než ostatní, a tak prolomí rozhovory téměř každého technologického giganta. Tento Výukový program DSA si klade za cíl pomoci vám rychle a snadno se naučit datové struktury a algoritmy (DSA).



Obsah

  • Naučte se algoritmy
  • Přečtěte si o složitosti
  • Procvičte si problémové cheaty
  • Úplný formulář DSA

    Termín DSA znamená Datové struktury a algoritmy , v kontextu informatiky.

    Co je DSA?

    Datové struktury a algoritmy (DSA) odkazují na studium metod organizace a ukládání dat a návrh procedur (algoritmů) pro řešení problémů, které na těchto datových strukturách pracují.



    Jak se naučit DSA?

    První a nejdůležitější věcí je rozdělení celkového postupu na malé kousky, které je třeba provést postupně. Celý proces učení DSA od nuly lze rozdělit do 5 částí:

    1. Naučte se alespoň jeden programovací jazyk (Necháme to na vašem výběru.)
    2. Naučte se datové struktury
    3. Naučte se algoritmy
    4. Přečtěte si o složitosti času a prostoru
    5. Cvičné problémy na DSA
    Jak se naučit DSA?

    Jak se naučit DSA?

    Doufáme, že jste se naučili programovací jazyk podle svého výběru, pojďme se posunout vpřed dalším krokem k naučení DSA v tomto tutoriálu DSA.



    Zde přichází nejdůležitější a nejočekávanější fáze plánu pro učení struktury dat a algoritmu – fáze, kdy se začnete učit o DSA. Téma DSA se skládá ze dvou částí:

    • Datové struktury
    • Algoritmy

    Ačkoli jsou to dvě různé věci, jsou velmi propojené a je velmi důležité sledovat správnou cestu, abyste se je naučili co nejefektivněji. Pokud nevíte, který z nich se naučit jako první, doporučujeme vám projít si naši podrobnou analýzu na toto téma: Zde jsme sledovali tok učení datové struktury a poté nejpříbuznější a nejdůležitější algoritmy používané touto datovou strukturou.

    Naučte se datové struktury

    Datové struktury jsou základní komponenty, které pomáhají efektivně organizovat a ukládat data do paměti počítače. Poskytují způsob, jak efektivně spravovat data a manipulovat s nimi, což umožňuje rychlejší operace přístupu, vkládání a mazání. Mezi běžné datové struktury patří pole, propojené seznamy, zásobníky, fronty, stromy a grafy , z nichž každá slouží specifickým účelům na základě požadavků daného problému. Pochopení datových struktur je základem pro navrhování účinných algoritmů a optimalizaci výkonu softwaru.

    Pole je lineární datová struktura, která ukládá kolekci prvků stejného datového typu. Prvky mají přidělenou souvislou paměť, což umožňuje přístup v konstantním čase. Každý prvek má jedinečné indexové číslo.

    • Operace na poli:
      • Průjezd : Iterace přes prvky pole.
      • Vložení : Přidání prvku do pole na konkrétním indexu.
      • Vymazání : Odebrání prvku z pole na určitém indexu.
      • Hledání : Hledání prvku v poli podle jeho hodnoty nebo indexu.
    • Typy polí :
      • Jednorozměrné pole : Jednoduché pole s jedním rozměrem.
      • Vícerozměrné pole : Pole s více rozměry, jako je matice.
    • Aplikace Array :
      • Ukládání dat sekvenčním způsobem
      • Implementace front, zásobníků a dalších datových struktur
      • Reprezentující matice a tabulky
    • Související témata na poli:
      • Výukový program pro pole
      • 50 hlavních problémů s kódováním pole pro rozhovory
      • Procvičte si problémy na polích

    2. Řetězec

    A tětiva je posloupnost znaků, která se obvykle používá k reprezentaci textu. Je považován za datový typ, který umožňuje manipulaci a zpracování textových dat v počítačových programech.

    • Operace na řetězci :
      • Zřetězení : Spojení dvou řetězců dohromady.
      • Srovnání : Porovnání dvou řetězců lexikograficky.
      • Podřetězec extrakce : Extrahování podřetězce z řetězce.
      • Vyhledávání : Hledání podřetězce v řetězci.
      • Modifikace : Změna nebo nahrazení znaků v řetězci.
    • Aplikace String :
      • Zpracování textu
      • Shoda vzorů
      • Ověření dat
      • Správa databáze
    • Související příspěvky:
      • Strunový návod
      • 50 hlavních problémů s kódováním řetězců pro rozhovory
      • Cvičné problémy na provázku

    3. Propojené seznamy

    A spojový seznam je lineární datová struktura, která ukládá data do uzlů, které jsou propojeny ukazateli. Na rozdíl od polí nejsou propojené seznamy uloženy v souvislých paměťových místech.

    • Charakteristika propojeného seznamu:
      • Dynamický : Velikost propojených seznamů lze snadno změnit přidáním nebo odebráním uzlů.
      • Nesouvislé : Uzly jsou uloženy v náhodných paměťových místech a propojeny ukazateli.
      • Sekvenční přístup : K uzlům lze přistupovat pouze postupně, počínaje od začátku seznamu.
    • Operace na propojeném seznamu:
      • Stvoření : Vytvoření nového propojeného seznamu nebo přidání nového uzlu do existujícího seznamu.
      • Průjezd : Iterování seznamu a přístup ke každému uzlu.
      • Vložení : Přidání nového uzlu na konkrétní pozici v seznamu.
      • Vymazání : Odebrání uzlu ze seznamu.
      • Vyhledávání : Hledání uzlu s konkrétní hodnotou v seznamu.
    • Typy propojeného seznamu :
      • Jednotlivě propojený seznam : Každý uzel ukazuje na další uzel v seznamu.
      • Dvojitě propojený seznam : Každý uzel ukazuje na další i předchozí uzel v seznamu.
      • Kruhový propojený seznam : Poslední uzel ukazuje zpět na první uzel a tvoří kruhovou smyčku.
    • Aplikace Linked List :
      • Propojené seznamy se používají v různých aplikacích, včetně:
      • Implementace front a zásobníků
      • Reprezentace grafů a stromů
      • Udržování objednaných dat
      • Správa paměti
    • Související témata:
      • Výukový program propojeného seznamu
      • 50 hlavních problémů na propojeném seznamu pro rozhovory
      • Procvičte si problémy na propojených seznamech

    4. Matice/Mřížka

    A matice je dvourozměrné pole prvků, uspořádaných do řádků a sloupců. Je reprezentován jako obdélníková mřížka s každým prvkem na průsečíku řádku a sloupce.

    • Klíčové koncepty:
      • Řádky : Vodorovné čáry prvků v matici.
      • Sloupce : Svislé čáry prvků v matici.
      • Rozměry : Počet řádků a sloupců v matici (např. matice 3×4 má 3 řádky a 4 sloupce).
      • Živel Přístup : K prvkům lze přistupovat pomocí řádkových a sloupcových indexů (např. M[2][3] odkazuje na prvek v řádku 2, sloupci 3).
    • Aplikace Matrix/Grid :
      • Zpracování obrazu
      • Analýza dat
      • Problémy s optimalizací
    • Související příspěvky:
      • Výukový program Matrix/Mřížka
      • 50 nejlepších problémů na matici/mřížce pro rozhovory
      • Cvičné problémy na matici/mřížce

    5. Zásobník

    Zásobník je lineární datová struktura, která sleduje určité pořadí, ve kterém jsou operace prováděny. Objednávka může být LIFO (Last In First Out) nebo FILO (First In Last Out) . LIFO znamená, že prvek, který je vložen jako poslední, vyjde jako první a ŘÁDEK znamená, že prvek, který je vložen jako první, vyjde jako poslední.

    • Operace na Stacku :
      • TAM : Přidá prvek do horní části zásobníku
      • Pop : Odebere a vrátí prvek v horní části zásobníku
      • Podívejte se : Vrátí prvek v horní části zásobníku, aniž by jej odstranil
      • Velikost : Vrátí počet prvků v zásobníku
      • Je prázdný : Zkontroluje, zda je zásobník prázdný
    • Aplikace Stack :
      • Volání funkcí
      • Hodnocení výrazů
      • Zpětné sledování
      • Operace zpět/znovu
    • Související témata na Stack:
      • Výukový program zásobníku
      • Top 50 problémů v zásobníku pro rozhovory
      • Procvičte si problémy na Stacku

    6. Fronta

    A Fronta Struktura dat je základní koncept v informatice používaný pro ukládání a správu dat v určitém pořadí. Řídí se principem První dovnitř, první ven ( FIFO ), kde první prvek přidaný do fronty je první, který má být odstraněn

    • Operace ve frontě :
      • Zařadit do fronty : Přidá prvek do zadní části fronty
      • V souladu s tím : Odebere prvek z přední části fronty
      • Podívejte se : Obnoví přední prvek bez jeho odstranění
      • Je prázdný : Kontroluje, zda je fronta prázdná
      • Je plný : Kontroluje, zda je fronta plná
    • Typ fronty :
      • Kruhová fronta : Poslední prvek se připojí k prvnímu prvku
      • Oboustranná fronta (Deque) : Operace lze provádět z obou konců
      • Prioritní fronta : Prvky jsou uspořádány podle priority
    • Aplikace Queue :
      • Plánování práce
      • Řazení zpráv do fronty
      • Simulační modelování
      • Ukládání dat do vyrovnávací paměti
    • Související témata:
      • Výukový program fronty
      • 50 největších problémů ve frontě na pohovory
      • Procvičte si problémy ve frontě

    7. Halda

    A Halda je kompletní binární stromová datová struktura, která splňuje vlastnost haldy: pro každý uzel je hodnota jeho potomků menší nebo rovna jeho vlastní hodnotě. K implementaci se obvykle používají haldy prioritní fronty , kde nejmenší (nebo největší) prvek je vždy u kořene stromu.

    • Operace haldy :
      • Vložit : Přidá nový prvek do haldy při zachování vlastností haldy.
      • Extrakt-Max/Extract-Min : Odebere kořenový prvek a restrukturalizuje haldu.
      • Tlačítko zvýšení/snížení : Aktualizuje hodnotu uzlu a restrukturalizuje haldu.
    • Typy haldy :
      • Max-Hroma : Kořenový uzel má mezi svými potomky maximální hodnotu.
      • Min-Hromad : Kořenový uzel má mezi svými potomky minimální hodnotu.
    • Aplikace haldy :
      • Prioritní fronty
      • Řazení
      • Grafové algoritmy (např. Dijkstrův algoritmus)
    • Související příspěvky:
      • Výuka haldy
      • Top 50 problémů na hromadě pro rozhovory
      • Cvičné problémy na haldě

    8. hash

    Hašování je technika, která generuje výstup s pevnou velikostí (hodnotu hash) ze vstupu proměnné velikosti pomocí matematických vzorců tzv. hashovací funkce . Hašování se používá k určení indexu nebo umístění pro uložení položky v datové struktuře, což umožňuje efektivní vyhledávání a vkládání.

    • Klíčové koncepty:
      • Hashovací funkce : Matematická funkce, která mapuje vstup na hodnotu hash.
      • Tabulka hash : Datová struktura, která ukládá páry klíč–hodnota, kde klíč je hodnota hash a hodnota jsou skutečná data.
      • Kolize : Když dva různé klíče vytvářejí stejnou hodnotu hash.
    • Typy hashovacích funkcí :
      • Metoda dělení : Vydělí vstup konstantou a zbytek použije jako hash hodnotu.
      • Střední náměstí Metoda: Učiní druhou mocninu vstupu a vezme střední číslice jako hash hodnotu.
      • Metoda skládání : Rozdělí vstup do bloků stejné velikosti a sečte je, aby se získala hodnota hash.
      • Metoda násobení : Vynásobí vstup konstantou a použije zlomkovou část jako hodnotu hash.
    • Techniky řešení kolize :
      • Oddělené řetězení (otevřené hašování) : Uloží kolidující prvky v propojeném seznamu s odpovídající hodnotou hash.
      • Otevřené adresování (uzavřené hašování) : Používá různé strategie k nalezení alternativního umístění pro kolidující prvky v tabulce hash.
    • Aplikace hashování :
      • Efektivní ukládání a načítání dat v databázích a souborových systémech.
      • Ověřování hesel a digitálních podpisů.
      • Distribuce požadavků na více serverů.
      • Generování bezpečných hashů pro integritu dat a ověřování.
    • Související příspěvky:
      • Výukový program hash
      • Praktické problémy s hašováním

    9. Strom

    A strom je nelineární hierarchická datová struktura skládající se z uzlů spojených hranami, přičemž horní uzel se nazývá kořen a uzly mají podřízené uzly. Používá se v informatice pro efektivní organizaci dat.

    jedinečný klíč mysql
    • Přechod stromu : Metody procházení stromů se používají k návštěvě a zpracování uzlů ve stromové datové struktuře. Tři běžné způsoby procházení jsou:
      • V pořádku : Navštivte levý podstrom, aktuální uzel a poté pravý podstrom.
      • Předobjednávka : Navštivte aktuální uzel, levý podstrom, poté pravý podstrom.
      • Po objednání : Navštivte levý podstrom, pravý podstrom a poté aktuální uzel.
    • Klasifikace stromů:
      • Klasifikace Stromy odkazují na seskupování stromů na základě určitých charakteristik nebo kritérií. To může zahrnovat kategorizaci stromů na základě jejich faktoru rovnováhy, stupně uzlů, vlastností řazení atd. Níže jsou uvedeny některé důležité klasifikace stromu.
    Klasifikace Popis

    Typ

    Popis

    Podle stupně

    Stromy lze klasifikovat na základě maximálního počtu dětí, které může mít každý uzel.

    Binární strom

    Každý uzel má nejvýše dva potomky.

    Ternární strom

    Každý uzel má nejvýše tři potomky.

    N-ary strom

    Každý uzel má nejvýše N potomků.

    Objednáním

    Stromy lze klasifikovat na základě pořadí uzlů a podstromů

    Binární vyhledávací strom (BST)

    Levé dítě

    Halda

    Specializovaný binární strom s vlastností haldy.

    Podle rovnováhy

    Stromy lze klasifikovat podle toho, jak dobře jsou vyvážené.

    Vyvážený strom

    Výšky podstromů se liší nejvýše o jednu. Příklady zahrnují AVL stromy a červeno-černé stromy.

    Nevyvážený strom

    Výšky podstromů se mohou výrazně lišit, což ovlivňuje výkon při operacích, jako je vyhledávání a vkládání.

    • Aplikace stromů:
      • Souborové systémy
      • Databáze
      • XML dokumenty
      • Umělá inteligence
    • Související příspěvky:
      • Výukový program pro strom
      • 50 nejčastějších problémů s kódováním stromu
      • Procvičte si problémy na stromě

    10. Graf

    A Graf je nelineární datová struktura sestávající z konečné množiny vrcholů (nebo uzlů) a množiny hran, které spojují dvojici uzlů.

    Naučte se algoritmy

    Jakmile si vyjasníte pojmy Datové struktury , nyní je čas začít svou cestu přes Algoritmy . Na základě typu povahy a použití jsou algoritmy seskupeny do několika kategorií, jak je uvedeno níže:

    1. Algoritmus hledání

    Vyhledávací algoritmy se používají k vyhledání konkrétních dat v rámci větší sady dat. Pomáhá najít přítomnost cílové hodnoty v datech. Existují různé typy vyhledávacích algoritmů, z nichž každý má svůj vlastní přístup a efektivitu.

    • Nejběžnější vyhledávací algoritmy:
      • Lineární vyhledávání : Iterativní vyhledávání z jednoho konce na druhý.
      • Binární vyhledávání : Vyhledávání rozděl a panuj v setříděném poli, přičemž se při každé iteraci zmenší prostor pro vyhledávání na polovinu.
      • Ternární vyhledávání : Vyhledávání rozděl a panuj v setříděném poli, přičemž v každé iteraci rozděluje vyhledávací prostor na tři části.
    • Další vyhledávací algoritmy:
      • Skokové vyhledávání
      • Hledání interpolace
      • Exponenciální vyhledávání
    • Související témata:
      • Procvičte si úlohy na vyhledávacím algoritmu

    2. Algoritmus řazení

    Algoritmy řazení se používají k uspořádání prvků seznamu v určitém pořadí, jako je numerické nebo abecední. Organizuje položky systematickým způsobem, což usnadňuje vyhledávání a přístup ke konkrétním prvkům.

    Existuje mnoho různých typů třídicích algoritmů. Některé široce používané algoritmy jsou:

    Algoritmus řazení Popis
    Bublinové řazení Iterativně porovnává sousední prvky a zaměňuje je, pokud jsou mimo pořadí. Největší prvek při každém průchodu probublává na konec seznamu.
    Výběr Seřadit Vyhledá minimální prvek v neseřazené části seznamu a zamění jej s prvním prvkem. Tento postup opakuje, dokud není celý seznam setříděn.
    Řazení vkládání Sestaví setříděný seznam jeden prvek po druhém vložením každého neseřazeného prvku na správné místo v seřazené části.
    Rychlé řazení Algoritmus rozdělení a panování, který vybere prvek pivotu, rozdělí seznam na dva podseznamy na základě pivotu a rekurzivně aplikuje stejný proces na podseznamy.
    Sloučit třídění Další algoritmus rozděl a panuj, který rekurzivně rozděluje seznam na menší podseznamy, třídí je a pak je zase spojuje, aby získal seřazený seznam.

    Související témata:

    • Výukový program algoritmu řazení
    • Nahoru Třídění otázek a problémů v rozhovoru
    • Procvičte si úlohy na algoritmu řazení

    3. Algoritmus rozděl a panuj

    Rozděl a panuj Algoritmy sledují rekurzivní strategii řešení problémů tak, že je rozdělují na menší dílčí problémy, řeší tyto dílčí problémy a kombinují řešení za účelem získání konečného řešení.

    kroky:

    1. Rozdělit : Rozdělte problém na menší, nezávislé podproblémy.
    2. Dobýt : Rekurzivně vyřešte každý dílčí problém.
    3. Kombajn : Sloučením řešení dílčích problémů získáte konečné řešení.

    Příklady:

    • Sloučit řazení: Rozdělí pole na dvě poloviny, každou polovinu seřadí rekurzivně a seřazené poloviny sloučí.
    • Rychlé řazení: Vybere prvek pivotu, rozdělí pole na dvě podpole na základě pivotu a rekurzivně seřadí každé podpole.
    • Binární vyhledávání: Opakovaně rozdělí vyhledávací prostor na polovinu, dokud není nalezen cílový prvek nebo dokud není vyčerpán vyhledávací prostor.

    Související články:

    • Výukový program Rozděl a panuj
    • Procvičte si úlohy na algoritmu rozděl a panuj

    4. Chamtivé algoritmy

    Jak název napovídá, tento algoritmus sestaví řešení jeden kus po druhém a vybere další kus, který poskytuje nejviditelnější a okamžitý přínos, tj. který je v danou chvíli nejoptimálnější volbou. Takže problémy, kdy volba lokálně optimálního také vede ke globálním řešením, jsou pro Greedyho nejvhodnější.

    Některé důležité problémy chamtivých algoritmů jsou:

    Algoritmus Popis
    Frakční batoh Najděte maximální celkovou hodnotu položek, které lze umístit do batohu, což umožňuje dílčí zahrnutí položek.
    Dijkstrův algoritmus Najde nejkratší cestu ze zdrojového vrcholu ke všem ostatním vrcholům ve váženém grafu.
    Kruskalův algoritmus Najde minimální kostru váženého grafu.
    Huffmanovo kódování Vytvoří optimální kód předpony pro sadu symbolů a minimalizuje celkovou délku kódování.

    Související články:

    • Výukový program Greedy Algorithm
    • Procvičte si problémy na Greedyho algoritmu

    5. Rekurze

    Rekurze je programovací technika, kde funkce volá sama sebe v rámci své vlastní definice. Obvykle se používá k řešení problémů, které lze rozdělit na menší instance stejného problému. Například: Hanojské věže (TOH) , Faktorový výpočet a Fibonacciho sekvence atd.

    Kroky :

    • Základní pouzdro : Definujte podmínku, která zastaví rekurzivní volání a poskytne řešení.
    • Rekurzivní případ : Definujte kroky pro rozdělení problému na menší instance a proveďte rekurzivní volání.
    • Vrátit se : Vraťte řešení z rekurzivních volání a zkombinujte je, abyste vyřešili původní problém.

    Pointa, která dělá rekurzi jedním z nejpoužívanějších algoritmů, je to, že tvoří základ pro mnoho dalších algoritmů, jako je např. Přechody stromů , Procházení grafů , Algoritmy rozděl a panuj a Algoritmy zpětného sledování .

    Související témata:

    • Výukový program rekurze
    • Rekurzivní funkce
    • Rekurze ocasu
    • 50 hlavních problémů rekurzního algoritmu pro rozhovor
    • Procvičte problémy na algoritmu rekurze

    6. Algoritmus zpětného sledování

    Jak již bylo zmíněno dříve, Zpětné sledování algoritmus je odvozen od algoritmu rekurze s možností vrátit se v případě selhání rekurzivního řešení, tj. v případě, že řešení selže, program se vrátí do okamžiku, kdy selhalo, a staví na jiném řešení. V podstatě tedy vyzkouší všechna možná řešení a najde to správné.

    Některé důležité a nejběžnější problémy algoritmů zpětného sledování, které musíte vyřešit, než budete pokračovat, jsou:

    Problém Popis
    Problém s Knight's Tour Nalezení sledu tahů rytíře na šachovnici tak, aby navštívil každé pole právě jednou.
    Krysa v bludišti Hledání cesty z výchozí pozice k východu v bludišti s překážkami znázorněnými jako stěny.
    Problém N-Queen Umístění N dam na šachovnici N×N tak, aby na sebe žádné dvě královny neútočily.
    Problém podmnožiny součtu Určení, zda existuje podmnožina dané množiny s daným součtem.
    sudoku Řešení hádanky mřížky 9×9 s čísly od 1 do 9 tak, že každý řádek, sloupec a podmřížka 3×3 obsahuje všechny číslice bez opakování.

    Související článek:

    • Backtracking Tutorial
    • Procvičte si problémy na algoritmu Backtracking

    7. Dynamické programování

    Dynamické programování je metoda používaná v matematice a informatice k řešení složitých problémů jejich rozdělením na jednodušší dílčí problémy. Řešením každého dílčího problému pouze jednou a uložením výsledků se vyhnete nadbytečným výpočtům, což vede k efektivnějším řešením pro širokou škálu problémů.

    jak číst soubor json

    Klíčové koncepty:

    • Optimální spodní konstrukce : Optimální řešení problému lze sestavit z optimálních řešení jeho dílčích problémů.
    • Překrývající se dílčí problémy : Dílčí problémy se často opakují ve větším problému, což vede k nadbytečným výpočtům.
    • Pamatování / Tabulování : Ukládání řešení dílčích problémů, aby se zabránilo přepočítávání.

    Některé důležité a nejčastější problémy algoritmů dynamického programování, které musíte vyřešit, než budete pokračovat, jsou:

    Problém Popis
    Fibonacciho sekvence Generování Fibonacciho čísel pomocí dynamického programování, aby se zabránilo nadbytečným výpočtům.
    Nejdelší společná posloupnost Nalezení nejdelší podsekvence společné dvěma sekvencím.
    Nejdelší rostoucí subsekvence Nalezení nejdelší podsekvence dané sekvence, ve které jsou prvky seřazeny ve vzestupném pořadí.
    0/1 Problém s batohem Určení maximální hodnoty, kterou lze získat výběrem položek s danými hmotnostmi a hodnotami, při nepřekročení stanoveného hmotnostního limitu.
    Problém řezání tyče Maximalizace zisku rozřezáním tyče dané délky na kusy a jejich prodejem za dané ceny.
    Problém výměny mincí Určení počtu způsobů, jak provést změnu pro danou částku pomocí dané sady nominálních hodnot mincí.
    Upravit vzdálenost Zjištění minimálního počtu operací (vložení, vymazání, nahrazení) nutných k převodu jednoho řetězce na jiný.
    Problém podmnožiny součtu Určení, zda existuje podmnožina dané množiny s daným součtem.
    Nejdelší palindromická podsekvence Nalezení nejdelší podsekvence dané sekvence, která je palindromem.
    Maximální součet dílčího pole Nalezení souvislého podpole s největším součtem v rámci daného jednorozměrného pole.
    Partition Equal Subset Sum Určení, zda je možné rozdělit danou množinu na dvě podmnožiny se stejným součtem.
    Cesta minimálních nákladů Nalezení cesty minimálních nákladů z levého horního rohu do pravého dolního rohu dané mřížky.
    Maximální produkt Subarray Nalezení souvislého podpole s největším součinem v rámci daného jednorozměrného pole.

    Související články:

    • Tabulování vs memoizace
    • Jak vyřešit problém dynamického programování?
    • Výuka dynamického programování
    • 50 hlavních problémů s kódováním dynamického programování pro rozhovory
    • Procvičte si úlohy na algoritmu dynamického programování

    8. Grafové algoritmy :

    Grafové algoritmy v datových strukturách a algoritmech (DSA) je soubor technik a metod používaných k řešení problémů souvisejících s grafy, které jsou souborem uzlů a hran. Tyto algoritmy jsou navrženy k provádění různých operací s grafy, jako např hledání, procházení, hledání nejkratší cesty a určování konektivitu . Jsou nezbytné pro řešení široké škály problémů v reálném světě, včetně směrování sítě, analýzy sociálních sítí a alokace zdrojů.

    Téma

    Popis tématu

    Algoritmus Popis algoritmu
    Procházení grafu

    Techniky pro návštěvu všech vrcholů v grafu.

    Hloubkové vyhledávání (DFS) Prozkoumá co nejdále podél každé větve, než se vrátí zpět.
    Breadth-First Search (BFS) Prozkoumá sousední vrcholy před přechodem na další úroveň vrcholů.

    Minimální kostry

    Minimum Spanning Trees jsou nejmenší stromy, které spojují všechny uzly v grafu bez vytváření cyklů, kterých je dosaženo přidáním co nejkratších hran.

    Kruskalův algoritmus

    Najde minimální kostru pro spojený vážený graf. Přidává nejmenší váhovou hranu, která netvoří cyklus.

    Primův algoritmus

    Také najde minimální kostru pro připojený vážený graf. Přidává nejmenší hranu zátěže, která spojuje dva stromy.

    Topologické třídění

    Topologické třídění je lineární uspořádání vrcholů v orientovaném acyklickém grafu (DAG) takové, že pro každou směrovanou hranu z vrcholu u do vrcholu v je u v uspořádání před v.

    Kahnův algoritmus Kahnův algoritmus najde topologické uspořádání směrovaného acyklického grafu (DAG).
    Algoritmus založený na DFS Algoritmus založený na DFS používá Depth-First Search k provádění topologického třídění v řízeném acyklickém grafu (DAG).

    Nejkratší cesta

    Nejkratší cesta v grafu je cesta mezi dvěma vrcholy v grafu, který má na svých okrajích minimální součet vah ve srovnání se všemi ostatními cestami mezi stejnými dvěma vrcholy.

    Dijkstrův algoritmus

    Chamtivý algoritmus pro nalezení nejkratší cesty mezi všemi uzly v čase O(E * V logV).

    Floyd-Warshallův algoritmus

    Najde nejkratší cestu mezi všemi páry uzlů v čase O(V^3).

    Algoritmus Bellmana Forda

    Najde nejkratší cestu z jednoho zdroje v čase O(V * E).

    Johnsonův algoritmus

    Najde nejkratší cesty mezi všemi dvojicemi vrcholů v čase O(V^2 logV + V * E).

    Silně propojené komponenty

    Silně propojená složka (SCC) orientovaného grafu je maximální množina vrcholů taková, že existuje cesta z každého vrcholu v množině ke každému jinému vrcholu v množině.

    Kosarajuův algoritmus

    Kosaraju’s Algorithm je dvouprůchodový algoritmus, který efektivně najde silně propojené komponenty (SCC) orientovaného grafu.

    Tarjanův algoritmus

    Tarjanův algoritmus je dalším účinným algoritmem pro hledání SCC v orientovaném grafu

    Související témata:

    • Výukový program pro grafy
    • 50 nejčastějších problémů s kódováním grafů pro rozhovory
    • Cvičný problém s grafovými algoritmy

    9 . Hledání vzoru

    Hledání vzorů je základní technika v DSA používaná k nalezení výskytů konkrétního vzoru v daném textu.

    python nový řádek

    Níže jsou uvedeny některé standardní algoritmy vyhledávání vzorů:

    Algoritmus Popis Časová složitost
    Hrubou silou Porovnává vzor s každým podřetězcem textu O(mn)
    Knuth-Morris-Pratt K přeskočení zbytečných porovnávání používá předpočítanou funkci selhání O(m + n)
    Boyer-Moore Porovnává vzor zprava doleva a přeskakuje znaky na základě poslední neshody O(mn)
    Rabin-Karp K rychlé kontrole potenciálních shod používá hašování O(m + n)

    Související témata:

    • Výukový program pro vyhledávání vzorů
    • Cvičení Problém zapnut Hledání vzoru

    10 . Matematické algoritmy

    Matematické algoritmy jsou třídou algoritmů, které řeší problémy související s matematickými pojmy. Jsou široce používány v různých oblastech, včetně počítačové grafiky, numerické analýzy, optimalizace a kryptografie.

    Algoritmus Popis
    GCD a LCM Najděte největšího společného dělitele a nejmenšího společného násobku dvou čísel.
    Prvočíselný rozklad Rozložte číslo na jeho prvočinitele.
    Fibonacciho čísla Vygenerujte Fibonacciho posloupnost, kde každé číslo je součtem dvou předchozích.
    Katalánská čísla Spočítejte počet platných výrazů s daným počtem párů závorek.
    Modulární aritmetika Provádějte aritmetické operace s čísly modulo zadané hodnoty.
    Funkce Euler Totient Spočítejte počet kladných celých čísel menších než dané číslo, která jsou relativně prvočísla.
    nCr výpočty Vypočítejte binomický koeficient, který představuje počet způsobů, jak vybrat r prvků z množiny n prvků.
    Prvočísla a testy prvočíselnosti Určete, zda je dané číslo prvočíslo, a najděte prvočísla efektivně.
    Síťové algoritmy Najděte všechna prvočísla do daného limitu.

    Související témata:

    • Cvičný problém z matematického algoritmu

    11. Geometrické algoritmy

    Geometrické algoritmy jsou třídou algoritmů, které řeší problémy související s geometrií. Geometrické algoritmy jsou nezbytné pro řešení široké škály problémů v informatice, jako jsou:

    Algoritmus Popis
    Konvexní obal Najde nejmenší konvexní mnohoúhelník, který obsahuje sadu bodů.
    Nejbližší pár bodů Vyhledá dva body v množině, které jsou si nejblíže.
    Křižovatka linek Určuje, zda se dvě přímky protínají, a pokud ano, najde průsečík.
    Bod v polygonu Určuje, zda je daný bod uvnitř nebo vně polygonu.

    Související témata:

    • Cvičný problém z geometrických algoritmů

    12. Bitové algoritmy

    Bitové algoritmy jsou algoritmy, které pracují s jednotlivými bity čísel. Tyto algoritmy manipulují s binární reprezentací čísel a provádějí úkoly, jako je bitová manipulace, bitové logické operace (AND, OR, XOR), posouvání bitů , a nastavení nebo vymazání konkrétních bitů v rámci čísla. Běžně se používají bitové algoritmy nízkoúrovňové programování, kryptografie a optimalizační úlohy kde je vyžadována efektivní manipulace s jednotlivými bity.

    Téma Popis
    Bitový posun Posune bity doleva nebo doprava o zadaný počet pozic.
    Levý posun (<<) Posune bity doleva a efektivně vynásobí číslo 2.
    Posun doprava (>>) Posune bity doprava a efektivně vydělí číslo 2.
    Extrahujte bity Použití masek k extrahování konkrétních bitů z celého čísla.
    Nastavení bitů Použití masek k nastavení konkrétních bitů na 1 v celém čísle.
    Vymazání bitů Použití masek k nastavení konkrétních bitů na 0 v celém čísle.
    Přepínání bitů Použití XOR (^) k přepínání konkrétních bitů v celém čísle.
    Počítání Set bitů Počítání počtu nastavených bitů (1s) v celém čísle.

    Související témata:

    • Výuka bitových algoritmů
    • Cvičný problém na bitových algoritmech

    13. Randomizované algoritmy

    Randomizované algoritmy jsou algoritmy, které k řešení problémů používají náhodnost. K dosažení svých cílů využívají náhodné vstupy, což často vede k jednodušším nebo efektivnějším řešením.

    Typy randomizovaných algoritmů:

    • Las Vegas : Vždy vytváří správný výsledek, ale doba běhu je náhodná.
    • Monte Carlo : Může způsobit nesprávný výsledek s malou pravděpodobností, ale doba běhu je obvykle rychlejší.

    Důležité algoritmy, které používají algoritmy randomizace:

    Algoritmus Popis
    Rychlé třídění Randomizovaný třídicí algoritmus s časovou složitostí průměrného případu O(n log n).
    Přeskočit seznam Randomizovaná datová struktura, která poskytuje rychlé operace vyhledávání a vkládání.
    Bloomův filtr Pravděpodobnostní datová struktura pro efektivní testování členství v množině.

    14. Větevný a vázaný algoritmus

    The Branch and Bound Algorithm je metoda používaná v kombinatorických optimalizačních problémech k systematickému hledání nejlepšího řešení. Funguje to tak, že se problém rozdělí na menší podproblémy nebo větve a poté se určité větve vyloučí na základě mezí optimálního řešení. Tento proces pokračuje, dokud není nalezeno nejlepší řešení nebo dokud nejsou prozkoumány všechny větve.

    Standardní problémy s větveným a vázaným algoritmem:

    Jedinečný problém Popis
    0/1 batoh pomocí Branch and Bound Podrobnosti implementace větveného a vázaného přístupu pro řešení problému batohu 0/1.
    0/1 batoh pomocí větve s nejnižšími náklady a vázání Řešení problému batohu 0/1 pomocí nejlevnější techniky větvení a vazby.
    8 puzzle Problém s použitím větvení a vazby Aplikace větve a vázána k vyřešení problému 8 puzzle, oblíbené posuvné puzzle hry.
    N Queen Problém s použitím Branch and Bound Využití větve a zavázání najít řešení problému N Queens, klasického šachového problému.

    Související témata:

    • Výukový program větveného a vázaného algoritmu

    Přečtěte si o složitosti

    V datových strukturách a algoritmech (DSA) je hlavním cílem řešit problémy efektivně a efektivně. Abychom určili efektivitu programu, podíváme se na dva typy složitosti:

    1. Časová složitost : To nám říká, jak dlouho trvá spuštění našeho kódu.
    2. Vesmírná složitost : To nám říká, kolik paměti používá náš kód.

    Asymptotická notace :

    K porovnání účinnosti algoritmů používáme asymptotickou notaci, matematický nástroj, který odhaduje čas na základě vstupní velikost bez spuštění kódu. Zaměřuje se na počet základních operací v programu.

    Notový zápis Popis
    Big-O (Ο) Popisuje nejhorší scénář a poskytuje horní časovou hranici algoritmu.
    Omega (Ω) Popisuje nejlepší možný scénář a nabízí nižší časovou hranici algoritmu.
    theta (θ) Představuje průměrnou složitost algoritmu algoritmu.

    Nejčastěji používaným zápisem pro analýzu kódu je Velký O zápis , poskytující horní limit doby běhu nebo využití paměti týkající se velikosti vstupu.

    Související témata:

    Cvičení problémových cheatů:

    Vybrané seznamy problémů z níže uvedených článků:

    • Plán DSA od Sandeep Jain
    • SDE SHEET – Kompletní průvodce přípravou SDE
    • techcodeview.com Master Sheet – Seznam všech Cheat Sheetů