Datu struktūras un algoritmi (DSA) attiecas uz datu organizēšanas un uzglabāšanas metožu izpēti un problēmu risināšanas procedūru (algoritmu) izstrādi, kas darbojas uz šīm datu struktūrām. DSA ir viena no svarīgākajām prasmēm, kas jāapgūst katram datorzinātņu studentam. Bieži tiek novērots, ka cilvēki, kuriem ir labas zināšanas par šīm tehnoloģijām, ir labāki programmētāji nekā citi, un tādējādi viņi intervijas ar gandrīz katru tehnoloģiju gigantu. Šis DSA apmācība mērķis ir palīdzēt jums ātri un viegli apgūt datu struktūras un algoritmus (DSA).

Satura rādītājs
- DSA pilna veidlapa
- Kas ir DSA?
- Kā iemācīties DSA?
- Stīga
- Saistītie saraksti
- Matrica/Režģis
- Kaudze
- Rinda
- Kaudze
- Hash
- Koks
- Grafiks
- Meklēšanas algoritms
- Šķirošanas algoritms
- Dali un iekaro algoritms
- Mantkārīgi algoritmi
- Rekursija
- Atkāpšanās algoritms
- Dinamiskā programmēšana
- Grafiku algoritmi:
- Rakstu meklēšana
- Matemātiskie algoritmi
- Ģeometriskie algoritmi
- Bitu algoritmi
- Randomizēti algoritmi
- Atzarojuma un saistīšanas algoritms
DSA pilna veidlapa
Termins DSA apzīmē Datu struktūras un algoritmi , Datorzinātņu kontekstā.
Kas ir DSA?
Datu struktūras un algoritmi (DSA) attiecas uz datu organizēšanas un uzglabāšanas metožu izpēti un problēmu risināšanas procedūru (algoritmu) izstrādi, kas darbojas uz šīm datu struktūrām.
Kā iemācīties DSA?
Pirmā un galvenā lieta ir visas procedūras sadalīšana mazos gabalos, kas jāveic secīgi. Visu DSA apguves procesu no jauna var iedalīt 5 daļās:
- Apgūstiet vismaz vienu programmēšanas valodu (šo mēs atstājam jūsu izvēlei.)
- Uzziniet datu struktūras
- Apgūstiet algoritmus
- Uzziniet par laika un telpas sarežģītību
- Prakses problēmas DSA

Kā iemācīties DSA?
Cerot, ka esat apguvis programmēšanas valodu pēc savas izvēles, ļaujiet mums veikt nākamo soli, lai apgūtu DMR šajā DSA pamācībā.
Šeit ir datu struktūras un algoritma apguves ceļveža vissvarīgākais un gaidītākais posms — posms, kurā sākat mācīties par DMR. DSA tēma sastāv no divām daļām:
- Datu struktūras
- Algoritmi
Lai gan tās ir divas dažādas lietas, tās ir ļoti savstarpēji saistītas, un ir ļoti svarīgi ievērot pareizo ceļu, lai tās apgūtu visefektīvāk. Ja jums ir neskaidrības par to, kuru mācīties vispirms, iesakām izpētīt mūsu detalizēto analīzi par šo tēmu: Šeit mēs esam sekojuši datu struktūras apguves plūsmai un pēc tam vissaistītākajiem un svarīgākajiem algoritmiem, ko izmanto šī datu struktūra.
Uzziniet datu struktūras
Datu struktūras ir būtiski komponenti, kas palīdz efektīvi organizēt un uzglabāt datus datora atmiņā. Tie nodrošina veidu, kā efektīvi pārvaldīt un manipulēt ar datiem, nodrošinot ātrāku piekļuvi, ievietošanu un dzēšanu. Kopējās datu struktūras ietver masīvi, saistītie saraksti, skursteņi, rindas, koki un diagrammas , katrs kalpo konkrētiem mērķiem, pamatojoties uz konkrētās problēmas prasībām. Izpratne par datu struktūrām ir būtiska, lai izstrādātu efektīvus algoritmus un optimizētu programmatūras veiktspēju.
Masīvs ir lineāra datu struktūra, kas glabā viena un tā paša datu tipa elementu kolekciju. Elementiem tiek piešķirta blakus esošā atmiņa, kas nodrošina pastāvīgu piekļuvi. Katram elementam ir unikāls indeksa numurs.
- Operācijas ar masīvu:
- Šķērsošana : atkārtošana, izmantojot masīva elementus.
- Ievietošana : elementa pievienošana masīvam ar noteiktu indeksu.
- Dzēšana : elementa noņemšana no masīva noteiktā indeksā.
- Meklēšana : elementa atrašana masīvā pēc tā vērtības vai indeksa.
- Masīvu veidi :
- Viendimensijas masīvs : vienkāršs masīvs ar vienu dimensiju.
- Daudzdimensiju masīvs : masīvs ar vairākiem izmēriem, piemēram, matrica.
- Masīva lietojumprogrammas :
- Datu glabāšana secīgā veidā
- Rindu, steku un citu datu struktūru ieviešana
- Matricu un tabulu attēlošana
- Saistītās tēmas par masīvu:
- Masīvu apmācība
- 50 populārākās masīvu kodēšanas problēmas intervijām
- Prakses problēmas uz masīviem
2. Stīga
A virkne ir rakstzīmju secība, ko parasti izmanto teksta attēlošanai. To uzskata par datu tipu, kas ļauj manipulēt un apstrādāt teksta datus datorprogrammās.
- Darbības ar virkni :
- Savienošana : divu virkņu savienošana kopā.
- Salīdzinājums : Divu stīgu salīdzināšana leksikogrāfiski.
- Apakšvirkne ieguve : apakšvirknes izvilkšana no virknes.
- Meklēt : tiek meklēta apakšvirkne virknē.
- Modifikācija : rakstzīmju maiņa vai aizstāšana virknē.
- Stīgu pielietojumi :
- Teksta apstrāde
- Rakstu saskaņošana
- Datu validācija
- Datu bāzes pārvaldība
- Saistītās ziņas:
- Stīgu apmācība
- 50 populārākās virkņu kodēšanas problēmas intervijām
- Praktizējiet problēmas ar stīgu
3. Saistītie saraksti
A saistītais saraksts ir lineāra datu struktūra, kas glabā datus mezglos, kas ir savienoti ar rādītājiem. Atšķirībā no masīviem saistītie saraksti netiek glabāti blakus esošās atmiņas vietās.
- Saistītā saraksta īpašības:
- Dinamisks : saistīto sarakstu izmērus var viegli mainīt, pievienojot vai noņemot mezglus.
- Nepieguļošs : mezgli tiek saglabāti nejaušās atmiņas vietās un savienoti ar rādītājiem.
- Secīgā piekļuve : mezgliem var piekļūt tikai secīgi, sākot no saraksta sākuma.
- Darbības saistītajā sarakstā:
- Radīšana : jauna saistītā saraksta izveide vai jauna mezgla pievienošana esošam sarakstam.
- Šķērsošana : atkārtojiet sarakstu un piekļūstiet katram mezglam.
- Ievietošana : jauna mezgla pievienošana noteiktā saraksta vietā.
- Dzēšana : mezgla noņemšana no saraksta.
- Meklēt : Mezgla atrašana ar noteiktu vērtību sarakstā.
- Saistīto sarakstu veidi :
- Atsevišķi saistītais saraksts : katrs mezgls norāda uz nākamo mezglu sarakstā.
- Divkārši saistīts saraksts : katrs mezgls norāda gan uz nākamo, gan uz iepriekšējo saraksta mezglu.
- Apļveida saistīto saraksts : Pēdējais mezgls norāda atpakaļ uz pirmo mezglu, veidojot apļveida cilpu.
- Saistītā saraksta lietojumprogrammas :
- Saistītie saraksti tiek izmantoti dažādās lietojumprogrammās, tostarp:
- Rindu un steku ieviešana
- Grafiku un koku attēlošana
- Sakārtoto datu uzturēšana
- Atmiņas pārvaldība
- Saistītās tēmas:
- Saistītā saraksta apmācība
- 50 populārākās problēmas interviju saistītajā sarakstā
- Praktizējiet problēmas saistītajos sarakstos
4. Matrica/Režģis
A matrica ir divdimensiju elementu masīvs, kas sakārtots rindās un kolonnās. Tas tiek attēlots kā taisnstūrveida režģis ar katru elementu rindas un kolonnas krustpunktā.
- Galvenie jēdzieni:
- Rindas : horizontālas elementu līnijas matricā.
- Kolonnas : vertikālas elementu līnijas matricā.
- Izmēri : rindu un kolonnu skaits matricā (piemēram, 3 × 4 matricai ir 3 rindas un 4 kolonnas).
- Elements Piekļuve : elementiem var piekļūt, izmantojot rindu un kolonnu indeksus (piemēram, M[2][3] attiecas uz elementu 2. rindā, 3. kolonnā).
- Matrix/Grid pielietojumi :
- Attēlu apstrāde
- Datu analīze
- Optimizācijas problēmas
- Saistītās ziņas:
- Matricas/režģa apmācība
- 50 populārākās problēmas intervijām matricā/režģī
- Prakses problēmas matricā/režģī
5. Kaudze
Kaudze ir lineāra datu struktūra, kas atbilst noteiktai secībai, kādā tiek veiktas darbības. Pasūtījums var būt LIFO (pēdējais iekšā pirmais) vai FILO (First In Last Out) . LIFO nozīmē, ka elements, kas ievietots pēdējais, iznāk pirmais un RINDA nozīmē, ka elements, kas ievietots pirmais, iznāk pēdējais.
- Darbība uz Stack :
- Spiediet : pievieno elementu kaudzes augšpusē
- Pop : noņem un atgriež elementu kaudzes augšpusē
- Palūrēt : atgriež elementu kaudzes augšpusē, to nenoņemot
- Izmērs : atgriež elementu skaitu kaudzē
- Ir tukšs : pārbauda, vai kaudze ir tukša
- Stack lietojumprogrammas :
- Funkciju izsaukumi
- Izteiksmes novērtējums
- Atkāpšanās
- Atsaukt/atcelt darbības
- Saistītās tēmas par Stack:
- Stack apmācība
- 50 populārākās problēmas interviju komplektā
- Praktizējiet problēmas vietnē Stack
6. Rinda
A Rinda Datu struktūra ir pamatjēdziens datorzinātnēs, ko izmanto datu glabāšanai un pārvaldībai noteiktā secībā. Tas izriet no principa Pirmais iekšā, pirmais ārā ( FIFO ), kur pirmais rindai pievienotais elements ir pirmais, kas tiek noņemts
- Darbība rindā :
- Rindā : pievieno elementu rindas aizmugurē
- Attiecīgi : noņem elementu no rindas priekšpuses
- Palūrēt : izgūst priekšējo elementu, to nenoņemot
- Ir tukšs : pārbauda, vai rinda ir tukša
- Ir pilns : pārbauda, vai rinda ir pilna
- Rindas veids :
- Apļveida rinda : pēdējais elements savienojas ar pirmo elementu
- Divu galu rinda (atkāpšanās) : Darbības var veikt no abiem galiem
- Prioritātes rinda : elementi ir sakārtoti, pamatojoties uz prioritāti
- Rindas lietojumprogrammas :
- Darba plānošana
- Ziņojumu rinda
- Simulācijas modelēšana
- Datu buferizācija
- Saistītās tēmas:
- Rindas apmācība
- 50 populārākās problēmas interviju rindā
- Praktizējiet problēmas rindā
7. Kaudze
A Kaudze ir pilnīga binārā koka datu struktūra, kas apmierina kaudzes īpašību: katram mezglam tā atkritumu vērtība ir mazāka vai vienāda ar tā vērtību. Lai īstenotu, parasti izmanto kaudzes prioritārās rindas , kur mazākais (vai lielākais) elements vienmēr atrodas koka saknē.
- Kaudzes darbības :
- Ievietot : pievieno kaudzītei jaunu elementu, vienlaikus saglabājot kaudzes īpašības.
- Extract-Max/Extract-Min : noņem saknes elementu un pārstrukturē kaudzi.
- Palielināšanas/samazināšanas taustiņš : atjaunina mezgla vērtību un pārstrukturē kaudzi.
- Kaudzes veidi :
- Max-Heap : saknes mezglam ir maksimālā vērtība starp bērniem.
- Min-Heap : saknes mezglam ir minimālā vērtība starp bērniem.
- Heap pielietojumi :
- Prioritārās rindas
- Šķirošana
- Grafiku algoritmi (piemēram, Dijkstra algoritms)
- Saistītās ziņas:
- Kaudzes apmācība
- 50 populārākās interviju problēmas vietnē Heap
- Prakses problēmas uz Heap
8. Hash
Jaukšana ir paņēmiens, kas ģenerē fiksēta izmēra izvadi (jaucējvērtību) no mainīga lieluma ievades, izmantojot matemātiskas formulas, ko sauc hash funkcijas . Jaukšanu izmanto, lai noteiktu indeksu vai vietu vienuma glabāšanai datu struktūrā, kas ļauj efektīvi izgūt un ievietot.
- Galvenie jēdzieni:
- Jaucējfunkcija : matemātiska funkcija, kas kartē ievadi ar jaucējvērtību.
- Hash tabula : datu struktūra, kurā tiek glabāti atslēgu un vērtību pāri, kur atslēga ir jaucējvērtība, bet vērtība ir faktiskie dati.
- Sadursme : ja divas dažādas atslēgas rada vienādu jaucējvērtību.
- Jaucējfunkciju veidi :
- Sadalīšanas metode : dala ievadi ar konstanti un izmanto atlikumu kā jaucējvērtību.
- Vidus laukums Metode: kvadrātveida ievade un ņem vidējos ciparus kā jaucējvērtību.
- Salocīšanas metode : sadala ievadi vienāda lieluma blokos un saskaita tos kopā, lai iegūtu jaucējvērtību.
- Reizināšanas metode : reizina ievadi ar konstanti un kā jaukšanas vērtību izmanto daļēju daļu.
- Sadursmju risināšanas metodes :
- Atsevišķa ķēde (atvērta jaukšana) : saglabā sadursmes elementus saistītā sarakstā ar atbilstošo jaucējvērtību.
- Atvērta adresēšana (slēgta jaukšana) : izmanto dažādas stratēģijas, lai atrastu alternatīvu vietu sadursmes elementiem hash tabulā.
- Jaukšanas lietojumprogrammas :
- Efektīva datu glabāšana un izguve datu bāzēs un failu sistēmās.
- Paroļu un ciparparakstu pārbaude.
- Pieprasījumu izplatīšana vairākos serveros.
- Drošu jaucēju ģenerēšana datu integritātei un autentifikācijai.
- Saistītās ziņas:
- Hash apmācība
- Prakses problēmas saistībā ar jaukšanu
9. Koks
A koks ir nelineāra hierarhiska datu struktūra, kas sastāv no mezgliem, kas savienoti ar malām, ar augšējo mezglu, ko sauc par sakni, un mezgliem ar pakārtotiem mezgliem. To izmanto datorzinātnēs, lai efektīvi organizētu datus.
izvēlieties no vairākām SQL tabulām
- Koka šķērsošana : Koku šķērsošanas metodes tiek izmantotas, lai apmeklētu un apstrādātu mezglus koka datu struktūrā. Trīs izplatītākās pārvietošanās metodes ir:
- Kārtībā : Apmeklējiet kreiso apakškoku, pašreizējo mezglu, pēc tam labo apakškoku.
- Iepriekšpasūtījums : Apmeklējiet pašreizējo mezglu, kreiso apakškoku, pēc tam labo apakškoku.
- Pēc pasūtījuma : Apmeklējiet kreiso apakškoku, labo apakškoku un pēc tam pašreizējo mezglu.
- Koku klasifikācija:
- Klasifikācijas no Koki attiecas uz koku grupēšanu, pamatojoties uz noteiktiem raksturlielumiem vai kritērijiem. Tas var ietvert koku klasificēšanu kategorijās, pamatojoties uz to līdzsvara koeficientu, mezglu pakāpi, secības īpašībām utt. Tālāk ir sniegta dažas svarīgas Tree klasifikācijas.
| Klasifikācija | Apraksts | Tips | Apraksts |
|---|---|---|---|
| Pēc grāda | Kokus var klasificēt, pamatojoties uz maksimālo bērnu skaitu, kas var būt katram mezglam. | Binārais koks | Katram mezglam ir ne vairāk kā divi bērni. |
| Trīskāršais koks | Katram mezglam ir ne vairāk kā trīs bērni. | ||
| N-ary Tree | Katram mezglam ir ne vairāk kā N bērni. | ||
| Pasūtot | Koki var klasificēt, pamatojoties uz mezglu un apakškoku secību | Binārais meklēšanas koks (BST) | Kreisais bērns |
| Kaudze | Specializēts binārais koks ar kaudzes īpašumu. | ||
| Pēc bilances | Kokus var klasificēt atkarībā no tā, cik labi tie ir līdzsvaroti. | Apakškoku augstumi atšķiras ne vairāk kā par vienu. Piemēri ir AVL koki un sarkanmelnie koki. | |
| Nesabalansēts koks | Apakškoku augstums var ievērojami atšķirties, ietekmējot tādu darbību veiktspēju kā meklēšana un ievietošana. |
- Koku pielietojumi:
- Failu sistēmas
- Datu bāzes
- XML dokumenti
- Mākslīgais intelekts
- Saistītās ziņas:
- Koku apmācība
- 50 populārākās koku kodēšanas problēmas
- Praktizējiet problēmas uz koka
10. Grafiks
A Grafiks ir nelineāra datu struktūra, kas sastāv no ierobežotas virsotņu (vai mezglu) kopas un malu kopas, kas savieno mezglu pāri.
- Grafika šķērsošana:
- Pirmā meklēšana (BFS) : apmeklē mezglus pēc līmeņa.
- Dziļuma pirmā meklēšana (DFS) : Rekursīvi apmeklē mezglus, vienlaikus izpētot vienu filiāli.
- Grafiku pielietojumi :
- Sociālie tīkli
- Kartes un navigācija
- Plānošana
- Datu ieguve
- Saistītās ziņas:
- Grafika attēlojums
- Grafiku veidi
- Grafika apmācība
- Praktizējiet problēmas grafikā
Apgūstiet algoritmus
Kad esat notīrījis jēdzienus Datu struktūras , tagad ir pienācis laiks sākt savu ceļojumu cauri Algoritmi . Pamatojoties uz rakstura un lietojuma veidu, algoritmi ir sagrupēti vairākās kategorijās, kā parādīts tālāk.
1. Meklēšanas algoritms
Meklēšanas algoritmi tiek izmantoti, lai atrastu konkrētus datus lielākā datu kopā. Tas palīdz atrast mērķa vērtību datos. Ir dažādi meklēšanas algoritmu veidi, katram ir sava pieeja un efektivitāte.
- Visizplatītākie meklēšanas algoritmi:
- Lineārā meklēšana : iteratīva meklēšana no viena gala līdz otram.
- Binārā meklēšana : sadali un pārvaldi meklēšana sakārtotā masīvā, katrā iterācijā meklēšanas vietu samazinot uz pusi.
- Trīskāršā meklēšana : sadaliet un pārvaldiet meklēšanu sakārtotā masīvā, sadalot meklēšanas telpu trīs daļās katrā iterācijā.
- Citi meklēšanas algoritmi:
- Pārlēkt meklēšanu
- Interpolācijas meklēšana
- Eksponenciālā meklēšana
- Saistītās tēmas:
- Praktizējiet meklēšanas algoritma problēmas
2. Šķirošanas algoritms
Šķirošanas algoritmi tiek izmantoti, lai sakārtotu saraksta elementus noteiktā secībā, piemēram, ciparu vai alfabētiskā secībā. Tas sistemātiski organizē vienumus, atvieglojot konkrētu elementu meklēšanu un piekļuvi tiem.
Ir daudz dažādu šķirošanas algoritmu veidu. Daži plaši izmantoti algoritmi ir:
| Šķirošanas algoritms | Apraksts |
|---|---|
| Burbuļu kārtošana | Iteratīvi salīdzina blakus esošos elementus un apmaina tos, ja tie nav kārtībā. Lielākais elements ar katru piegājienu tiek burbuļots līdz saraksta beigām. |
| Atlase Kārtot | Atrod minimālo elementu saraksta nešķirotajā daļā un apmaina to ar pirmo elementu. Atkārto šo procesu, līdz viss saraksts ir sakārtots. |
| Ievietošanas kārtošana | Veido sakārtoto sarakstu pa vienam elementam, ievietojot katru nešķiroto elementu pareizajā pozīcijā kārtotajā daļā. |
| Ātrā kārtošana | Sadaliet un pārvaldiet algoritms, kas atlasa rakursta elementu, sadala sarakstu divos apakšsarakstos, pamatojoties uz rakursu, un rekursīvi piemēro to pašu procesu apakšsarakstiem. |
| Sapludināt Kārtot | Vēl viens sadalīšanas un iekarošanas algoritms, kas rekursīvi sadala sarakstu mazākos apakšsaraklos, sakārto tos un pēc tam atkal apvieno, lai iegūtu sakārtoto sarakstu. |
Saistītās tēmas:
- Kārtošanas algoritma apmācība
- Populārākie interviju jautājumi un problēmas
- Praktizējiet kārtošanas algoritma problēmas
3. Skaldi un valdi algoritms
Sadali un iekaro algoritmi izmanto rekursīvu stratēģiju, lai atrisinātu problēmas, sadalot tās mazākās apakšproblēmās, atrisinot šīs apakšproblēmas un apvienojot risinājumus, lai iegūtu galīgo risinājumu.
Darbības:
- Sadaliet : sadaliet problēmu mazākās, neatkarīgās apakšproblēmās.
- Iekarot : Rekursīvi atrisiniet katru apakšproblēmu.
- Apvienot : Apvienojiet apakšuzdevumu risinājumus, lai iegūtu galīgo risinājumu.
Piemēri:
- Sapludināt kārtot: sadala masīvu divās daļās, sakārto katru pusi rekursīvi un sapludina sakārtotās puses.
- Ātrā kārtošana: atlasa pagrieziena elementu, sadala masīvu divās apakšmasīvās, pamatojoties uz šarnīra punktu, un rekursīvi kārto katru apakšmasu.
- Binārā meklēšana: atkārtoti sadala meklēšanas laukumu uz pusēm, līdz tiek atrasts mērķa elements vai meklēšanas vieta ir izsmelta.
Saistītie raksti:
- Skaldi un valdi apmācība
- Praktizējiet problēmas sadaliet un valdiet algoritmā
4. Mantkārīgie algoritmi
Kā norāda nosaukums, šis algoritms veido risinājumu pa vienam un izvēlas nākamo daļu, kas dod visredzamāko un tūlītējāko labumu, t.i., kas ir optimālākā izvēle tajā brīdī. Tātad problēmas, kurās lokāli optimālā izvēle rada arī globālus risinājumus, vislabāk atbilst Greedy.
Dažas svarīgas mantkārīgo algoritmu problēmas ir:
| Algoritms | Apraksts |
|---|---|
| Daļēja mugursoma | Atrodiet to priekšmetu maksimālo kopējo vērtību, ko var ievietot mugursomā, ļaujot priekšmetus iekļaut daļēji. |
| Dijkstras algoritms | Atrod īsāko ceļu no avota virsotnes uz visām pārējām virsotnēm svērtā grafikā. |
| Kruskala algoritms | Atrod svērtā grafika minimālo aptverošo koku. |
| Hafmena kodēšana | Izveido optimālu prefiksa kodu simbolu kopai, samazinot kopējo kodēšanas garumu. |
Saistītie raksti:
- Mantkārīgā algoritma apmācība
- Praktizējiet problēmas, izmantojot Greedy algoritmu
5. Rekursija
Rekursija ir programmēšanas tehnika, kurā funkcija sevi izsauc savas definīcijas ietvaros. To parasti izmanto, lai atrisinātu problēmas, kuras var sadalīt mazākos vienas un tās pašas problēmas gadījumos. Piemēram: Hanojas torņi (TOH) , Faktoriskais aprēķins un Fibonači secība utt.
Soļi :
- Pamatlieta : definējiet nosacījumu, kas aptur rekursīvos zvanus un nodrošina risinājumu.
- Rekursīvs gadījums : definējiet darbības, lai sadalītu problēmu mazākos gadījumos un veiktu rekursīvus zvanus.
- Atgriezties : atgrieziet risinājumu no rekursīvajiem zvaniem un apvienojiet tos, lai atrisinātu sākotnējo problēmu.
Fakts, kas padara Recursion par vienu no visbiežāk izmantotajiem algoritmiem, ir tas, ka tas veido pamatu daudziem citiem algoritmiem, piemēram, Koku šķērsošana , Grafiku šķērsošanas , Dali un uzvar algoritmi un Atkāpšanās algoritmi .
Saistītās tēmas:
- Rekursijas apmācība
- Rekursīvās funkcijas
- Astes rekursija
- 50 populārākās problēmas saistībā ar intervijas rekursijas algoritmu
- Praktizējiet problēmas ar rekursijas algoritmu
6. Atkāpšanās algoritms
Kā minēts iepriekš, Atkāpšanās Algoritms ir atvasināts no Recursion algoritma, ar iespēju atgriezties, ja rekursīvs risinājums neizdodas, t.i., ja risinājums neizdodas, programma izseko līdz brīdim, kad tas neizdevās, un izmanto citu risinājumu. Tātad būtībā tas izmēģina visus iespējamos risinājumus un atrod pareizo.
Dažas svarīgas un visizplatītākās atkāpšanās algoritmu problēmas, kas jums jāatrisina, pirms turpināt, ir:
| Problēma | Apraksts |
|---|---|
| Bruņinieka tūres problēma | Atrodiet bruņinieka gājienu secību uz šaha dēļa, lai tas apmeklētu katru laukumu tieši vienu reizi. |
| Žurka labirintā | Ceļa atrašana no sākuma pozīcijas līdz izejai labirintā ar šķēršļiem, kas attēloti kā sienas. |
| N-Queen problēma | N dāmu novietošana uz N × N šaha galda tā, lai divas dāmas neuzbruktu viena otrai. |
| Apakškopas summas problēma | Nosakot, vai eksistē dotās kopas apakškopa ar noteiktu summu. |
| Sudoku | 9 × 9 režģa mīklas atrisināšana ar cipariem no 1 līdz 9 tā, lai katrā rindā, kolonnā un 3 × 3 apakšrežģī būtu visi cipari bez atkārtošanās. |
Saistīts raksts:
- Atkāpšanās apmācība
- Praktizējiet problēmas, izmantojot atkāpšanās algoritmu
7. Dinamiskā programmēšana
Dinamiskā programmēšana ir metode, ko izmanto matemātikā un datorzinātnēs, lai atrisinātu sarežģītas problēmas, sadalot tās vienkāršākos apakšproblēmās. Atrisinot katru apakšproblēmu tikai vienu reizi un saglabājot rezultātus, tas ļauj izvairīties no liekiem aprēķiniem, tādējādi radot efektīvākus risinājumus plašam problēmu lokam.
Galvenie jēdzieni:
- Optimāla apakšstruktūra : Problēmas optimālo risinājumu var konstruēt no optimālajiem risinājumiem līdz tās apakšproblēmām.
- Apakšproblēmas, kas pārklājas : Apakšproblēmas bieži atkārtojas lielākā problēmā, kā rezultātā tiek veikti lieki aprēķini.
- Memoizācija / Tabulēšana : apakšproblēmu risinājumu glabāšana, lai izvairītos no pārrēķināšanas.
Dažas svarīgas un visizplatītākās dinamiskās programmēšanas algoritmu problēmas, kas jums jāatrisina, pirms turpināt, ir:
| Problēma | Apraksts |
|---|---|
| Fibonači secība | Fibonači skaitļu ģenerēšana, izmantojot dinamisko programmēšanu, lai izvairītos no liekiem aprēķiniem. |
| Garākā kopējā secība | Divām sekvencēm kopīgās garākās apakšsecības atrašana. |
| Visilgākā pieaugošā secība | Dotās secības garākās apakšsecības atrašana, kurā elementi ir sakārtoti augošā secībā. |
| 0/1 mugursomas problēma | Maksimālās vērtības noteikšana, ko var iegūt, izvēloties preces ar norādīto svaru un vērtībām, vienlaikus nepārsniedzot noteikto svara ierobežojumu. |
| Stieņa griešanas problēma | Peļņas maksimizēšana, sagriežot noteikta garuma stieni gabalos un pārdodot tos par norādītajām cenām. |
| Monētu maiņas problēma | Noteikt veidus, kā veikt izmaiņas par noteiktu summu, izmantojot noteiktu monētu nominālvērtību kopu. |
| Rediģēt attālumu | Atrodiet minimālo darbību skaitu (ievietošana, dzēšana, aizstāšana), kas nepieciešams vienas virknes pārvēršanai citā. |
| Apakškopas summas problēma | Nosakot, vai pastāv noteiktas kopas apakškopa ar noteiktu summu. |
| Garākā palindromiskā secība | Dotās secības garākās apakšsecības atrašana, kas ir palindroms. |
| Maksimālā Subarray summa | Blakus esošā apakšmasīva atrašana ar lielāko summu noteiktā viendimensijas masīvā. |
| Sadalījuma vienāda apakškopas summa | Nosakot, vai ir iespējams sadalīt doto kopu divās apakškopās ar vienādu summu. |
| Minimālo izmaksu ceļš | Minimālo izmaksu ceļa atrašana no noteiktā režģa augšējā kreisā stūra līdz apakšējam labajam stūrim. |
| Maksimālā produkta apakšgrupa | Blakus esošā apakšmasīva atrašana ar lielāko reizinājumu noteiktā viendimensijas masīvā. |
Saistītie raksti:
- Tabulēšana pret memoizāciju
- Kā atrisināt dinamiskās programmēšanas problēmu?
- Dinamiskās programmēšanas apmācība
- 50 populārākās dinamiskās programmēšanas kodēšanas problēmas intervijām
- Praktizējiet problēmas dinamiskās programmēšanas algoritmā
8. Grafiku algoritmi :
Grafu algoritmi datu struktūrās un algoritmos (DSA) ir paņēmienu un metožu kopums, ko izmanto, lai atrisinātu problēmas, kas saistītas ar grafiem, kas ir mezglu un malu kolekcija. Šie algoritmi ir paredzēti dažādu operāciju veikšanai ar grafikiem, piemēram meklēt, šķērsot, atrast īsāko ceļu , un nosakot savienojamība . Tie ir būtiski, lai atrisinātu dažādas reālas problēmas, tostarp tīkla maršrutēšanu, sociālo tīklu analīzi un resursu piešķiršanu.
| Temats | Tēmas apraksts | Algoritms | Algoritma apraksts |
|---|---|---|---|
| Grafika šķērsošana | Paņēmieni visu grafa virsotņu apmeklēšanai. | Dziļuma pirmā meklēšana (DFS) | Izpētiet, cik vien iespējams, pa katru atzaru pirms atkāpšanās. |
| Pirmā meklēšana (BFS) | Izpēta kaimiņu virsotnes, pirms pāriet uz nākamo virsotņu līmeni. | ||
| Minimālie koki | Minimālie koki ir mazākie koki, kas savieno visus grafa mezglus, neveidojot ciklus, ko panāk, pievienojot īsākās iespējamās malas. | Tas atrod savienotā svērtā grafika minimālo aptverošo koku. Tas pievieno mazāko svara malu, kas neveido ciklu. | |
rdbms normalizācija | Tas arī atrod minimālo aptverošo koku savienotam svērtajam grafikam. Tas pievieno mazāko svara malu, kas savieno divus kokus. | ||
| Topoloģiskā šķirošana | Topoloģiskā kārtošana ir lineāra virsotņu sakārtošana virzītā acikliskā grafā (DAG) tā, ka katrai virzītai malai no virsotnes u līdz virsotnei v u secībā ir pirms v. | Kāna algoritms | Kāna algoritms atrod virzīta acikliskā grafika (DAG) topoloģisko secību. |
| Uz DFS balstīts algoritms | Uz DFS balstīts algoritms izmanto dziļuma meklēšanu, lai veiktu topoloģisko kārtošanu virzītā acikliskā grafikā (DAG). | ||
| Īsākais ceļš | Īsākais ceļš grafā ir ceļš starp divām grafa virsotnēm, kurām ir minimālā svaru summa gar malām, salīdzinot ar visiem pārējiem ceļiem starp tām pašām divām virsotnēm. | Mantkārīgs algoritms, lai atrastu īsāko ceļu starp visiem mezgliem O(E * V logV) laikā. | |
| Atrod īsāko ceļu starp visiem mezglu pāriem O(V^3) laikā. | |||
| Atrod īsāko ceļu no viena avota O(V * E) laikā. | |||
| Džonsona algoritms | Atrod īsākos ceļus starp visiem virsotņu pāriem O(V^2 logV + V * E) laikā. | ||
| Cieši saistīti komponenti | Virzīta grafa stingri savienots komponents (SCC) ir maksimāla virsotņu kopa, kurā ir ceļš no katras kopas virsotnes uz katru otro kopas virsotni. | Kosaraju algoritms ir divu pakāpju algoritms, kas efektīvi atrod virzīta grafika cieši saistītus komponentus (SCC). | |
| Tarjana algoritms | Tarjana algoritms ir vēl viens efektīvs algoritms SCC atrašanai virzītā grafikā |
Saistītās tēmas:
- Grafika apmācība
- 50 populārākās grafiku kodēšanas problēmas intervijām
- Grafu algoritmu prakses problēma
9 . Rakstu meklēšana
Rakstu meklēšana ir DSA pamatpaņēmiens, ko izmanto, lai atrastu konkrēta raksta gadījumus noteiktā tekstā.
Tālāk ir sniegti daži standarta modeļu meklēšanas algoritmi.
| Algoritms | Apraksts | Laika sarežģītība |
|---|---|---|
| Brutālu spēku | Tas salīdzina modeli ar katru teksta apakšvirkni | O(mn) |
| Knuts-Mors-Prets | Tas izmanto iepriekš aprēķinātu atteices funkciju, lai izlaistu nevajadzīgus salīdzinājumus | O(m + n) |
| Bojers-Mūrs | Tas salīdzina modeli no labās uz kreiso pusi, izlaižot rakstzīmes, pamatojoties uz pēdējo neatbilstību | O(mn) |
| Rabins-Karps | Tas izmanto jaukšanu, lai ātri pārbaudītu iespējamās atbilstības | O(m + n) |
Saistītās tēmas:
- Rakstu meklēšanas apmācība
- Prakses problēma ieslēgta Rakstu meklēšana
10 . Matemātiskie algoritmi
Matemātiskie algoritmi ir algoritmu klase, kas atrisina ar matemātiskiem jēdzieniem saistītas problēmas. Tos plaši izmanto dažādās jomās, tostarp datorgrafikā, skaitliskā analīzē, optimizācijā un kriptogrāfijā.
| Algoritms | Apraksts |
|---|---|
| GCD un LCM | Atrodiet divu skaitļu lielāko kopīgo dalītāju un mazāko kopējo daudzkārtni. |
| Galvenā faktorizācija | Sadaliet skaitli tā primārajos faktoros. |
| Fibonači skaitļi | Izveidojiet Fibonači secību, kur katrs skaitlis ir divu iepriekšējo skaitļu summa. |
| Katalonijas numuri | Saskaitiet derīgo izteiksmju skaitu ar noteiktu iekavu pāru skaitu. |
| Moduļu aritmētika | Veiciet aritmētiskās darbības ar skaitļiem, kas modulē noteiktu vērtību. |
| Eilera Totienta funkcija | Saskaitiet to pozitīvo veselo skaitļu skaitu, kas ir mazāki par doto skaitli, kas ir relatīvi pirmskaitļi. |
| nCr aprēķini | Aprēķiniet binomiālo koeficientu, kas atspoguļo veidu skaitu, kā izvēlēties r elementus no n elementu kopas. |
| Pirmskaitļi un pirmskaitļi | Nosakiet, vai dots skaitlis ir pirmskaitļi, un efektīvi atrodiet pirmskaitļus. |
| Sietu algoritmi | Atrodiet visus pirmskaitļus līdz noteiktai robežai. |
Saistītās tēmas:
- Matemātiskā algoritma prakses uzdevums
11. Ģeometriskie algoritmi
Ģeometriskie algoritmi ir algoritmu klase, kas atrisina ar ģeometriju saistītas problēmas. Ģeometriskie algoritmi ir būtiski, lai atrisinātu dažādas datorzinātnes problēmas, piemēram:
| Algoritms | Apraksts |
|---|---|
| Izliekts korpuss | Atrod mazāko izliekto daudzstūri, kas satur punktu kopu. |
| Tuvākais punktu pāris | Atrod divus punktus kopā, kas atrodas vistuvāk viens otram. |
| Līnijas krustojums | Nosaka, vai divas taisnes krustojas, un, ja tā, atrod krustošanās punktu. |
| Punkts daudzstūrī | Nosaka, vai dotais punkts atrodas daudzstūra iekšpusē vai ārpus tā. |
Saistītās tēmas:
- Ģeometrisko algoritmu prakses uzdevums
12. Bitu algoritmi
Bitu algoritmi ir algoritmi, kas darbojas ar atsevišķiem skaitļu bitiem. Šie algoritmi manipulē ar skaitļu bināro attēlojumu, lai veiktu tādus uzdevumus kā bitu manipulācijas, bitu loģiskās darbības (UN, VAI, XOR), pārslēdzošie biti , un iestatījumu vai noteiktu bitu notīrīšana numura ietvaros. Parasti tiek izmantoti bitu algoritmi zema līmeņa programmēšanas, kriptogrāfijas un optimizācijas uzdevumi kur nepieciešama efektīva manipulācija ar atsevišķiem bitiem.
| Temats | Apraksts |
|---|---|
| Bitu maiņa | Pārbīda bitus pa kreisi vai pa labi par noteiktu pozīciju skaitu. |
| Pārbīde pa kreisi (<<) | Pārbīda bitus pa kreisi, efektīvi reizinot skaitli ar 2. |
| Labā maiņa (>>) | Pārbīda bitus pa labi, faktiski dalot skaitli ar 2. |
| Izvilkt bitus | Masku izmantošana konkrētu bitu iegūšanai no vesela skaitļa. |
| Iestatīšanas biti | Masku izmantošana, lai noteiktus bitus iestatītu uz 1 veselā skaitlī. |
| Tīrīšanas biti | Masku izmantošana, lai noteiktus bitus iestatītu uz 0 veselā skaitļā. |
| Pārslēgšanas biti | Izmantojot XOR (^), lai pārslēgtu noteiktus bitus veselā skaitļā. |
| Skaitīšana Komplekta biti | Iestatīto bitu skaita (1s) skaitīšana veselā skaitlī. |
Saistītās tēmas:
- Bitu algoritmu apmācība
- Praktiskās problēmas ar bitu algoritmiem
13. Randomizēti algoritmi
Randomizēti algoritmi ir algoritmi, kas problēmu risināšanai izmanto nejaušību. Viņi izmanto nejaušu ievadi, lai sasniegtu savus mērķus, bieži vien radot vienkāršākus vai efektīvākus risinājumus.
Randomizēto algoritmu veidi:
- Lasvegasa : vienmēr rada pareizu rezultātu, bet darbības laiks ir nejaušs.
- Montekarlo : var radīt nepareizu rezultātu ar nelielu varbūtību, taču darbības laiks parasti ir ātrāks.
Svarīgi algoritmi, kuros tiek izmantoti nejaušināšanas algoritmi:
| Algoritms | Apraksts |
|---|---|
| QuickSort | Randomizēts šķirošanas algoritms ar vidējo gadījuma laika sarežģītību O(n log n). |
| Izlaist sarakstu | Randomizēta datu struktūra, kas nodrošina ātras meklēšanas un ievietošanas darbības. |
| Bloom filtrs | Varbūtības datu struktūra efektīvai kopas dalības pārbaudei. |
14. Atzarojuma un saistīšanas algoritms
The Atzarojuma un saistīšanas algoritms ir metode, ko izmanto kombinatoriskās optimizācijas uzdevumos, lai sistemātiski meklētu labāko risinājumu. Tas darbojas, sadalot problēmu mazākās apakšproblēmās vai atzaros un pēc tam likvidējot noteiktas atzaras, pamatojoties uz optimālā risinājuma robežām. Šis process turpinās, līdz tiek atrasts labākais risinājums vai ir izpētītas visas filiāles.
Standarta problēmas zaru un saistīšanas algoritmā:
| Unikāla problēma | Apraksts |
|---|---|
| 0/1 Mugursoma, izmantojot atzarojumu un saiti | Nozares ieviešanas detaļas un saistītā pieeja 0/1 mugursoma problēmas risināšanai. |
| 0/1 Mugursoma, izmantojot zemāko izmaksu atzaru un ierobežojumu | 0/1 mugursomas problēmas atrisināšana, izmantojot viszemāko izmaksu atzaru un saistīšanas paņēmienu. |
| 8 mīkla Problēma, izmantojot atzarojumu un saiti | Pielietojums filiāle un pienākums atrisināt 8 puzzle problēma, populārs bīdāmās puzzle spēle. |
| N Queen Problēma, izmantojot atzarojumu un saiti | Izmantojot atzaru un pienākums atrast risinājumus N Queens problēmai, kas ir klasiska šaha problēma. |
Saistītās tēmas:
- Atzaru un saistošo algoritmu apmācība
Uzziniet par sarežģījumiem
Datu struktūrās un algoritmos (DSA) galvenais mērķis ir efektīvi un produktīvi atrisināt problēmas. Lai noteiktu programmas efektivitāti, mēs aplūkojam divu veidu sarežģītības:
- Laika sarežģītība : tas mums norāda, cik daudz laika nepieciešams mūsu koda palaišanai.
- Kosmosa sarežģītība : Tas norāda, cik daudz atmiņas patērē mūsu kods.
Asimptotiskais apzīmējums :
Lai salīdzinātu algoritmu efektivitāti, mēs izmantojam asimptotisko apzīmējumu, matemātisko rīku, kas novērtē laiks balstoties uz ievades lielums nepalaižot kodu. Tas koncentrējas uz programmas pamatoperāciju skaitu.
pievienoties mysql atjauninājumam
| Apzīmējums | Apraksts |
|---|---|
| Big-O (Ο) | Apraksta sliktākā gadījuma scenāriju, nodrošinot algoritma augšējo laika robežu. |
| Omega (Ω) | Apraksta labāko scenāriju, piedāvājot zemāku algoritma laika ierobežojumu. |
| Teta (θ) | Atspoguļo algoritma algoritma vidējo sarežģītību. |
Koda analīzei visbiežāk izmantotais apzīmējums ir Lielais O apzīmējums , kas nodrošina darbības laika vai atmiņas lietojuma augšējo ierobežojumu attiecībā uz ievades lielumu.
Saistītās tēmas:
- Laika sarežģītības izpratne ar vienkāršiem piemēriem
- Dažādu datu struktūru laika sarežģītība
- Kā analizēt cilpas algoritmu sarežģītības analīzei
- Prakses jautājumi par laika sarežģītības analīzi
Praktizējiet problēmu apkrāpšanas lapas:
Problēmu saraksti no tālāk norādītajiem rakstiem:
- DSA ceļvedis, Sandeep Jain
- SDE LAPA — pilnīga SDE sagatavošanas rokasgrāmata
- techcodeview.com galvenā lapa — visu apkrāptu lapu saraksts