logo

Naučite se podatkovnih struktur in algoritmov | Vadnica DSA

Podatkovne strukture in algoritmi (DSA) se nanašajo na študij metod za organiziranje in shranjevanje podatkov ter oblikovanje postopkov (algoritmov) za reševanje problemov, ki delujejo na teh podatkovnih strukturah. DSA je ena najpomembnejših veščin, ki jih mora imeti vsak študent računalništva. Pogosto se vidi, da so ljudje z dobrim poznavanjem teh tehnologij boljši programerji od drugih in tako prebijejo intervjuje s skoraj vsakim tehnološkim velikanom. to DSA vadnica vam želi pomagati pri hitrem in preprostem učenju podatkovnih struktur in algoritmov (DSA).



Kazalo

  • Naučite se algoritmov
  • Poučite se o zapletenosti
  • Vadba goljufij za naloge
  • Polni obrazec DSA

    Izraz DSA pomeni Podatkovne strukture in algoritmi , v okviru računalništva.

    Kaj je DSA?

    Podatkovne strukture in algoritmi (DSA) se nanašajo na študij metod za organiziranje in shranjevanje podatkov ter oblikovanje postopkov (algoritmov) za reševanje problemov, ki delujejo na teh podatkovnih strukturah.



    Kako se naučiti DSA?

    Prva in najpomembnejša stvar je razdelitev celotnega postopka na majhne dele, ki jih je treba opraviti zaporedno. Celoten postopek učenja DSA iz nič lahko razdelimo na 5 delov:

    1. Naučite se vsaj enega programskega jezika (to prepuščamo vaši izbiri.)
    2. Naučite se podatkovnih struktur
    3. Naučite se algoritmov
    4. Spoznajte zapletenost časa in prostora
    5. Vadbene naloge na DSA
    Kako se naučiti DSA?

    Kako se naučiti DSA?

    V upanju, da ste se naučili programskega jezika po svoji izbiri, pojdimo naprej z naslednjim korakom učenja DSA v tej vadnici DSA.



    Prihaja najpomembnejša in najbolj pričakovana stopnja načrta za učenje podatkovne strukture in algoritma – stopnja, na kateri se začnete učiti o DSA. Tema DSA je sestavljena iz dveh delov:

    • Podatkovne strukture
    • Algoritmi

    Čeprav gre za dve različni stvari, sta zelo povezani in zelo pomembno je, da sledite pravi poti, da se jih naučite najučinkoviteje. Če ste v zadregi, katerega bi se najprej naučili, vam priporočamo, da pregledate našo podrobno analizo na temo: Tukaj smo sledili toku učenja podatkovne strukture in nato najbolj povezanih in pomembnih algoritmov, ki jih ta podatkovna struktura uporablja.

    Naučite se podatkovnih struktur

    Podatkovne strukture so bistvene komponente, ki pomagajo organizirati in učinkovito shranjevati podatke v računalniškem pomnilniku. Zagotavljajo način za učinkovito upravljanje in manipulacijo podatkov, kar omogoča hitrejše dostopanje, vstavljanje in brisanje. Običajne podatkovne strukture vključujejo polja, povezani seznami, skladi, čakalne vrste, drevesa in grafi , od katerih vsaka služi posebnim namenom glede na zahteve obravnavane težave. Razumevanje podatkovnih struktur je temeljnega pomena za načrtovanje učinkovitih algoritmov in optimizacijo delovanja programske opreme.

    Array je linearna podatkovna struktura, ki hrani zbirko elementov istega podatkovnega tipa. Elementom je dodeljen neprekinjen pomnilnik, kar omogoča dostop do stalnega časa. Vsak element ima edinstveno indeksno številko.

    • Operacije na matriki:
      • Prehod : Ponavljanje skozi elemente matrike.
      • Vstavljanje : dodajanje elementa v matriko pri določenem indeksu.
      • Izbris : Odstranitev elementa iz matrike na določenem indeksu.
      • Iskanje : Iskanje elementa v matriki po njegovi vrednosti ali indeksu.
    • Vrste nizov :
      • Enodimenzionalni niz : preprost niz z eno dimenzijo.
      • Večdimenzionalni niz : Niz z več dimenzijami, kot je matrika.
    • Aplikacije Array :
      • Shranjevanje podatkov na zaporedni način
      • Implementacija čakalnih vrst, skladov in drugih podatkovnih struktur
      • Predstavljanje matrik in tabel
    • Sorodne teme o nizu:
      • Vadnica za nize
      • 50 najpogostejših težav s kodiranjem polja za intervjuje
      • Vadite naloge na nizih

    2. Niz

    A vrvica je zaporedje znakov, ki se običajno uporablja za predstavitev besedila. Šteje se za vrsto podatkov, ki omogoča manipulacijo in obdelavo besedilnih podatkov v računalniških programih.

    • Operacije na nizu :
      • Veženje : spajanje dveh vrvic skupaj.
      • Primerjava : Leksikografska primerjava dveh nizov.
      • Podniz ekstrakcija : ekstrahiranje podniza iz niza.
      • Iskanje : Iskanje podniza znotraj niza.
      • Sprememba : Spreminjanje ali zamenjava znakov v nizu.
    • Uporaba niza :
      • Obdelava besedila
      • Ujemanje vzorcev
      • Validacija podatkov
      • Upravljanje baz podatkov
    • Sorodne objave:
      • Vadnica za strune
      • 50 najpogostejših težav pri kodiranju nizov za intervjuje
      • Vadbene naloge na nizu

    3. Povezani seznami

    A povezan seznam je linearna podatkovna struktura, ki hrani podatke v vozliščih, ki so povezana s kazalci. Za razliko od nizov povezani seznami niso shranjeni na sosednjih pomnilniških lokacijah.

    • Značilnosti povezanega seznama:
      • Dinamično : Povezanim seznamom je mogoče enostavno spremeniti velikost z dodajanjem ali odstranjevanjem vozlišč.
      • Nesosednji : Vozlišča so shranjena na naključnih pomnilniških lokacijah in povezana s kazalci.
      • Zaporedni dostop : Do vozlišč je mogoče dostopati samo zaporedno, začenši z glave seznama.
    • Operacije na povezanem seznamu:
      • Ustvarjanje : Ustvarjanje novega povezanega seznama ali dodajanje novega vozlišča na obstoječi seznam.
      • Prehod : Ponavljanje po seznamu in dostop do vsakega vozlišča.
      • Vstavljanje : dodajanje novega vozlišča na določen položaj na seznamu.
      • Izbris : Odstranjevanje vozlišča s seznama.
      • Iskanje : Iskanje vozlišča z določeno vrednostjo na seznamu.
    • Vrste povezanih seznamov :
      • Posamezno povezan seznam : Vsako vozlišče kaže na naslednje vozlišče na seznamu.
      • Dvojno povezan seznam : Vsako vozlišče kaže na naslednje in prejšnje vozlišče na seznamu.
      • Krožni povezani seznam : Zadnje vozlišče kaže nazaj na prvo vozlišče in tvori krožno zanko.
    • Aplikacije povezanega seznama :
      • Povezani seznami se uporabljajo v različnih aplikacijah, vključno z:
      • Implementacija čakalnih vrst in skladov
      • Predstavljanje grafov in dreves
      • Vzdrževanje naročenih podatkov
      • Upravljanje pomnilnika
    • Sorodne teme:
      • Vadnica za povezani seznam
      • 50 najpogostejših težav na povezanem seznamu za intervjuje
      • Vadite naloge na povezanih seznamih

    4. Matrika/mreža

    A matrica je dvodimenzionalni niz elementov, urejenih v vrstice in stolpce. Predstavljen je kot pravokotna mreža, pri čemer je vsak element na presečišču vrstice in stolpca.

    • Ključni pojmi:
      • Vrstice : vodoravne črte elementov v matrici.
      • Stolpci : Navpične črte elementov v matrici.
      • Dimenzije : število vrstic in stolpcev v matriki (npr. matrika 3×4 ima 3 vrstice in 4 stolpce).
      • Element Dostop : Do elementov je mogoče dostopati z uporabo indeksov vrstic in stolpcev (npr. M[2][3] se nanaša na element v vrstici 2, stolpcu 3).
    • Uporaba matrice/mreže :
      • Obdelava slik
      • Analiza podatkov
      • Težave z optimizacijo
    • Sorodne objave:
      • Vadnica za matriko/mrežo
      • 50 najpogostejših težav na matriki/mreži za intervjuje
      • Vadite naloge na matriko/mrežo

    5. Stack

    Stack je linearna podatkovna struktura, ki sledi določenemu vrstnemu redu, v katerem se izvajajo operacije. Vrstni red je lahko LIFO (zadnji vstop, prvi ven) oz FILO (prvi vstop zadnji ven) . LIFO pomeni, da element, ki je vstavljen zadnji, pride ven prvi in VRSTA pomeni, da element, ki je prvi vstavljen, pride ven zadnji.

    • Delovanje na skladu :
      • Potisni : doda element na vrh sklada
      • Pop : Odstrani in vrne element na vrhu sklada
      • Pokukaj : vrne element na vrhu sklada, ne da bi ga odstranil
      • Velikost : vrne število elementov v skladu
      • Je prazno : preveri, ali je sklad prazen
    • Aplikacije Stacka :
      • Funkcijski klici
      • Ocena izražanja
      • Sledenje nazaj
      • Operacije razveljavi/ponovi
    • Sorodne teme na Stacku:
      • Stack Tutorial
      • 50 najpogostejših težav na Stacku za intervjuje
      • Vadite težave na Stacku

    6. Čakalna vrsta

    A Čakalna vrsta Struktura podatkov je temeljni koncept v računalništvu, ki se uporablja za shranjevanje in upravljanje podatkov v določenem vrstnem redu. Sledi načelu Prvi noter, prvi ven ( FIFO ), kjer je prvi element, dodan v čakalno vrsto, prvi odstranjen

    • Delovanje v čakalni vrsti :
      • V čakalno vrsto : doda element na zadnji del čakalne vrste
      • Skladno s tem : Odstrani element s čela čakalne vrste
      • Pokukaj : Pridobi sprednji element, ne da bi ga odstranil
      • Je prazno : preveri, ali je čakalna vrsta prazna
      • Je poln : preveri, ali je čakalna vrsta polna
    • Vrsta čakalne vrste :
      • Krožna čakalna vrsta : Zadnji element se poveže s prvim elementom
      • Čakalna vrsta z dvojnim koncem (Deque) : Operacije se lahko izvajajo z obeh koncev
      • Prednostna čakalna vrsta : Elementi so razvrščeni glede na prioriteto
    • Aplikacije čakalne vrste :
      • Razporejanje dela
      • Čakalna vrsta sporočil
      • Simulacijsko modeliranje
      • Medpomnjenje podatkov
    • Sorodne teme:
      • Vadnica za čakalno vrsto
      • 50 najpogostejših težav v čakalni vrsti za razgovore
      • Vadite naloge na čakalni vrsti

    7. Kup

    A Kup je popolna binarna drevesna podatkovna struktura, ki izpolnjuje lastnost kopice: za vsako vozlišče je vrednost njegovih otrok manjša ali enaka njegovi lastni vrednosti. Za izvedbo se običajno uporabljajo kopice prednostne čakalne vrste , kjer je najmanjši (ali največji) element vedno v korenu drevesa.

    • Operacije Heap :
      • Vstavi : doda nov element v kopico, pri tem pa ohrani lastnosti kopice.
      • Izvleček-Max/Izvleček-Min : Odstrani korenski element in prestrukturira kopico.
      • Tipka za povečanje/zmanjšanje : Posodobi vrednost vozlišča in prestrukturira kopico.
    • Vrste kopice :
      • Max-Heap : Korensko vozlišče ima največjo vrednost med svojimi podrejenimi.
      • Min-kup : Korensko vozlišče ima najmanjšo vrednost med podrejenimi.
    • Aplikacije Heap :
      • Prednostne čakalne vrste
      • Razvrščanje
      • Grafni algoritmi (npr. Dijkstrajev algoritem)
    • Sorodne objave:
      • Heap Tutorial
      • 50 najpogostejših težav na Heap za intervjuje
      • Vadite težave na kupu

    8. Hash

    Zgoščevanje je tehnika, ki generira izhod fiksne velikosti (zgoščena vrednost) iz vhoda spremenljive velikosti z uporabo matematičnih formul, imenovanih zgoščene funkcije . Zgoščevanje se uporablja za določitev indeksa ali lokacije za shranjevanje postavke v podatkovni strukturi, kar omogoča učinkovito iskanje in vstavljanje.

    • Ključni pojmi:
      • Funkcija zgoščevanja : matematična funkcija, ki preslika vnos v zgoščeno vrednost.
      • Hash tabela : Podatkovna struktura, ki shranjuje pare ključ-vrednost, kjer je ključ zgoščena vrednost, vrednost pa dejanski podatek.
      • Trk : Ko dva različna ključa ustvarita enako zgoščeno vrednost.
    • Vrste zgoščevalnih funkcij :
      • Metoda delitve : vhod deli s konstanto in preostanek uporabi kot zgoščeno vrednost.
      • Srednji trg Metoda: Kvadratira vnos in vzame srednje števke kot zgoščeno vrednost.
      • Metoda zlaganja : razdeli vhod na enako velike bloke in jih sešteje, da dobi zgoščeno vrednost.
      • Metoda množenja : pomnoži vnos s konstanto in vzame ulomek kot zgoščeno vrednost.
    • Tehnike reševanja trkov :
      • Ločeno veriženje (odprto zgoščevanje) : Shrani elemente, ki se sovpadajo, na povezanem seznamu z ustrezno zgoščeno vrednostjo.
      • Odprto naslavljanje (zaprto zgoščevanje) : uporablja različne strategije za iskanje alternativne lokacije za elemente, ki se sovpadajo v zgoščeni tabeli.
    • Aplikacije zgoščevanja :
      • Učinkovito shranjevanje in pridobivanje podatkov v bazah podatkov in datotečnih sistemih.
      • Preverjanje gesel in digitalnih podpisov.
      • Distribucija zahtev na več strežnikih.
      • Ustvarjanje varnih zgoščenih vrednosti za celovitost podatkov in avtentikacijo.
    • Sorodne objave:
      • Hash Tutorial
      • Vadite težave pri zgoščevanju

    9. Drevo

    A drevo je nelinearna hierarhična podatkovna struktura, sestavljena iz vozlišč, povezanih z robovi, z zgornjim vozliščem, imenovanim koren, in vozlišči, ki imajo podrejena vozlišča. Uporablja se v računalništvu za učinkovito organiziranje podatkov.

    sql vrstni red po datumu
    • Prehod drevesa : Metode prečkanja drevesa se uporabljajo za obisk in obdelavo vozlišč v drevesni podatkovni strukturi. Tri običajne metode prečkanja so:
      • Po vrstnem redu : Obiščite levo poddrevo, trenutno vozlišče, nato desno poddrevo.
      • Prednaročilo : Obiščite trenutno vozlišče, levo poddrevo, nato desno poddrevo.
      • Po naročilu : Obiščite levo poddrevo, desno poddrevo in nato trenutno vozlišče.
    • Klasifikacije dreves:
      • Klasifikacije Drevesa se nanašajo na združevanje dreves na podlagi določenih značilnosti ali meril. To lahko vključuje kategorizacijo dreves glede na njihov faktor ravnotežja, stopnjo vozlišč, lastnosti vrstnega reda itd. Spodaj je nekaj pomembnih klasifikacij dreves.
    Razvrstitev Opis

    Vrsta

    Opis

    Po diplomi

    Drevesa je mogoče razvrstiti glede na največje število otrok, ki jih lahko ima posamezno vozlišče.

    Binarno drevo

    Vsako vozlišče ima največ dva otroka.

    Trojno drevo

    Vsako vozlišče ima največ tri otroke.

    N-arno drevo

    Vsako vozlišče ima največ N otrok.

    Z naročilom

    Drevesa je mogoče razvrstiti glede na vrstni red vozlišč in poddreves

    Binarno iskalno drevo (BST)

    Levi otrok

    Kup

    Specializirano binarno drevo z lastnostjo kopice.

    Po bilanci

    Drevesa lahko razvrstimo glede na to, kako dobro so uravnotežena.

    Uravnoteženo drevo

    Višine poddreves se razlikujejo največ za eno. Primeri vključujejo drevesa AVL in rdeče-črna drevesa.

    Neuravnoteženo drevo

    Višine poddreves se lahko bistveno razlikujejo, kar vpliva na zmogljivost pri operacijah, kot sta iskanje in vstavljanje.

    • Uporaba dreves:
      • Datotečni sistemi
      • Baze podatkov
      • dokumenti XML
      • Umetna inteligenca
    • Sorodne objave:
      • Tree Tutorial
      • 50 najpogostejših težav s kodiranjem dreves
      • Vadite naloge na Tree

    10. Graf

    A Graf je nelinearna podatkovna struktura, sestavljena iz končnega niza vozlišč (ali vozlišč) in niza robov, ki povezujejo par vozlišč.

    Naučite se algoritmov

    Ko ste razčistili koncepte Podatkovne strukture , zdaj je čas, da začnete svoje potovanje skozi Algoritmi . Glede na vrsto narave in uporabe so algoritmi združeni v več kategorij, kot je prikazano spodaj:

    1. Algoritem iskanja

    Iskalni algoritmi se uporabljajo za iskanje določenih podatkov v večjem naboru podatkov. Pomaga ugotoviti prisotnost ciljne vrednosti v podatkih. Obstajajo različne vrste iskalnih algoritmov, vsak s svojim pristopom in učinkovitostjo.

    • Najpogostejši iskalni algoritmi:
      • Linearno iskanje : Iterativno iskanje od enega konca do drugega.
      • Binarno iskanje : Iskanje po načelu razdeli in vladaj v razvrščeni matriki, prepolovitev iskalnega prostora pri vsaki ponovitvi.
      • Trojno iskanje : Iskanje po načelu razdeli in vladaj v razvrščenem nizu, pri čemer se iskalni prostor pri vsaki ponovitvi razdeli na tri dele.
    • Drugi iskalni algoritmi:
      • Skoči iskanje
      • Interpolacijsko iskanje
      • Eksponentno iskanje
    • Sorodne teme:
      • Vadbene naloge na iskalnem algoritmu

    2. Algoritem za razvrščanje

    Algoritmi za razvrščanje se uporabljajo za razvrščanje elementov seznama v določenem vrstnem redu, kot je številčno ali abecedno. Elemente organizira na sistematičen način, kar olajša iskanje in dostop do določenih elementov.

    Obstaja veliko različnih vrst algoritmov za razvrščanje. Nekateri pogosto uporabljeni algoritmi so:

    Algoritem za razvrščanje Opis
    Bubble Sort Iterativno primerja sosednje elemente in jih zamenja, če niso v redu. Največji element se ob vsakem prehodu prikaže na koncu seznama.
    Izbor Razvrsti Najde minimalni element v nerazvrščenem delu seznama in ga zamenja s prvim elementom. Ta postopek ponavlja, dokler ni razvrščen celoten seznam.
    Razvrščanje vstavljanja Gradi razvrščeni seznam en element naenkrat tako, da vstavi vsak nerazvrščen element na pravilno mesto v razvrščenem delu.
    Hitro razvrščanje Algoritem deli in vladaj, ki izbere vrtilni element, razdeli seznam na dva podseznama glede na vrtišče in rekurzivno uporabi isti postopek za podseznama.
    Spoji Razvrsti Še en algoritem deli in vladaj, ki rekurzivno razdeli seznam na manjše podsezname, jih razvrsti in nato ponovno združi, da dobi razvrščeni seznam.

    Sorodne teme:

    • Vadnica algoritmov za razvrščanje
    • Najboljša vprašanja in težave za intervjuje
    • Vadbene naloge algoritma za razvrščanje

    3. Algoritem razdeli in vladaj

    Razdeli in vladaj algoritmi sledijo rekurzivni strategiji za reševanje problemov tako, da jih razdelijo na manjše podprobleme, rešijo te podprobleme in združijo rešitve, da dobijo končno rešitev.

    Koraki:

    1. Razdeli : Težavo razdelite na manjše, neodvisne podprobleme.
    2. osvojiti : Rekurzivno rešite vsak podproblem.
    3. Združite : Združite rešitve podproblemov, da dobite končno rešitev.

    Primeri:

    • Razvrščanje z združitvijo: razdeli matriko na dve polovici, vsako polovico rekurzivno razvrsti in združi razvrščeni polovici.
    • Hitro razvrščanje: izbere vrtilni element, razdeli matriko na dve podnizi glede na vrtilno točko in rekurzivno razvrsti vsako podmatrico.
    • Binarno iskanje: iskalni prostor večkrat razdeli na polovico, dokler ni najden ciljni element ali dokler ni iskalni prostor izčrpan.

    Povezani članki:

    • Vadnica razdeli in vladaj
    • Vadite naloge z algoritmom razdeli in vladaj

    4. Pohlepni algoritmi

    Kot že ime pove, ta algoritem gradi rešitev en del naenkrat in izbere naslednji del, ki daje najbolj očitno in takojšnjo korist, tj. ki je najbolj optimalna izbira v tistem trenutku. Torej so težave, pri katerih izbira lokalno optimalne vodi tudi do globalnih rešitev, najbolj primerne za Greedy.

    Nekateri pomembni problemi pohlepnih algoritmov so:

    Algoritem Opis
    Frakcijski nahrbtnik Poiščite največjo skupno vrednost predmetov, ki jih je mogoče dati v nahrbtnik, kar omogoča delno vključitev predmetov.
    Dijkstrajev algoritem Poišče najkrajšo pot od izvorne točke do vseh drugih točk v uteženem grafu.
    Kruskalov algoritem Poišče najmanjše vpeto drevo uteženega grafa.
    Huffmanovo kodiranje Ustvari optimalno kodo predpone za niz simbolov, kar zmanjša skupno dolžino kodiranja.

    Povezani članki:

    • Vadnica Greedy Algorithm
    • Vadbene naloge na algoritmu Greedy

    5. Rekurzija

    Rekurzija je tehnika programiranja, pri kateri funkcija kliče samo sebe znotraj lastne definicije. Običajno se uporablja za reševanje problemov, ki jih je mogoče razdeliti na manjše primerke istega problema. Na primer: Hanojski stolpi (TOH) , Faktorski izračun in Fibonaccijevo zaporedje itd.

    Koraki :

    • Osnovni primer : Določite pogoj, ki ustavi rekurzivne klice in ponudi rešitev.
    • Rekurzivni primer : Določite korake za razdelitev težave na manjše primerke in izvajanje rekurzivnih klicev.
    • Vrnitev : vrne rešitev iz rekurzivnih klicev in jih združi za rešitev izvirne težave.

    Bistvo, zaradi katerega je rekurzija eden najpogosteje uporabljenih algoritmov, je, da je osnova za mnoge druge algoritme, kot je npr. Prehodi dreves , Prehodi grafov , Algoritmi razdeli in vladaj in Algoritmi za sledenje nazaj .

    Sorodne teme:

    kako spremeniti niz v int

    6. Algoritem za povratno sledenje

    Kot smo že omenili, je Sledenje nazaj algoritem je izpeljan iz rekurzivnega algoritma z možnostjo vrnitve, če rekurzivna rešitev ne uspe, tj. v primeru, da rešitev ne uspe, program izsledi trenutek, ko je odpovedala, in gradi na drugi rešitvi. Tako v bistvu preizkusi vse možne rešitve in najde pravo.

    Nekatere pomembne in najpogostejše težave algoritmov za sledenje nazaj, ki jih morate rešiti, preden nadaljujete, so:

    Problem Opis
    Problem viteške ture Iskanje zaporedja potez konja na šahovnici, tako da obišče vsako polje natanko enkrat.
    Podgana v labirintu Iskanje poti od začetnega položaja do izhoda v labirintu z ovirami, predstavljenimi kot stene.
    Problem z N-kraljico Postavitev N kraljic na N×N šahovnico tako, da nobeni kraljici ne napadeta druga druge.
    Problem vsote podnabora Ugotavljanje, ali obstaja podmnožica dane množice z dano vsoto.
    Sudoku Reševanje uganke z mrežo 9 × 9 s števili od 1 do 9, tako da vsaka vrstica, stolpec in podmreža 3 × 3 vsebuje vse števke brez ponavljanja.

    Sorodni članek:

    • Vadnica za sledenje nazaj
    • Vadbene naloge pri algoritmu za sledenje nazaj

    7. Dinamično programiranje

    Dinamično programiranje je metoda, ki se uporablja v matematiki in računalništvu za reševanje zapletenih problemov z njihovo razdelitvijo na enostavnejše podprobleme. Z enkratnim reševanjem vsakega podproblema in shranjevanjem rezultatov se izogne ​​odvečnim izračunom, kar vodi do učinkovitejših rešitev za širok nabor problemov.

    Ključni pojmi:

    • Optimalna podkonstrukcija : Optimalno rešitev problema je mogoče sestaviti iz optimalnih rešitev njegovih podproblemov.
    • Prekrivajoče se podprobleme : Podproblemi se pogosto ponavljajo v večjem problemu, kar vodi do odvečnih izračunov.
    • Memoizacija / Tabelacija : Shranjevanje rešitev podproblemov, da se izognete ponovnemu računanju.

    Nekateri pomembni in najpogostejši problemi algoritmov dinamičnega programiranja, ki jih morate rešiti, preden nadaljujete, so:

    Problem Opis
    Fibonaccijevo zaporedje Ustvarjanje Fibonaccijevih števil z uporabo dinamičnega programiranja, da se izognete odvečnim izračunom.
    Najdaljše skupno podzaporedje Iskanje najdaljšega podzaporedja, ki je skupno dvema zaporedjema.
    Najdaljše naraščajoče podzaporedje Iskanje najdaljšega podzaporedja danega zaporedja, v katerem so elementi razvrščeni v naraščajočem vrstnem redu.
    0/1 Problem z nahrbtnikom Določitev največje vrednosti, ki jo je mogoče doseči z izbiro predmetov z danimi utežmi in vrednostmi, pri čemer ne sme preseči določene omejitve teže.
    Težava z rezanjem palice Povečanje dobička z rezanjem palice dane dolžine na kose in prodajo po danih cenah.
    Težava z menjavo kovancev Določanje števila načinov menjave za dani znesek z uporabo danega niza apoenov kovancev.
    Uredi razdaljo Iskanje najmanjšega števila operacij (vstavljanje, brisanje, zamenjava), potrebnih za pretvorbo enega niza v drugega.
    Problem vsote podnabora Ugotavljanje, ali obstaja podmnožica dane množice z dano vsoto.
    Najdaljše palindromsko zaporedje Iskanje najdaljšega podzaporedja danega zaporedja, ki je palindrom.
    Največja vsota podnizov Iskanje sosednje podnize z največjo vsoto znotraj dane enodimenzionalne matrike.
    Particija Enako podnabor Vsota Ugotavljanje, ali je mogoče dano množico razdeliti na dve podmnožici z enako vsoto.
    Pot z minimalnimi stroški Iskanje poti najmanjše cene od zgornjega levega kota do spodnjega desnega kota dane mreže.
    Največja podmatrika izdelka Iskanje sosednjega podniza z največjim produktom v danem enodimenzionalnem nizu.

    Povezani članki:

    • Tabelariranje vs Memoizacija
    • Kako rešiti problem dinamičnega programiranja?
    • Vadnica za dinamično programiranje
    • 50 najpogostejših težav s kodiranjem dinamičnega programiranja za intervjuje
    • Vadbene naloge algoritma dinamičnega programiranja

    8. Algoritmi grafov :

    Grafni algoritmi v podatkovnih strukturah in algoritmih (DSA) so nabor tehnik in metod, ki se uporabljajo za reševanje problemov, povezanih z grafi, ki so zbirka vozlišč in robov. Ti algoritmi so namenjeni izvajanju različnih operacij na grafih, kot npr iskanje, prečenje, iskanje najkrajše poti , in določanje povezljivost . Bistveni so za reševanje širokega nabora problemov v resničnem svetu, vključno z usmerjanjem omrežja, analizo družbenih omrežij in dodeljevanjem virov.

    Tema

    Opis teme

    Algoritem Opis algoritma
    Prehod grafa

    Tehnike za obisk vseh vozlišč v grafu.

    Iskanje najprej v globino (DFS) Raziskuje, kolikor je mogoče vzdolž vsake veje, preden se vrne nazaj.
    Iskanje v širino (BFS) Raziskuje sosednje točke, preden se premakne na naslednjo raven točk.

    Najmanjše število vpetih dreves

    Minimalna vpeta drevesa so najmanjša drevesa, ki povezujejo vsa vozlišča v grafu brez oblikovanja ciklov, kar dosežemo z dodajanjem najkrajših možnih robov.

    Kruskalov algoritem

    Najde minimalno vpeto drevo za povezan uteženi graf. Doda najmanjši rob teže, ki ne tvori cikla.

    Primov algoritem

    Najde tudi minimalno vpeto drevo za povezan uteženi graf. Doda najmanjši utežni rob, ki povezuje dve drevesi.

    Topološko razvrščanje

    Topološko razvrščanje je linearno urejanje vozlišč v usmerjenem acikličnem grafu (DAG), tako da je za vsak usmerjen rob od vozlišča u do vozlišča v, u v vrstnem redu pred v.

    Kahnov algoritem Kahnov algoritem najde topološko urejenost usmerjenega acikličnega grafa (DAG).
    Algoritem, ki temelji na DFS Algoritem, ki temelji na DFS, uporablja iskanje najprej v globino za izvedbo topološkega razvrščanja v usmerjenem acikličnem grafu (DAG).

    Najkrajša pot

    Najkrajša pot v grafu je pot med dvema točkama v grafu, ki ima najmanjšo vsoto uteži vzdolž robov v primerjavi z vsemi drugimi potmi med istima točkama.

    Dijkstrajev algoritem

    Pohlepni algoritem za iskanje najkrajše poti med vsemi vozlišči v času O(E * V logV).

    Floyd-Warshallov algoritem

    Poišče najkrajšo pot med vsemi pari vozlišč v času O(V^3).

    Algoritem Bellman Ford

    Poišče najkrajšo pot iz enega vira v času O(V * E).

    Johnsonov algoritem

    Poišče najkrajše poti med vsemi pari vozlišč v času O(V^2 logV + V * E).

    Močno povezane komponente

    Močno povezana komponenta (SCC) usmerjenega grafa je največja množica vozlišč, tako da obstaja pot od vsake vozlišča v množici do vsake druge vozlišča v množici.

    Kosarajujev algoritem

    Kosarajujev algoritem je algoritem z dvema prehodoma, ki učinkovito najde močno povezane komponente (SCC) usmerjenega grafa.

    Tarjanov algoritem

    Tarjanov algoritem je še en učinkovit algoritem za iskanje SCC v usmerjenem grafu

    Sorodne teme:

    • Vadnica za graf
    • 50 najpogostejših težav s kodiranjem grafov za intervjuje
    • Vadbena naloga o grafičnih algoritmih

    9 . Iskanje vzorcev

    Iskanje vzorcev je temeljna tehnika v DSA, ki se uporablja za iskanje pojavitev določenega vzorca v danem besedilu.

    Spodaj je nekaj standardnih algoritmov za iskanje vzorcev:

    Algoritem Opis Časovna zapletenost
    Surova sila Vzorec primerja z vsakim podnizom besedila O(mn)
    Knuth-Morris-Pratt Uporablja vnaprej izračunano funkcijo napake, da preskoči nepotrebne primerjave O(m + n)
    Boyer-Moore Primerja vzorec od desne proti levi, pri čemer preskoči znake na podlagi zadnjega neujemanja O(mn)
    Rabin-Karp Za hitro preverjanje potencialnih ujemanj uporablja zgoščevanje O(m + n)

    Sorodne teme:

    • Vadnica za iskanje vzorcev
    • Vadba Naloga na Iskanje vzorcev

    10 . Matematični algoritmi

    Matematični algoritmi so razred algoritmov, ki rešujejo probleme, povezane z matematičnimi koncepti. Široko se uporabljajo na različnih področjih, vključno z računalniško grafiko, numerično analizo, optimizacijo in kriptografijo.

    Algoritem Opis
    GCD in LCM Poiščite največji skupni delitelj in najmanjši skupni večkratnik dveh števil.
    Prafaktorizacija Razstavite število na prafaktorje.
    Fibonaccijeva števila Ustvarite Fibonaccijevo zaporedje, kjer je vsako število vsota dveh predhodnih.
    Katalonske številke Preštejte število veljavnih izrazov z danim številom parov oklepajev.
    Modularna aritmetika Izvajajte aritmetične operacije s števili po modulu dane vrednosti.
    Eulerjeva Totientova funkcija Preštejte število pozitivnih celih števil, manjših od danega števila, ki so relativno praštevilna.
    Izračuni nCr Izračunajte binomski koeficient, ki predstavlja število načinov izbire r elementov iz niza n elementov.
    Praštevila in preizkusi praštevil Ugotovite, ali je dano število praštevilo in učinkovito poiščite praštevila.
    Sito algoritmi Poiščite vsa praštevila do dane meje.

    Sorodne teme:

    • Vadbena naloga o matematičnem algoritmu

    11. Geometrijski algoritmi

    Geometrijski algoritmi so razred algoritmov, ki rešujejo probleme, povezane z geometrijo. Geometrijski algoritmi so bistveni za reševanje širokega spektra problemov v računalništvu, kot so:

    Algoritem Opis
    Konveksni trup Poišče najmanjši konveksni mnogokotnik, ki vsebuje niz točk.
    Najbližji par točk Poišče dve točki v množici, ki sta si najbližje.
    Presečišče črt Ugotovi, ali se dve črti sekata, in če se, najde točko presečišča.
    Točka v poligonu Določa, ali je dana točka znotraj ali zunaj poligona.

    Sorodne teme:

    • Vadbena naloga o geometrijskih algoritmih

    12. Bitni algoritmi

    Bitni algoritmi so algoritmi, ki delujejo na posameznih bitih števil. Ti algoritmi manipulirajo z binarno predstavitvijo števil za izvajanje nalog, kot so bitna manipulacija, bitne logične operacije (AND, OR, XOR), premikanje bitov , in nastavitev oz brisanje določenih bitov znotraj številke. Bitni algoritmi se pogosto uporabljajo v nizkonivojsko programiranje, kriptografija in optimizacijske naloge kjer je potrebna učinkovita manipulacija posameznih bitov.

    Tema Opis
    Bitni premik Premakne bite v levo ali desno za določeno število položajev.
    Levi premik (<<) Premakne bite v levo, kar dejansko pomnoži število z 2.
    Desni premik (>>) Premakne bite v desno, s čimer število dejansko deli z 2.
    Izvleček bitov Uporaba mask za ekstrahiranje določenih bitov iz celega števila.
    Nastavljanje bitov Uporaba mask za nastavitev določenih bitov na 1 v celem številu.
    Čiščenje bitov Uporaba mask za nastavitev določenih bitov na 0 v celem številu.
    Preklapljanje bitov Uporaba XOR (^) za preklop določenih bitov v celem številu.
    Štetje nastavljenih bitov Štetje števila nastavljenih bitov (1s) v celem številu.

    Sorodne teme:

    • Vadnica bitnih algoritmov
    • Vadbena naloga o bitnih algoritmih

    13. Naključni algoritmi

    Naključni algoritmi so algoritmi, ki uporabljajo naključnost za reševanje problemov. Za dosego svojih ciljev uporabljajo naključne vnose, kar pogosto vodi do enostavnejših ali učinkovitejših rešitev.

    Vrste naključnih algoritmov:

    • Las Vegas : vedno ustvari pravilen rezultat, vendar je čas delovanja naključen.
    • Monte karlo : Lahko povzroči nepravilen rezultat z majhno verjetnostjo, vendar je čas delovanja običajno hitrejši.

    Pomembni algoritmi, ki uporabljajo algoritme randomizacije:

    Neena Gupta
    Algoritem Opis
    QuickSort Naključni algoritem za razvrščanje s povprečno časovno kompleksnostjo primera O(n log n).
    Preskočni seznam Naključna podatkovna struktura, ki omogoča hitro iskanje in vstavljanje.
    Bloom Filter Verjetnostna podatkovna struktura za učinkovito testiranje pripadnosti nizu.

    14. Vejni in vezani algoritem

    The Vejni in vezani algoritem je metoda, ki se uporablja pri problemih kombinatorične optimizacije za sistematično iskanje najboljše rešitve. Deluje tako, da problem razdeli na manjše podprobleme ali veje in nato izloči določene veje na podlagi omejitev optimalne rešitve. Ta postopek se nadaljuje, dokler ni najdena najboljša rešitev ali dokler niso raziskane vse veje.

    Standardne težave pri razvejanem in vezanem algoritmu:

    Edinstven problem Opis
    0/1 Nahrbtnik z uporabo Branch and Bound Podrobnosti izvedbe veje in vezanega pristopa za reševanje problema 0/1 Knapsack.
    0/1 Nahrbtnik z uporabo veje z najnižjo ceno in mejo Reševanje problema nahrbtnika 0/1 z uporabo tehnike razvejanja in vezave z najmanjšimi stroški.
    8 uganka Težava z uporabo Branch and Bound Uporaba podružnice in vezana na rešitev problema uganke 8, priljubljene drsne uganke.
    N Queen Problem z uporabo Branch and Bound Uporablja vejo in je zavezan k iskanju rešitev za problem N Queens, klasični šahovski problem.

    Sorodne teme:

    • Vadnica za vejne in vezane algoritme

    Poučite se o zapletenosti

    Pri podatkovnih strukturah in algoritmih (DSA) je glavni cilj učinkovito in uspešno reševanje problemov. Za določitev učinkovitosti programa si ogledamo dve vrsti kompleksnosti:

    1. Časovna zapletenost : To nam pove, koliko časa potrebuje naša koda za izvajanje.
    2. Kompleksnost prostora : To nam pove, koliko pomnilnika uporablja naša koda.

    Asimptotični zapis :

    Za primerjavo učinkovitosti algoritmov uporabljamo asimptotični zapis, matematično orodje, ki ocenjuje čas temelji na velikost vnosa brez izvajanja kode. Osredotoča se na število osnovnih operacij v programu.

    Notacija Opis
    Big-O (Ο) Opisuje najslabši možni scenarij in zagotavlja zgornjo časovno mejo algoritma.
    Omega (Ω) Opisuje najboljši možni scenarij in ponuja nižjo časovno omejitev algoritma.
    Theta (θ) Predstavlja povprečno kompleksnost algoritma ali algoritma.

    Najpogosteje uporabljen zapis za analizo kode je Zapis velike O , ki zagotavlja zgornjo mejo časa delovanja ali porabe pomnilnika glede velikosti vnosa.

    Sorodne teme:

    Goljufije za vadbo problemov:

    Izbrani seznami težav iz spodnjih člankov:

    • Načrt DSA Sandeepa Jaina
    • SDE LIST – Popoln vodnik za pripravo SDE
    • Glavni list techcodeview.com – seznam vseh goljufij