Duomenų struktūros ir algoritmai (DSA) nurodo duomenų organizavimo ir saugojimo metodų tyrimą ir problemų sprendimo procedūrų (algoritmų), veikiančių šias duomenų struktūras, kūrimą. DSA yra vienas iš svarbiausių įgūdžių, kurį turi turėti kiekvienas informatikos studentas. Dažnai pastebima, kad žmonės, gerai išmanantys šias technologijas, yra geresni programuotojai nei kiti, todėl duoda interviu beveik kiekvienam technologijų milžinui. Tai DSA mokymo programa siekiama padėti jums greitai ir lengvai išmokti duomenų struktūrų ir algoritmų (DSA).
Turinys
- DSA visa forma
- Kas yra DSA?
- Kaip išmokti DSA?
- Styga
- Susieti sąrašai
- Matrica / tinklelis
- Stack
- Eilė
- Krūva
- Maiša
- Medis
- Grafikas
- Paieškos algoritmas
- Rūšiavimo algoritmas
- Skaldyk ir užkariauk algoritmas
- Godūs algoritmai
- Rekursija
- Atgalinis algoritmas
- Dinaminis programavimas
- Grafiko algoritmai:
- Šablonų paieška
- Matematiniai algoritmai
- Geometriniai algoritmai
- Bitiniai algoritmai
- Atsitiktiniai algoritmai
- Atšakos ir surišimo algoritmas
DSA visa forma
Terminas DSA reiškia Duomenų struktūros ir algoritmai , kompiuterių mokslo kontekste.
Kas yra DSA?
Duomenų struktūros ir algoritmai (DSA) nurodo duomenų organizavimo ir saugojimo metodų tyrimą ir problemų sprendimo procedūrų (algoritmų), veikiančių šias duomenų struktūras, kūrimą.
Kaip išmokti DSA?
Pirmas ir svarbiausias dalykas yra visos procedūros padalijimas į mažas dalis, kurias reikia atlikti nuosekliai. Visą DSA mokymosi procesą nuo nulio galima suskirstyti į 5 dalis:
- Išmokite bent vieną programavimo kalbą (tai paliekame jūsų pasirinkimui.)
- Sužinokite duomenų struktūras
- Sužinokite algoritmus
- Sužinokite apie laiko ir erdvės sudėtingumą
- Praktikos problemos DSA

Kaip išmokti DSA?
Tikėdamiesi, kad išmokote pasirinktą programavimo kalbą, pereikime prie kito žingsnio, kad išmoktume DSA šioje DSA mokymo programoje.
Čia ateina svarbiausias ir laukiamiausias duomenų struktūros ir algoritmo mokymosi plano etapas – etapas, kai pradedate mokytis apie DSA. DSA tema susideda iš dviejų dalių:
- Duomenų struktūros
- Algoritmai
Nors tai yra du skirtingi dalykai, jie yra labai tarpusavyje susiję, todėl labai svarbu sekti teisingą kelią, kad juos išmoktum veiksmingiausiai. Jei nežinote, kurį iš jų išmokti pirmiausia, rekomenduojame atlikti išsamią šios temos analizę: Čia mes stebėjome duomenų struktūros mokymosi procesą ir labiausiai susijusius bei svarbiausius tos duomenų struktūros naudojamus algoritmus.
Sužinokite duomenų struktūras
Duomenų struktūros yra esminiai komponentai, padedantys efektyviai tvarkyti ir saugoti duomenis kompiuterio atmintyje. Jie suteikia galimybę efektyviai valdyti duomenis ir jais manipuliuoti, kad būtų galima greičiau pasiekti, įterpti ir ištrinti duomenis. Įprastos duomenų struktūros apima masyvus, susietus sąrašus, krūvas, eiles, medžius ir grafikus , kurių kiekvienas tarnauja konkretiems tikslams, atsižvelgiant į nagrinėjamos problemos reikalavimus. Norint sukurti efektyvius algoritmus ir optimizuoti programinės įrangos veikimą, labai svarbu suprasti duomenų struktūras.
Masyvas yra linijinė duomenų struktūra, kurioje saugomas to paties duomenų tipo elementų rinkinys. Elementams priskiriama gretima atmintis, leidžianti prieiti prie nuolatinio laiko. Kiekvienas elementas turi unikalų indekso numerį.
- Operacijos masyve:
- Perėjimas : kartojimas per masyvo elementus.
- Įdėjimas : elemento įtraukimas į masyvą tam tikrame indekse.
- Ištrynimas : elemento pašalinimas iš masyvo tam tikrame indekse.
- Ieškoma : elemento radimas masyve pagal jo reikšmę arba indeksą.
- Masyvų tipai :
- Vienmatis masyvas : paprastas masyvas su vienu matmeniu.
- Daugiamatis masyvas : masyvas su keliais matmenimis, pvz., matrica.
- Masyvo programos :
- Duomenų saugojimas nuosekliai
- Eilių, krūvų ir kitų duomenų struktūrų diegimas
- Matricų ir lentelių atvaizdavimas
- Susijusios temos apie masyvą:
- Masyvų pamoka
- 50 populiariausių interviu masyvo kodavimo problemų
- Praktikuokite masyvų problemas
2. Styga
A styga yra simbolių seka, paprastai naudojama tekstui pavaizduoti. Tai laikoma duomenų tipu, leidžiančiu manipuliuoti ir apdoroti tekstinius duomenis kompiuterinėse programose.
- Operacijos su styga :
- Sujungimas : dviejų stygų sujungimas.
- Palyginimas : Dviejų eilučių palyginimas leksikografiškai.
- Poeilutė gavyba : poeilutės ištraukimas iš eilutės.
- Paieška : ieškoma poeilutės eilutėje.
- Modifikacija : simbolių keitimas arba pakeitimas eilutėje.
- Styginių taikymai :
- Teksto apdorojimas
- Rašto derinimas
- Duomenų patvirtinimas
- Duomenų bazių valdymas
- Susiję įrašai:
- Styginių pamoka
- 50 populiariausių interviu eilučių kodavimo problemų
- Praktikos problemos ant stygų
3. Susieti sąrašai
A susietas sąrašas yra linijinė duomenų struktūra, kuri saugo duomenis mazguose, kurie yra sujungti rodyklėmis. Skirtingai nuo masyvų, susieti sąrašai nėra saugomi gretimose atminties vietose.
- Susieto sąrašo ypatybės:
- Dinamiškas : susietų sąrašų dydį galima lengvai pakeisti pridedant arba pašalinant mazgus.
- Negretima : Mazgai saugomi atsitiktinėse atminties vietose ir sujungiami rodyklėmis.
- Nuosekli prieiga : mazgus galima pasiekti tik nuosekliai, pradedant nuo sąrašo pradžios.
- Operacijos susietame sąraše:
- Kūrimas : naujo susieto sąrašo kūrimas arba naujo mazgo įtraukimas į esamą sąrašą.
- Perėjimas : kartojimas per sąrašą ir prieiga prie kiekvieno mazgo.
- Įdėjimas : naujo mazgo pridėjimas konkrečioje sąrašo vietoje.
- Ištrynimas : Mazgo pašalinimas iš sąrašo.
- Paieška : mazgo su konkrečia reikšme paieška sąraše.
- Susietųjų sąrašų tipai :
- Atskirai susietas sąrašas : kiekvienas mazgas nurodo kitą mazgą sąraše.
- Dvigubai susietas sąrašas : kiekvienas mazgas nurodo kitą ir ankstesnį sąrašo mazgus.
- Aplinkinis susietų sąrašas : paskutinis mazgas nukreiptas atgal į pirmąjį mazgą, sudarydamas apskritą kilpą.
- Susietojo sąrašo programos :
- Susieti sąrašai naudojami įvairiose programose, įskaitant:
- Eilių ir kaminų diegimas
- Atvaizduojantys grafikus ir medžius
- Užsakytų duomenų tvarkymas
- Atminties valdymas
- Susijusios temos:
- Susieto sąrašo pamoka
- 50 populiariausių problemų susietame interviu sąraše
- Praktikuokite susietųjų sąrašų problemas
4. Matrica / tinklelis
A matrica yra dvimatis elementų masyvas, išdėstytas eilėmis ir stulpeliais. Jis vaizduojamas kaip stačiakampis tinklelis, kuriame kiekvienas elementas yra eilutės ir stulpelio sankirtoje.
- Pagrindinės sąvokos:
- Eilutės : horizontalios matricos elementų linijos.
- Stulpeliai : vertikalios elementų linijos matricoje.
- Matmenys : eilučių ir stulpelių skaičius matricoje (pvz., 3 × 4 matrica turi 3 eilutes ir 4 stulpelius).
- Elementas Prieiga : elementus galima pasiekti naudojant eilučių ir stulpelių indeksus (pvz., M[2][3] nurodo elementą 2 eilutėje, 3 stulpelyje).
- Matricos/Grid programos :
- Vaizdo apdorojimas
- Duomenų analizė
- Optimizavimo problemos
- Susiję įrašai:
- Matricos / tinklelio pamoka
- 50 geriausių interviu problemų dėl matricos / tinklelio
- Praktikos problemos Matrix / Grid
5. Stack
Stack yra linijinė duomenų struktūra, kuri atitinka tam tikrą operacijų atlikimo tvarką. Užsakymas gali būti LIFO (paskutinis pirmas) arba FILO (pirmas į paskutinis) . LIFO reiškia, kad elementas, kuris įterpiamas paskutinis, išeina pirmas ir EILUTĖ reiškia, kad elementas, kuris įterpiamas pirmas, išeina paskutinis.
- Operacija ant Stack :
- Stumti : prideda elementą krūvos viršuje
- Pop : pašalina ir grąžina elementą krūvos viršuje
- Žvilgtelėti : grąžina elementą krūvos viršuje jo nepašalinant
- Dydis : grąžina elementų skaičių krūvoje
- Yra tuščias : patikrina, ar krūva tuščia
- Stack programos :
- Funkciniai skambučiai
- Išraiškos vertinimas
- Atsitraukimas
- Anuliuoti/perdaryti operacijas
- Susijusios temos „Stack“:
- Stack pamoka
- 50 populiariausių interviu problemų
- Praktikuokite „Stack“ problemas
6. Eilė
A Eilė Duomenų struktūra yra pagrindinė kompiuterių mokslo sąvoka, naudojama duomenims saugoti ir tvarkyti tam tikra tvarka. Tai vadovaujasi principu Pirmas vidun, pirmas laukan ( FIFO ), kur pirmasis į eilę įtrauktas elementas yra pirmasis, kurį reikia pašalinti
- Operacija eilėje :
- Eilė : prideda elementą eilės gale
- Atitinkamai : pašalina elementą iš eilės priekio
- Žvilgtelėti : paima priekinį elementą jo nepašalindamas
- Yra tuščias : patikrina, ar eilė tuščia
- Pilnas : patikrina, ar eilė pilna
- Eilės tipas :
- Žiedinė eilė : paskutinis elementas jungiasi su pirmuoju elementu
- Dvipusė eilė (deque) : operacijas galima atlikti iš abiejų galų
- Prioritetinė eilė : Elementai išdėstyti pagal prioritetą
- Eilės programos :
- Darbo planavimas
- Pranešimų eilė
- Simuliacinis modeliavimas
- Duomenų buferis
- Susijusios temos:
- Eilių pamoka
- 50 populiariausių problemų eilėje pokalbiams
- Praktikuokite problemas eilėje
7. Krūva
A Krūva yra visa dvejetainio medžio duomenų struktūra, atitinkanti krūvos savybę: kiekvieno mazgo antrinių elementų vertė yra mažesnė arba lygi jo paties vertei. Įgyvendinimui dažniausiai naudojamos krūvos prioritetines eiles , kur mažiausias (arba didžiausias) elementas visada yra medžio šaknyje.
- Krūvos operacijos :
- Įdėti : prideda naują elementą į krūvą išlaikant krūvos savybes.
- Ištraukimas-Max/Ištrauka-Min : pašalina šakninį elementą ir pertvarko krūvą.
- Didinimo / mažinimo klavišas : atnaujina mazgo vertę ir pertvarko krūvą.
- Krūvos tipai :
- Max-Heap : šakninis mazgas turi didžiausią reikšmę tarp savo vaikų.
- Min-Heap : šakninis mazgas turi mažiausią reikšmę tarp savo vaikų.
- „Heap“ programos :
- Prioritetinės eilės
- Rūšiavimas
- Grafikų algoritmai (pvz., Dijkstra algoritmas)
- Susiję įrašai:
- Krūvos pamoka
- 50 populiariausių interviu problemų
- Praktikos problemos „Heap“.
8. Maiša
Maiša yra technika, kuri generuoja fiksuoto dydžio išvestį (maišos reikšmę) iš kintamo dydžio įvesties naudojant matematines formules, vadinamas maišos funkcijos . Maiša naudojama norint nustatyti elemento saugojimo indeksą arba vietą duomenų struktūroje, kad būtų galima efektyviai gauti ir įterpti.
- Pagrindinės sąvokos:
- Maišos funkcija : matematinė funkcija, susiejanti įvestį su maišos reikšme.
- Maišos lentelė : duomenų struktūra, kurioje saugomos rakto ir reikšmių poros, kur raktas yra maišos reikšmė, o reikšmė yra tikrieji duomenys.
- Susidūrimas : kai du skirtingi raktai sukuria tą pačią maišos reikšmę.
- Maišos funkcijų tipai :
- Padalijimo metodas : padalija įvestį iš konstantos ir naudoja likutį kaip maišos reikšmę.
- Vidurinė aikštė Metodas: Padalina įvestį kvadratu ir paima vidurinius skaitmenis kaip maišos reikšmę.
- Sulankstymo būdas : padalija įvestį į vienodo dydžio blokus ir sudeda juos, kad gautų maišos vertę.
- Daugybos metodas : padaugina įvestį iš konstantos ir paima trupmeninę dalį kaip maišos reikšmę.
- Susidūrimo sprendimo būdai :
- Atskiras sujungimas (atvira maiša) : išsaugo susiduriančius elementus susietame sąraše atitinkama maišos verte.
- Atviras adresavimas (uždaryta maiša) : naudoja įvairias strategijas, kad rastų alternatyvią vietą maišos lentelės elementų susidūrimui.
- Maišos pritaikymas :
- Veiksmingas duomenų saugojimas ir gavimas duomenų bazėse ir failų sistemose.
- Slaptažodžių ir skaitmeninių parašų tikrinimas.
- Užklausų paskirstymas keliuose serveriuose.
- Saugios maišos generavimas duomenų vientisumui ir autentifikavimui.
- Susiję įrašai:
- Hash pamoka
- Praktikuokite maišos problemas
9. Medis
A medis yra netiesinė hierarchinė duomenų struktūra, susidedanti iš briaunomis sujungtų mazgų, kurių viršutinis mazgas vadinamas šaknimis, o mazgai turi antrinius mazgus. Jis naudojamas kompiuterių moksle, siekiant efektyviai organizuoti duomenis.
python rūšiavimo eilutė
- Medžio perėjimas : Medžio apėjimo metodai naudojami medžio duomenų struktūros mazgams aplankyti ir apdoroti. Trys paplitę perėjimo būdai yra šie:
- Eilėje : Aplankykite kairįjį pomedį, dabartinį mazgą, tada dešinįjį pomedį.
- Išankstinis užsakymas : apsilankykite dabartiniame mazge, kairiajame pomedyje, tada dešiniajame pomedyje.
- Užsakymas po užsakymo : aplankykite kairįjį pomedį, dešinįjį pomedį, tada dabartinį mazgą.
- Medžių klasifikacijos:
- Klasifikacijos medžiai nurodyti medžių grupavimą pagal tam tikras savybes ar kriterijus. Tai gali apimti medžių skirstymą į kategorijas pagal jų balanso koeficientą, mazgų laipsnį, eilės ypatybes ir tt Žemiau yra keletas svarbių medžio klasifikacijų.
klasifikacija | apibūdinimas | Tipas | apibūdinimas |
---|---|---|---|
Pagal laipsnį | Medžiai gali būti klasifikuojami pagal maksimalų vaikų skaičių, kurį kiekvienas mazgas gali turėti. | Dvejetainis medis | Kiekvienas mazgas turi daugiausia du vaikus. |
Trijų medis | Kiekvienas mazgas turi daugiausia tris vaikus. | ||
N-arinis medis | Kiekvienas mazgas turi daugiausia N vaikų. | ||
Pagal užsakymą | Medžiai gali būti klasifikuojami pagal mazgų ir pomedžių tvarką | Dvejetainis paieškos medis (BST) | Kairysis vaikas |
Krūva | Specializuotas dvejetainis medis su krūvos savybe. | ||
Pagal Balansą | Medžius galima klasifikuoti pagal tai, kaip gerai jie yra subalansuoti. | Pomedžių aukščiai skiriasi daugiausia vienu. Pavyzdžiui, AVL medžiai ir raudonai juodi medžiai. | |
Nesubalansuotas medis | Pomedžių aukščiai gali labai skirtis, o tai turi įtakos tokių operacijų našumui kaip paieška ir įterpimas. |
- Medžių pritaikymas:
- Failų sistemos
- Duomenų bazės
- XML dokumentai
- Dirbtinis intelektas
- Susiję įrašai:
- Medžio pamoka
- 50 populiariausių medžio kodavimo problemų
- Praktikuokite problemas ant medžio
10. Grafikas
A Grafikas yra nelinijinė duomenų struktūra, kurią sudaro baigtinis viršūnių (arba mazgų) rinkinys ir briaunų rinkinys, jungiantis mazgų porą.
- Grafiko perėjimai:
- Pirmoji paieška (BFS) : Aplanko mazgus lygiu pagal lygį.
- Giluminė paieška (DFS) : Rekursyviai lankosi mazguose, vienu metu tyrinėja vieną šaką.
- Grafikų taikymas :
- Socialiniai tinklai
- Žemėlapiai ir navigacija
- Planavimas
- Duomenų gavyba
- Susiję įrašai:
- Grafiko vaizdavimas
- Grafikų tipai
- Grafiko pamoka
- Praktikuokite grafiko problemas
Sužinokite algoritmus
Kai išvalysite sąvokas Duomenų struktūros , dabar pats laikas pradėti kelionę per Algoritmai . Atsižvelgiant į pobūdį ir naudojimą, algoritmai yra sugrupuoti į kelias kategorijas, kaip parodyta toliau:
1. Paieškos algoritmas
Paieškos algoritmai naudojami konkretiems duomenims rasti didesniame duomenų rinkinyje. Tai padeda nustatyti tikslinės vertės buvimą duomenyse. Yra įvairių tipų paieškos algoritmai, kurių kiekvienas turi savo požiūrį ir efektyvumą.
- Dažniausiai naudojami paieškos algoritmai:
- Linijinė paieška : kartotinė paieška nuo vieno galo iki kito.
- Dvejetainė paieška : „Skaldyk ir valdyk“ paieška surūšiuotame masyve, perpus sumažinant paieškos erdvę kiekvienos iteracijos metu.
- Trinarė paieška : Padalinkite ir valdykite paiešką surūšiuotame masyve, padalydami paieškos erdvę į tris dalis kiekvienos iteracijos metu.
- Kiti paieškos algoritmai:
- Peršokti paieška
- Interpoliacijos paieška
- Eksponentinė paieška
- Susijusios temos:
- Praktikuokite paieškos algoritmo problemas
2. Rūšiavimo algoritmas
Rūšiavimo algoritmai naudojami sąrašo elementams išdėstyti tam tikra tvarka, pavyzdžiui, skaitine arba abėcėle. Ji sistemingai tvarko elementus, kad būtų lengviau ieškoti ir pasiekti konkrečius elementus.
Yra daug įvairių rūšiavimo algoritmų. Kai kurie plačiai naudojami algoritmai yra šie:
Rūšiavimo algoritmas | apibūdinimas |
---|---|
Burbulų rūšiavimas | Iteratyviai lygina gretimus elementus ir sukeičia juos, jei jie neveikia. Didžiausias elementas burbuliuoja iki sąrašo pabaigos kiekvieną kartą. |
Pasirinkimas Rūšiuoti | Suranda mažiausią elementą nerūšiuotoje sąrašo dalyje ir pakeičia jį pirmuoju elementu. Šis procesas kartojamas, kol visas sąrašas bus surūšiuotas. |
Įterpimo rūšiavimas | Sukuria surūšiuotą sąrašą po vieną elementą, kiekvieną nerūšiuotą elementą įterpdamas į tinkamą vietą rūšiuotoje dalyje. |
Greitas rūšiavimas | „Skaldyk ir valdyk“ algoritmas, parenkantis suvestinį elementą, padalijus sąrašą į du posąraščius pagal suvestinę ir rekursyviai taikantis tą patį procesą subsąrašiams. |
Sujungti Rūšiuoti | Kitas „skaldyk ir valdyk“ algoritmas, kuris rekursyviai padalija sąrašą į mažesnius subsąraščius, juos surūšiuoja ir vėl sujungia, kad gautų surūšiuotą sąrašą. |
Susijusios temos:
- Rūšiavimo algoritmo pamoka
- Populiariausi rūšiavimo interviu klausimai ir problemos
- Praktikuokite rūšiavimo algoritmo problemas
3. Skaldyk ir valdyk algoritmas
Skaldyk ir valdyk algoritmai taiko rekursinę strategiją, kad išspręstų problemas, suskirstydami jas į smulkesnes dalis, išspręsdami tas subproblemas ir sujungdami sprendimus, kad gautų galutinį sprendimą.
Žingsniai:
svyruoja css
- Padalinti : Padalinkite problemą į mažesnes nepriklausomas dalis.
- Užkariauti : Rekursyviai išspręskite kiekvieną antrinę užduotį.
- Sujungti : Sujunkite antrinių uždavinių sprendimus, kad gautumėte galutinį sprendimą.
Pavyzdžiai:
- Sujungti rūšiavimą: padalija masyvą į dvi dalis, rūšiuoja kiekvieną pusę rekursyviai ir sujungia surūšiuotas dalis.
- Greitas rūšiavimas: pasirenkamas sukimosi elementas, masyvas padalijamas į du pogrupius pagal sukimąsi ir rekursyviai rūšiuoja kiekvieną pogrupį.
- Dvejetainė paieška: Padalina paieškos erdvę per pusę, kol randamas tikslinis elementas arba išnaudojama paieškos vieta.
Susiję straipsniai:
- Skaldyk ir valdyk pamoka
- Praktikuokite „Skaldyk ir valdyk“ algoritmo problemas
4. Godūs algoritmai
Kaip rodo pavadinimas, šis algoritmas sukuria sprendimą po vieną ir pasirenka kitą elementą, kuris duoda akivaizdžiausią ir betarpiškiausią naudą, t. y. kuris tuo momentu yra optimaliausias pasirinkimas. Taigi „Greedy“ geriausiai tinka problemos, kai pasirenkant lokaliai optimalų variantą taip pat galima rasti globalių sprendimų.
Kai kurios svarbios gobšų algoritmų problemos:
Algoritmas | apibūdinimas |
---|---|
Dalinė kuprinė | Raskite didžiausią bendrą daiktų, kuriuos galima įdėti į kuprinę, vertę, kad būtų galima įtraukti daiktus dalimis. |
Dijkstros algoritmas | Suranda trumpiausią kelią nuo šaltinio viršūnės iki visų kitų svertinio grafiko viršūnių. |
Kruskal algoritmas | Suranda mažiausią svertinio grafiko apimantį medį. |
Huffmano kodavimas | Sukuria optimalų priešdėlio kodą simbolių rinkiniui, sumažindamas bendrą kodavimo ilgį. |
Susiję straipsniai:
- Greedy Algorithm Tutorial
- Praktikuokite „Greedy“ algoritmo problemas
5. Rekursija
Rekursija yra programavimo technika, kai funkcija save vadina pagal savo apibrėžimą. Paprastai jis naudojamas sprendžiant problemas, kurias galima suskirstyti į mažesnius tos pačios problemos atvejus. Pavyzdžiui: Hanojaus bokštai (TOH) , Faktorinis skaičiavimas ir Fibonačio seka ir tt
Žingsniai :
- Bazinis atvejis : apibrėžkite sąlygą, kuri sustabdo pasikartojančius skambučius ir pateikia sprendimą.
- Rekursyvus atvejis : apibrėžkite veiksmus, kaip išskaidyti problemą į mažesnius atvejus ir atlikti pakartotinius skambučius.
- Grįžti : grąžinkite sprendimą iš rekursinių skambučių ir sujunkite juos, kad išspręstumėte pradinę problemą.
Recursion yra vienas iš dažniausiai naudojamų algoritmų, nes jis yra daugelio kitų algoritmų pagrindas, pvz. Medžių kirtimai , Grafikų perėjimai , Skaldyk ir valdyk algoritmai ir Grįžimo algoritmai .
Susijusios temos:
- Rekursijos pamoka
- Rekursinės funkcijos
- Uodegos rekursija
- 50 geriausių interviu rekursinio algoritmo problemų
- Praktikuokite rekursijos algoritmo problemas
6. Atgalinis algoritmas
Kaip minėta anksčiau, Atsitraukimas algoritmas yra išvestas iš rekursijos algoritmo, su galimybe grįžti, jei nepavyksta rekursinis sprendimas, t. y. jei sprendimas nepavyksta, programa atsekama iki momento, kai nepavyko, ir remiasi kitu sprendimu. Taigi iš esmės ji išbando visus galimus sprendimus ir randa tinkamą.
Kai kurios svarbios ir dažniausiai pasitaikančios atbulinės eigos algoritmų problemos, kurias turite išspręsti prieš tęsdami, yra šios:
Problema | apibūdinimas |
---|---|
Riterio kelionės problema | Rasti riterio ėjimų seką šachmatų lentoje, kad jis kiekvieną langelį aplankytų lygiai vieną kartą. |
Žiurkė labirinte | Rasti kelią nuo pradinės padėties iki išėjimo labirinte, o kliūtys vaizduojamos kaip sienos. |
N-Queen problema | N damų padėjimas ant N × N šachmatų lentos taip, kad dvi damos nepultų viena kitos. |
Pogrupio sumos problema | Nustatyti, ar yra nurodytos aibės poaibis su nurodyta suma. |
Sudoku | 9 × 9 tinklelio galvosūkio sprendimas su skaičiais nuo 1 iki 9 taip, kad kiekvienoje eilutėje, stulpelyje ir 3 × 3 tinklelyje būtų visi skaitmenys be pasikartojimo. |
Susijęs straipsnis:
- Atgalinio mokymo programa
- Praktikuokite „Backtracking“ algoritmo problemas
7. Dinaminis programavimas
Dinaminis programavimas yra metodas, naudojamas matematikoje ir informatikoje sudėtingoms problemoms spręsti skaidant jas į paprastesnes dalis. Išsprendus kiekvieną antrinę problemą tik vieną kartą ir išsaugant rezultatus, išvengiama perteklinių skaičiavimų, todėl galima rasti efektyvesnių įvairių problemų sprendimų.
Pagrindinės sąvokos:
- Optimali pagrindo konstrukcija : Optimalus problemos sprendimas gali būti sudarytas iš optimalių sprendimų iki jos subproblemų.
- Sutampančios subproblemos : Didesnėse problemose dažnai kartojasi antrinės problemos, todėl atliekami pertekliniai skaičiavimai.
- Atmintinė / Lentelė : saugoti antrinių problemų sprendimus, kad būtų išvengta perskaičiavimo.
Kai kurios svarbios ir dažniausiai pasitaikančios dinaminio programavimo algoritmų problemos, kurias turite išspręsti prieš pradėdami, yra šios:
Problema | apibūdinimas |
---|---|
Fibonačio seka | Fibonačio skaičių generavimas naudojant dinaminį programavimą, kad būtų išvengta perteklinių skaičiavimų. |
Ilgiausia bendra seka | Raskite ilgiausią dviejų sekų seką. |
Ilgiausiai didėjanti seka | Ilgiausios tam tikros sekos, kurioje elementai rūšiuojami didėjančia tvarka, posekos radimas. |
0/1 Kuprinės problema | Didžiausios vertės, kurią galima gauti pasirinkus daiktus su nurodytais svoriais ir vertėmis, nustatymas, neviršijant nurodytos svorio ribos. |
Strypo pjovimo problema | Maksimalus pelnas supjaustant tam tikro ilgio meškerę į gabalus ir parduodant pagal nurodytas kainas. |
Monetų keitimo problema | Nustatyti, kiek būdų pakeisti tam tikrą sumą naudojant tam tikrą monetų nominalų rinkinį. |
Redaguoti atstumą | Minimalaus operacijų skaičiaus (įterpimo, trynimo, pakeitimo), reikalingo vienai eilutei konvertuoti į kitą, radimas. |
Pogrupio sumos problema | Nustatymas, ar egzistuoja tam tikros aibės poaibis su nurodyta suma. |
Ilgiausia palindrominė seka | Ilgiausios tam tikros sekos, kuri yra palindromas, posekos radimas. |
Didžiausia „Subarray“ suma | Gretimos posistemės su didžiausia suma duotame vienmačiame masyve radimas. |
Pasiskirstymas lygus poaibio suma | Nustatyti, ar galima duotąją aibę padalinti į du poaibius su vienoda suma. |
Minimalių išlaidų kelias | Minimalių išlaidų kelio nuo viršutinio kairiojo kampo iki apatinio dešiniojo tam tikro tinklelio kampo radimas. |
Maksimalus produkto pogrupis | Gretimos posistemės su didžiausia sandauga duotame vienmačiame masyve radimas. |
Susiję straipsniai:
- Lentelių sudarymas prieš atmintį
- Kaip išspręsti dinaminio programavimo problemą?
- Dinaminio programavimo pamoka
- 50 populiariausių interviu dinaminio programavimo kodavimo problemų
- Praktikuokite dinaminio programavimo algoritmo problemas
8. Grafikų algoritmai :
Grafiniai algoritmai duomenų struktūros ir algoritmai (DSA) yra technikų ir metodų rinkinys, naudojamas sprendžiant problemas, susijusias su grafikais, kurie yra mazgų ir briaunų rinkinys. Šie algoritmai skirti atlikti įvairias operacijas su grafikais, pvz ieškoti, keliauti, rasti trumpiausią kelią , ir nustatant ryšį . Jie yra būtini sprendžiant daugybę realaus pasaulio problemų, įskaitant tinklo maršruto parinkimą, socialinio tinklo analizę ir išteklių paskirstymą.
Tema | Temos aprašymas | Algoritmas | Algoritmo aprašymas |
---|---|---|---|
Grafiko perėjimas | Visų grafo viršūnių lankymo būdai. | Giluminė paieška (DFS) | Prieš atsitraukdami, tyrinėkite kiek įmanoma toliau išilgai kiekvienos šakos. |
Pirmoji paieška (BFS) | Prieš pereidamas į kitą viršūnių lygį, tyrinėja kaimynines viršūnes. | ||
Mažiausiai besitęsiantys medžiai | Minimalūs medžiai yra mažiausi medžiai, jungiantys visus grafiko mazgus nesudarant ciklų, pasiekiami pridedant trumpiausias įmanomas briaunas. | Jis randa susieto svertinio grafiko minimalų apimantį medį. Tai prideda mažiausią svorio kraštą, kuris nesudaro ciklo. | |
Jis taip pat randa susieto svertinio grafiko minimalų apimantį medį. Tai prideda mažiausią svorio kraštą, jungiantį du medžius. | |||
Topologinis rūšiavimas | Topologinis rūšiavimas yra tiesinis viršūnių išdėstymas nukreiptame acikliniame grafe (DAG), kad kiekvienoje nukreiptoje briaunoje nuo viršūnės u iki viršūnės v, u yra prieš v. | Kahno algoritmas | Kahno algoritmas randa topologinę nukreipto aciklinio grafiko (DAG) tvarką. |
DFS pagrįstas algoritmas | DFS pagrįstas algoritmas naudoja „Depth-First Search“, kad atliktų topologinį rūšiavimą nukreiptame acikliniame grafe (DAG). | ||
Trumpiausias kelias | Trumpiausias kelias grafe yra kelias tarp dviejų grafo viršūnių, kurios kraštinėse turi mažiausią svorių sumą, palyginti su visais kitais keliais tarp tų pačių dviejų viršūnių. | Godus algoritmas, skirtas rasti trumpiausią kelią tarp visų mazgų per O(E * V logV) laiką. | |
Suranda trumpiausią kelią tarp visų mazgų porų per O(V^3) laiką. | |||
Suranda trumpiausią kelią iš vieno šaltinio per O(V * E) laiką. | |||
Džonsono algoritmas | Suranda trumpiausius kelius tarp visų viršūnių porų per O(V^2 logV + V * E) laiką. | ||
Stipriai sujungti komponentai | Nukreipto grafo stipriai sujungtas komponentas (SCC) yra maksimali viršūnių rinkinys, kuriame yra kelias iš kiekvienos aibės viršūnės į kiekvieną kitą aibės viršūnę. | Kosaraju algoritmas yra dviejų žingsnių algoritmas, kuris efektyviai randa stipriai susietus nukreipto grafo komponentus (SCC). | |
Tarjano algoritmas | Tarjano algoritmas yra dar vienas efektyvus algoritmas ieškant SCC nukreiptame grafike |
Susijusios temos:
- Grafiko pamoka
- 50 populiariausių interviu grafikų kodavimo problemų
- Grafų algoritmų praktikos uždavinys
9 . Šablonų paieška
Rašto paieška yra pagrindinė DSA technika, naudojama tam tikro modelio atvejams rasti tam tikrame tekste.
Žemiau yra keletas standartinių šablonų paieškos algoritmų:
Algoritmas | apibūdinimas | Laiko sudėtingumas |
---|---|---|
Brutali jėga | Jis lygina modelį su kiekviena teksto eilute | O(mn) |
Knutas-Morrisas-Pratas | Jis naudoja iš anksto apskaičiuotą gedimo funkciją, kad praleistų nereikalingus palyginimus | O(m + n) |
Boyeris-Moore'as | Jis lygina šabloną iš dešinės į kairę, praleidžiant simbolius pagal paskutinį neatitikimą | O(mn) |
Rabinas-Karpas | Jis naudoja maišą, kad greitai patikrintų galimus atitikmenis | O(m + n) |
Susijusios temos:
- Šablonų paieškos pamoka
- Praktikos problema įjungta Šablonų paieška
10 . Matematiniai algoritmai
Matematiniai algoritmai yra algoritmų klasė, sprendžianti su matematinėmis sąvokomis susijusias problemas. Jie plačiai naudojami įvairiose srityse, įskaitant kompiuterinę grafiką, skaitmeninę analizę, optimizavimą ir kriptografiją.
Algoritmas | apibūdinimas |
---|---|
GCD ir LCM | Raskite dviejų skaičių didžiausią bendrąjį daliklį ir mažiausią bendrąjį kartotinį. |
Pirminis faktorizavimas | Išskaidykite skaičių į pirminius jo veiksnius. |
Fibonačio skaičiai | Sukurkite Fibonačio seką, kur kiekvienas skaičius yra dviejų ankstesnių skaičių suma. |
Katalonijos numeriai | Suskaičiuokite galiojančių išraiškų skaičių su nurodytu skliaustų porų skaičiumi. |
Modulinė aritmetika | Atlikite aritmetines operacijas su skaičiais pagal tam tikrą reikšmę. |
Eulerio totieno funkcija | Suskaičiuokite teigiamų sveikųjų skaičių, mažesnių už nurodytą skaičių, kurie yra santykinai pirminiai. |
nCr skaičiavimai | Apskaičiuokite dvinarį koeficientą, kuris parodo būdų, kaip pasirinkti r elementų iš n elementų rinkinio, skaičių. |
Pirminiai skaičiai ir pirmumo testai | Nustatykite, ar nurodytas skaičius yra pirminis, ir efektyviai raskite pirminius skaičius. |
Sietų algoritmai | Raskite visus pirminius skaičius iki nurodytos ribos. |
Susijusios temos:
- Praktikos uždavinys dėl matematinio algoritmo
11. Geometriniai algoritmai
Geometriniai algoritmai yra algoritmų klasė, sprendžianti su geometrija susijusias problemas. Geometriniai algoritmai yra būtini sprendžiant daugybę kompiuterių mokslo problemų, tokių kaip:
Algoritmas | apibūdinimas |
---|---|
Išgaubtas korpusas | Suranda mažiausią išgaubtą daugiakampį, kuriame yra taškų rinkinys. |
Artimiausia taškų pora | Suranda du aibės taškus, kurie yra arčiausiai vienas kito. |
Linijų sankirta | Nustato, ar dvi tiesės susikerta, ir, jei taip, randa susikirtimo tašką. |
Taškas daugiakampyje | Nustato, ar duotas taškas yra daugiakampio viduje ar išorėje. |
Susijusios temos:
- Geometrinių algoritmų praktikos uždavinys
12. Bitiniai algoritmai
Bitiniai algoritmai yra algoritmai, kurie veikia su atskirais skaičių bitais. Šie algoritmai manipuliuoja dvejetainiu skaičių vaizdavimu, kad galėtų atlikti tokias užduotis kaip manipuliavimas bitais, bitinės loginės operacijos (IR, ARBA, XOR), perkeliami bitai , ir nustatymą arba konkrečių bitų išvalymas per skaičių. Dažniausiai naudojami bitiniai algoritmai žemo lygio programavimo, kriptografijos ir optimizavimo užduotys kur reikia efektyviai valdyti atskirus bitus.
Tema | apibūdinimas |
---|---|
Bitų keitimas | Perkelia bitus į kairę arba dešinę nurodytu pozicijų skaičiumi. |
Poslinkis į kairę (<<) | Perkelia bitus į kairę, efektyviai padaugindamas skaičių iš 2. |
Poslinkis į dešinę (>>) | Perkelia bitus į dešinę, efektyviai padalydamas skaičių iš 2. |
Ištraukite bitus | Kaukių naudojimas norint išgauti konkrečius bitus iš sveikojo skaičiaus. |
Nustatymo bitai | Kaukių naudojimas norint nustatyti konkrečius bitus iki 1 sveikajame skaičiuje. |
Valymo bitai | Kaukių naudojimas norint nustatyti konkrečius bitus iki 0 sveikajame skaičiuje. |
Perjungimo bitai | XOR (^) naudojimas norint perjungti konkrečius sveikojo skaičiaus bitus. |
Skaičiavimas Nustatyti bitus | Nurodytų bitų (1s) skaičiavimas sveikajame skaičiuje. |
Susijusios temos:
Java rinkimo sistema
- Bitinių algoritmų pamoka
- Praktikos uždavinys naudojant bitinius algoritmus
13. Atsitiktiniai algoritmai
Atsitiktiniai algoritmai yra algoritmai, kurie naudoja atsitiktinumą problemoms spręsti. Jie naudojasi atsitiktine informacija, kad pasiektų savo tikslus, o tai dažnai lemia paprastesnius ar efektyvesnius sprendimus.
Atsitiktinių algoritmų tipai:
- Las Vegasas : visada pateikia teisingą rezultatą, tačiau veikimo laikas yra atsitiktinis.
- Monte Karlas : Su maža tikimybe gali būti gautas neteisingas rezultatas, tačiau veikimo laikas paprastai yra greitesnis.
Svarbūs algoritmai, kuriuose naudojami atsitiktinių imčių algoritmai:
Algoritmas | apibūdinimas |
---|---|
Greitas rūšiavimas | Atsitiktinių imčių rūšiavimo algoritmas, kurio vidutinis atvejo laiko sudėtingumas yra O(n log n). |
Praleisti sąrašą | Atsitiktinių imčių duomenų struktūra, užtikrinanti greitas paieškos ir įterpimo operacijas. |
Bloom filtras | Tikimybinė duomenų struktūra, skirta efektyviam rinkinio narystės testavimui. |
14. Atšakos ir surišimo algoritmas
The Atšakos ir surišimo algoritmas yra metodas, naudojamas kombinatorinio optimizavimo uždaviniuose, siekiant sistemingai ieškoti geriausio sprendimo. Jis veikia padalijant problemą į mažesnes subproblemas arba šakas, o tada pašalinant tam tikras šakas pagal optimalaus sprendimo ribas. Šis procesas tęsiamas tol, kol randamas geriausias sprendimas arba išnagrinėtos visos šakos.
Standartinės šakos ir susieto algoritmo problemos:
Unikali problema | apibūdinimas |
---|---|
0/1 Kuprinė naudojant atšaką ir surišimą | Atšakos ir susieto požiūrio, skirto 0/1 Knapsack problemos sprendimui, įgyvendinimo detalės. |
0/1 Kuprinė naudojant mažiausių sąnaudų atšaką ir apribojimą | 0/1 kuprinės problemos sprendimas naudojant mažiausią šakos ir surišimo techniką. |
8 galvosūkis Problema naudojant „Branch and Bound“. | Filialo taikymas ir įpareigotas išspręsti 8 galvosūkių problemą, populiarus stumdomas dėlionė. |
N Queen Problema naudojant Branch and Bound | Naudodamiesi šaka ir ieškodami N Queens problemos, klasikinės šachmatų problemos, sprendimų. |
Susijusios temos:
- Šakų ir susietų algoritmų pamoka
Sužinokite apie sudėtingumą
Duomenų struktūrose ir algoritmuose (DSA) pagrindinis tikslas yra efektyviai ir efektyviai spręsti problemas. Norėdami nustatyti programos efektyvumą, atsižvelgiame į dviejų tipų sudėtingumą:
- Laiko sudėtingumas : Tai nurodo, kiek laiko užtrunka, kol mūsų kodas paleidžiamas.
- Erdvės sudėtingumas : Tai nurodo, kiek atminties naudoja mūsų kodas.
Asimptotinis žymėjimas :
Norėdami palyginti algoritmų efektyvumą, naudojame asimptotinį žymėjimą – matematinį įrankį, kuris įvertina laikas remiantis įvesties dydis nepaleidus kodo. Jame dėmesys sutelkiamas į pagrindinių programos operacijų skaičių.
Žymėjimas | apibūdinimas |
---|---|
Big-O (Ο) | Aprašomas blogiausias scenarijus ir pateikiama viršutinė algoritmo laiko riba. |
Omega (Ω) | Aprašomas geriausias scenarijus, siūlantis žemesnę algoritmo laiko ribą. |
teta (θ) | Nurodo vidutinį algoritmo sudėtingumą. |
Dažniausiai kodo analizei naudojamas žymėjimas yra Didelis O žymėjimas , nurodantis viršutinę veikimo laiko arba atminties naudojimo ribą, atsižvelgiant į įvesties dydį.
Susijusios temos:
- Laiko sudėtingumo supratimas paprastais pavyzdžiais
- Įvairių duomenų struktūrų laiko sudėtingumas
- Kaip analizuoti kilpas algoritmų sudėtingumo analizei
- Praktikos klausimai apie laiko sudėtingumo analizę
Praktikuokite problemų lapelius:
Kuruojami problemų sąrašai iš toliau pateiktų straipsnių:
- Sandeep Jain DSA veiksmų planas
- SDE LAPAS – Išsamus SDE paruošimo vadovas
- techcodeview.com pagrindinis lapas – visų „Cheat Sheets“ sąrašas