Structuri și algoritmi de date (DSA) se referă la studiul metodelor de organizare și stocare a datelor și proiectarea procedurilor (algoritmilor) de rezolvare a problemelor, care operează pe aceste structuri de date. DSA este una dintre cele mai importante abilități pe care trebuie să le aibă fiecare student la informatică. Se vede adesea că oamenii cu cunoștințe bune despre aceste tehnologii sunt programatori mai buni decât alții și, astfel, sparg interviurile aproape tuturor gigantului tehnologic. Acest Tutorial DSA își propune să vă ajute să învățați Structuri și Algoritmi de Date (DSA) rapid și ușor.

Cuprins
- Formularul complet DSA
- Ce este DSA?
- Cum să înveți DSA?
- Şir
- Liste legate
- Matrice/Grilă
- Grămadă
- Coadă
- Morman
- Hash
- Copac
- Grafic
- Algoritm de căutare
- Algoritm de sortare
- Algoritmul Divide and Conquer
- Algoritmi lacomi
- Recursiune
- Algoritmul de backtracking
- Programare dinamică
- Algoritmi grafici:
- Căutare de modele
- Algoritmi matematici
- Algoritmi geometrici
- Algoritmi pe biți
- Algoritmi randomizati
- Algoritmul de ramificare și legat
Formularul complet DSA
Termenul DSA înseamnă Structuri de date și algoritmi , în contextul Informaticii.
Ce este DSA?
Structuri și algoritmi de date (DSA) se referă la studiul metodelor de organizare și stocare a datelor și proiectarea procedurilor (algoritmilor) de rezolvare a problemelor, care operează pe aceste structuri de date.
Cum să înveți DSA?
Primul și cel mai important lucru este împărțirea procedurii totale în bucăți mici care trebuie făcute secvenţial. Procesul complet de a învăța DSA de la zero poate fi împărțit în 5 părți:
- Învățați cel puțin un limbaj de programare (Lăsăm acest lucru la alegerea dvs.)
- Aflați structurile de date
- Învață algoritmi
- Aflați despre complexitățile timpului și spațiului
- Probleme de practică pe DSA

Cum să înveți DSA?
În speranța că ați învățat un limbaj de programare la alegere, permiteți-ne să mergem mai departe cu următorul pas pentru a învăța DSA în acest tutorial DSA.
Aici vine cea mai importantă și cea mai așteptată etapă a foii de parcurs pentru învățarea structurii datelor și a algoritmului – etapa în care începi să înveți despre DSA. Subiectul DSA este format din două părți:
- Structuri de date
- Algoritmi
Deși sunt două lucruri diferite, ele sunt foarte interdependente și este foarte important să urmați calea corectă pentru a le învăța cel mai eficient. Dacă sunteți confuz cu privire la care să învățați mai întâi, vă recomandăm să parcurgeți analiza noastră detaliată pe această temă: Aici am urmărit fluxul de învățare a unei structuri de date și apoi cei mai legați și importanți algoritmi utilizați de acea structură de date.
Aflați structurile de date
Structuri de date sunt componente esențiale care ajută la organizarea și stocarea eficientă a datelor în memoria computerului. Ele oferă o modalitate de a gestiona și manipula datele în mod eficient, permițând operațiuni de acces, inserare și ștergere mai rapide. Structurile comune de date includ matrice, liste legate, stive, cozi, arbori și grafice , fiecare servind unor scopuri specifice în funcție de cerințele problemei în cauză. Înțelegerea structurilor de date este fundamentală pentru proiectarea algoritmilor eficienți și optimizarea performanței software-ului.
Matrice este o structură de date liniară care stochează o colecție de elemente de același tip de date. Elementelor li se alocă o memorie contiguă, permițând accesul în timp constant. Fiecare element are un număr de index unic.
- Operații pe matrice:
- Traversare : Iterarea prin elementele unui tablou.
- Inserare : Adăugarea unui element la matrice la un index specific.
- Ștergere : Eliminarea unui element din matrice la un index specific.
- In cautarea : Găsirea unui element în matrice după valoarea sau indexul său.
- Tipuri de matrice :
- Matrice unidimensională : O matrice simplă cu o singură dimensiune.
- Matrice multidimensională : o matrice cu dimensiuni multiple, cum ar fi o matrice.
- Aplicații Array :
- Stocarea datelor într-o manieră secvențială
- Implementarea cozilor, stivelor și a altor structuri de date
- Reprezentarea matricelor și tabelelor
- Subiecte înrudite despre Array:
- Tutorial Arrays
- Top 50 de probleme de codare a matricei pentru interviuri
- Exersați problemele pe Arrays
2. Snur
A şir este o secvență de caractere, folosită de obicei pentru a reprezenta text. Este considerat un tip de date care permite manipularea și prelucrarea datelor textuale în programe de calculator.
- Operații pe String :
- Concatenare : Unirea a două șiruri împreună.
- Comparaţie : Compararea lexicografic a două șiruri.
- Subșir extracţie : Extragerea unui subșir dintr-un șir.
- Căutare : Căutarea unui subșir într-un șir.
- Modificare : schimbarea sau înlocuirea caracterelor dintr-un șir.
- Aplicații ale lui String :
- Procesarea textului
- Potrivire de model
- Data validarii
- Managementul bazei de date
- Postări asemănatoare:
- Tutorial șiruri
- Top 50 de probleme de codare a șirurilor pentru interviuri
- Exersați probleme pe șir
3. Liste legate
A lista legată este o structură de date liniară care stochează date în noduri, care sunt conectate prin pointeri. Spre deosebire de matrice, listele legate nu sunt stocate în locații de memorie adiacente.
- Caracteristicile listei legate:
- Dinamic : Listele legate pot fi redimensionate cu ușurință prin adăugarea sau eliminarea nodurilor.
- Necontiguu : Nodurile sunt stocate în locații aleatorii de memorie și conectate prin pointeri.
- Acces secvenţial : Nodurile pot fi accesate numai secvenţial, pornind de la capul listei.
- Operațiuni pe lista conectată:
- Creare : Crearea unei noi liste legate sau adăugarea unui nou nod la o listă existentă.
- Traversare : Iterarea listei și accesarea fiecărui nod.
- Inserare : Adăugarea unui nou nod la o anumită poziție din listă.
- Ștergere : Eliminarea unui nod din listă.
- Căutare : Găsirea unui nod cu o anumită valoare în listă.
- Tipuri de liste legate :
- Lista legată individual : Fiecare nod indică următorul nod din listă.
- Listă dublu legată : Fiecare nod indică atât nodul următor, cât și cel anterior din listă.
- Listă circulară legată : Ultimul nod indică înapoi către primul nod, formând o buclă circulară.
- Aplicații ale listei conectate :
- Listele legate sunt utilizate în diverse aplicații, inclusiv:
- Implementarea cozilor și stivelor
- Reprezentarea graficelor și arborilor
- Mentinerea datelor ordonate
- Gestionarea memoriei
- Subiecte asemănătoare:
- Tutorial Lista legată
- Top 50 de probleme pe lista conectată pentru interviuri
- Exersați problemele pe listele conectate
4. Matrice/Grilă
A matrice este o matrice bidimensională de elemente, dispuse în rânduri și coloane. Este reprezentat ca o grilă dreptunghiulară, cu fiecare element la intersecția unui rând și a unei coloane.
- Concepte cheie:
- Rânduri : linii orizontale ale elementelor dintr-o matrice.
- Coloane : linii verticale ale elementelor dintr-o matrice.
- Dimensiuni : numărul de rânduri și coloane dintr-o matrice (de exemplu, o matrice 3×4 are 3 rânduri și 4 coloane).
- Element Acces : Elementele pot fi accesate folosind indici de rând și coloană (de exemplu, M[2][3] se referă la elementul din rândul 2, coloana 3).
- Aplicații Matrix/Grid :
- Procesarea imaginii
- Analiza datelor
- Probleme de optimizare
- Postări asemănatoare:
- Tutorial Matrix/Grid
- Top 50 de probleme pe matrice/grilă pentru interviuri
- Exersați probleme pe matrice/grilă
5. Grămadă
Grămadă este o structură de date liniară care urmează o anumită ordine în care sunt efectuate operațiunile. Ordinul poate fi LIFO (Ultimul intrat, primul ieşit) sau FILO (primul intrat, ultimul ieşit) . LIFO implică faptul că elementul care este introdus ultimul, iese primul și RÂND implică faptul că elementul care este introdus primul, iese ultimul.
- Operație pe stivă :
- Apăsaţi : Adaugă un element în partea de sus a stivei
- Pop : Îndepărtează și returnează elementul din partea de sus a stivei
- Arunca o privire : Returnează elementul din partea de sus a stivei fără a-l elimina
- mărimea : Returnează numărul de elemente din stivă
- Este gol : Verifică dacă stiva este goală
- Aplicații ale Stivei :
- Apeluri de funcții
- Evaluarea expresiei
- Întoarcerea înapoi
- Anulați/refaceți operațiuni
- Subiecte înrudite pe stivă:
- Tutorial Stiva
- Top 50 de probleme pe stiva pentru interviuri
- Exersați problemele pe Stack
6. Coadă
A Coadă Structura datelor este un concept fundamental în informatică utilizat pentru stocarea și gestionarea datelor într-o anumită ordine. Urmează principiul Primul intrat, primul ieşit ( FIFO ), unde primul element adăugat în coadă este primul care trebuie eliminat
- Operațiune în coadă :
- Pune în coadă : Adaugă un element în spatele cozii
- În consecinţă : elimină un element din partea din față a cozii
- Arunca o privire : Preia elementul frontal fără a-l scoate
- Este gol : Verifică dacă coada este goală
- E plin : Verifică dacă coada este plină
- Tipul de coadă :
- Coada circulară : Ultimul element se conectează la primul element
- Coadă dublă (Deque) : Operațiile pot fi efectuate de la ambele capete
- Coada prioritară : Elementele sunt aranjate în funcție de prioritate
- Aplicații de coadă :
- Programarea locurilor de muncă
- Mesaje în coadă
- Modelare prin simulare
- Buffering de date
- Subiecte asemănătoare:
- Tutorial de coadă
- Top 50 de probleme la coadă pentru interviuri
- Exersați problemele în coadă
7. Morman
A Morman este o structură de date binară completă care satisface proprietatea heap: pentru fiecare nod, valoarea copiilor săi este mai mică sau egală cu propria sa valoare. Mulțile sunt de obicei folosite pentru implementare cozile prioritare , unde cel mai mic (sau cel mai mare) element este întotdeauna la rădăcina arborelui.
- Operațiuni de Heap :
- Introduce : adaugă un nou element la heap, menținând în același timp proprietățile heap.
- Extract-Max/Extract-Min : Îndepărtează elementul rădăcină și restructurează grămada.
- Tasta Creștere/Scădere : Actualizează valoarea unui nod și restructurează heap-ul.
- Tipuri de grămadă :
- Max-Heap : Nodul rădăcină are valoarea maximă printre copiii săi.
- Min-Heap : Nodul rădăcină are valoarea minimă printre copiii săi.
- Aplicații ale Heap :
- Cozile prioritare
- Triere
- Algoritmi grafici (de exemplu, algoritmul lui Dijkstra)
- Postări asemănatoare:
- Heap Tutorial
- Top 50 de probleme pe Heap pentru interviuri
- Practicați problemele pe Heap
8. Hash
Hashing este o tehnică care generează o ieșire de dimensiune fixă (valoare hash) dintr-o intrare de dimensiune variabilă folosind formule matematice numite funcții hash . Hashingul este folosit pentru a determina un index sau o locație pentru stocarea unui articol într-o structură de date, permițând regăsirea și inserarea eficientă.
- Concepte cheie:
- Funcția Hash : O funcție matematică care mapează o intrare la o valoare hash.
- Tabel Hash : O structură de date care stochează perechi cheie-valoare, unde cheia este o valoare hash și valoarea sunt datele reale.
- Coliziune : Când două chei diferite produc aceeași valoare hash.
- Tipuri de funcții Hash :
- Metoda diviziunii : Împarte intrarea la o constantă și folosește restul ca valoare hash.
- Pătratul Mijlociu Metodă: pătrate intrarea și ia cifrele din mijloc ca valoare hash.
- Metoda de pliere : Împarte intrarea în blocuri de dimensiuni egale și le adună împreună pentru a obține valoarea hash.
- Metoda înmulțirii : Înmulțește intrarea cu o constantă și ia partea fracțională ca valoare hash.
- Tehnici de rezolvare a coliziunilor :
- Înlănțuire separată (Hashing deschis) : Stochează elementele care se ciocnesc într-o listă legată la valoarea hash corespunzătoare.
- Adresare deschisă (Hashing închis) : Folosește diverse strategii pentru a găsi o locație alternativă pentru elementele care se ciocnesc în tabelul hash.
- Aplicații de hashing :
- Stocarea și preluarea eficientă a datelor în baze de date și sisteme de fișiere.
- Verificarea parolelor și a semnăturilor digitale.
- Distribuirea cererilor pe mai multe servere.
- Generarea hash-urilor securizate pentru integritatea și autentificarea datelor.
- Postări asemănatoare:
- Tutorial Hash
- Exersați problemele de hashing
9. Copac
A copac este o structură de date ierarhică neliniară constând din noduri conectate prin muchii, cu un nod superior numit rădăcină și noduri având noduri copil. Este folosit în informatică pentru organizarea eficientă a datelor.
variabilă javascript globală
- Traversarea copacului : Metodele de traversare a arborilor sunt folosite pentru a vizita și procesa nodurile dintr-o structură de date arborescentă. Cele trei metode comune de traversare sunt:
- În ordine : Vizitați subarborele din stânga, nodul curent, apoi subarborele din dreapta.
- Pre-comanda : Vizitați nodul curent, subarborele din stânga, apoi subarborele din dreapta.
- Post-comanda : Vizitați subarborele din stânga, subarborele din dreapta, apoi nodul curent.
- Clasificarea arborilor:
- Clasificări ale Copaci se referă la gruparea arborilor pe baza anumitor caracteristici sau criterii. Acest lucru poate implica clasificarea arborilor în funcție de factorul lor de echilibru, gradul de noduri, proprietățile de ordonare etc. Mai jos sunt câteva clasificări importante ale arborelui.
| Clasificare | Descriere | Tip | Descriere |
|---|---|---|---|
| După grad | Arborii pot fi clasificați în funcție de numărul maxim de copii pe care fiecare nod poate avea. | Arborele binar | Fiecare nod are cel mult doi copii. |
| Arborele Ternar | Fiecare nod are cel mult trei copii. | ||
| Arborele N-ary | Fiecare nod are cel mult N copii. | ||
| Prin Comandă | Arborii pot fi clasificați pe baza ordonării nodurilor și subarborilor | Arborele de căutare binar (BST) | Copil lăsat |
| Morman | Arbore binar specializat cu proprietatea heap. | ||
| După Balanță | Copacii pot fi clasificați în funcție de cât de bine echilibrați sunt. | algoritmul kruskals | Înălțimile subarborilor diferă cu cel mult unul. Exemplele includ arbori AVL și arbori roșu-negru. |
| Arborele dezechilibrat | Înălțimile subarborilor pot diferi semnificativ, afectând performanța în operațiuni precum căutarea și inserarea. |
- Aplicații ale arborilor:
- Sisteme de fișiere
- Baze de date
- documente XML
- Inteligenţă artificială
- Postări asemănatoare:
- Tutorial arbore
- Top 50 de probleme de codificare arbore
- Practicați probleme pe Tree
10. Grafic
A Grafic este o structură de date neliniară constând dintr-un set finit de vârfuri (sau noduri) și un set de muchii care conectează o pereche de noduri.
- Traversări ale graficului:
- Căutare pe lățimea întâi (BFS) : Vizitează nodurile nivel cu nivel.
- Căutare în profunzime (DFS) : Vizitează recursiv nodurile, explorând câte o ramură.
- Aplicații ale graficelor :
- Retele sociale
- Hărți și navigație
- Programare
- Exploatarea datelor
- Postări asemănatoare:
- Reprezentarea grafică
- Tipuri de grafice
- Tutorial grafic
- Exersați probleme pe Graph
Învață algoritmi
Odată ce ai clarificat conceptele de Structuri de date , acum este timpul să vă începeți călătoria prin Algoritmi . În funcție de tipul de natură și de utilizare, algoritmii sunt grupați în mai multe categorii, după cum se arată mai jos:
1. Algoritm de căutare
Algoritmi de căutare sunt folosite pentru a localiza date specifice într-un set mai mare de date. Ajută la găsirea prezenței unei valori țintă în date. Există diferite tipuri de algoritmi de căutare, fiecare cu propria abordare și eficiență.
- Cei mai comuni algoritmi de căutare:
- Căutare liniară : Căutare iterativă de la un capăt la altul.
- Căutare binară : Căutare „Divide-and-cuquer” pe o matrice sortată, reducând la jumătate spațiul de căutare la fiecare iterație.
- Căutare ternară : Căutare Divide-and-Conquer pe o matrice sortată, împărțind spațiul de căutare în trei părți la fiecare iterație.
- Alți algoritmi de căutare:
- Salt de căutare
- Căutare prin interpolare
- Căutare exponențială
- Subiecte asemănătoare:
- Exersați probleme cu algoritmul de căutare
2. Algoritm de sortare
Algoritmi de sortare sunt folosite pentru a aranja elementele unei liste într-o anumită ordine, cum ar fi numerică sau alfabetică. Organizează articolele într-un mod sistematic, facilitând căutarea și accesarea unor elemente specifice.
Există o mulțime de tipuri diferite de algoritmi de sortare. Unii algoritmi folosiți pe scară largă sunt:
| Algoritm de sortare | Descriere |
|---|---|
| Sortare cu bule | Compară iterativ elementele adiacente și le schimbă dacă nu sunt în ordine. Cel mai mare element bule până la sfârșitul listei cu fiecare trecere. |
| Sortare selecție | Găsește elementul minim în porțiunea nesortată a listei și îl schimbă cu primul element. Repetează acest proces până când întreaga listă este sortată. |
| Sortare prin inserare | Construiește lista sortată câte un element inserând fiecare element nesortat în poziția sa corectă în porțiunea sortată. |
| Sortare rapida | Un algoritm de împărțire și cucerire care selectează un element pivot, împarte lista în două subliste pe baza pivotului și aplică recursiv același proces sublistelor. |
| Merge Sort | Un alt algoritm de împărțire și cucerire care împarte recursiv lista în subliste mai mici, le sortează și apoi le unește înapoi pentru a obține lista sortată. |
Subiecte asemănătoare:
- Tutorial algoritm de sortare
- Top Sortarea întrebărilor și problemelor interviului
- Exersați probleme cu algoritmul de sortare
3. Algoritmul Divide and Conquer
Diviza și cuceri algoritmii urmează o strategie recursivă pentru a rezolva probleme, împărțindu-le în subprobleme mai mici, rezolvând acele subprobleme și combinând soluțiile pentru a obține soluția finală.
Pași:
- Divide : Împărțiți problema în subprobleme mai mici, independente.
- A cuceri : Rezolvați recursiv fiecare subproblemă.
- Combina : Uniți soluțiile subproblemelor pentru a obține soluția finală.
Exemple:
- Merge Sort: Împarte matricea în două jumătăți, sortează fiecare jumătate în mod recursiv și îmbină jumătățile sortate.
- Sortare rapidă: selectează un element pivot, partiționează matricea în două subgrupuri pe baza pivotului și sortează recursiv fiecare subbary.
- Căutare binară: Împarte spațiul de căutare în jumătate în mod repetat până când elementul țintă este găsit sau spațiul de căutare este epuizat.
Articole similare:
- Tutorial Divide and Conquer
- Exersați probleme cu algoritmul Divide And Conquer
4. Algoritmi lacomi
După cum sugerează și numele, acest algoritm construiește soluția pe rând și alege următoarea piesă care oferă cel mai evident și imediat beneficiu, adică care este cea mai optimă alegere în acel moment. Deci, problemele în care alegerea optimă local duce și la soluții globale sunt cele mai potrivite pentru Greedy.
Unele probleme importante ale algoritmilor lacomi sunt:
| Algoritm | Descriere |
|---|---|
| Rucsac fracționat | Găsiți valoarea totală maximă a articolelor care pot fi plasate în rucsac, permițând includerea fracționată a articolelor. |
| Algoritmul lui Dijkstra | Găsește calea cea mai scurtă de la un vârf sursă la toate celelalte vârfuri dintr-un grafic ponderat. |
| Algoritmul lui Kruskal | Găsește arborele de acoperire minim al unui grafic ponderat. |
| Codarea Huffman | Creează un cod de prefix optim pentru un set de simboluri, minimizând lungimea totală de codificare. |
Articole similare:
- Tutorial Algoritmul Greedy
- Exersați probleme cu algoritmul Greedy
5. Recursiune
Recursiune este o tehnică de programare în care o funcție se numește în cadrul propriei definiții. Este de obicei folosit pentru a rezolva probleme care pot fi împărțite în cazuri mai mici ale aceleiași probleme. De exemplu: Turnurile din Hanoi (TOH) , Calcul factorial și Secvența Fibonacci etc.
Pași :
- Caz de baza : Definiți o condiție care oprește apelurile recursive și oferă o soluție.
- Caz recursiv : Definiți pașii pentru a împărți problema în cazuri mai mici și pentru a efectua apeluri recursive.
- Întoarcere : Returnați soluția din apelurile recursive și combinați-le pentru a rezolva problema inițială.
Ideea care face din Recursion unul dintre cei mai folosiți algoritmi este că formează baza pentru mulți alți algoritmi, cum ar fi Traversări de copaci , Traversări grafice , Algoritmi Divide and Conquers și Algoritmi de backtracking .
Subiecte asemănătoare:
- Tutorial de recursivitate
- Funcții recursive
- Recursiunea cozii
- Top 50 de probleme privind algoritmul recursiv pentru interviu
- Practicați probleme cu algoritmul de recursivitate
6. Algoritmul de backtracking
După cum am menționat mai devreme, Întoarcerea înapoi algoritmul este derivat din algoritmul de recursivitate, cu opțiunea de a reveni dacă o soluție recursivă eșuează, adică în cazul în care o soluție eșuează, programul urmărește momentul în care a eșuat și se bazează pe o altă soluție. Deci, practic, încearcă toate soluțiile posibile și o găsește pe cea corectă.
Unele probleme importante și cele mai comune ale algoritmilor de backtracking, pe care trebuie să le rezolvați înainte de a continua, sunt:
| Problemă | Descriere |
|---|---|
| Problema turneului cavalerului | Găsirea unei secvențe de mișcări ale unui cavaler pe o tablă de șah, astfel încât acesta să viziteze fiecare pătrat exact o dată. |
| Șobolan într-un labirint | Găsirea unei căi de la poziția de plecare până la ieșire într-un labirint, cu obstacole reprezentate ca pereți. |
| Problema N-Regina | Plasarea N regine pe o tablă de șah N×N astfel încât să nu se atace două regine. |
| Problema sumei subsetului | Determinarea dacă există o submulțime a mulțimii date cu o sumă dată. |
| Sudoku | Rezolvarea unui puzzle grilă 9×9 cu numere de la 1 la 9 astfel încât fiecare rând, coloană și subgrilă 3×3 să conțină toate cifrele fără repetare. |
Articol înrudit:
- Tutorial de backtracking
- Exersați probleme cu algoritmul de backtracking
7. Programare dinamică
Programare dinamică este o metodă folosită în matematică și informatică pentru a rezolva probleme complexe prin descompunerea lor în subprobleme mai simple. Rezolvând fiecare subproblemă o singură dată și stocând rezultatele, se evită calculele redundante, ducând la soluții mai eficiente pentru o gamă largă de probleme.
Concepte cheie:
- Substructură optimă : Soluția optimă a unei probleme poate fi construită din soluțiile optime ale subproblemelor sale.
- Subprobleme suprapuse : Subproblemele sunt adesea repetate în problema mai mare, ceea ce duce la calcule redundante.
- Memorarea / Intabulare : Stocarea soluțiilor la subprobleme pentru a evita recalcularea.
Unele probleme importante și cele mai comune ale algoritmilor de programare dinamică, pe care trebuie să le rezolvați înainte de a continua, sunt:
| Problemă | Descriere |
|---|---|
| Secvența Fibonacci | Generarea numerelor Fibonacci folosind programarea dinamică pentru a evita calculele redundante. |
| Cea mai lungă subsecvență comună | Găsirea celei mai lungi subsecvențe comune la două secvențe. |
| Cea mai lungă subsecvență în creștere | Găsirea celei mai lungi subsecvențe a unei secvențe date în care elementele sunt sortate în ordine crescătoare. |
| 0/1 Problemă la rucsac | Determinarea valorii maxime care poate fi obținută prin selectarea articolelor cu greutăți și valori date, fără a depăși o limită de greutate specificată. |
| Problemă de tăiere a tijei | Maximizarea profitului prin tăierea în bucăți a unei lansete de lungime dată și vânzarea lor conform prețurilor date. |
| Problemă de schimbare a monedelor | Determinarea numărului de moduri de a face o schimbare pentru o anumită sumă folosind un anumit set de valori nominale de monede. |
| Editați Distanța | Găsirea numărului minim de operații (inserare, ștergere, înlocuire) necesare pentru a converti un șir în altul. |
| Problema sumei subsetului | Determinarea dacă există o submulțime dintr-o mulțime dată cu o sumă dată. |
| Cea mai lungă subsecvență palindromică | Găsirea celei mai lungi subsecvențe a unei secvențe date care este un palindrom. |
| Suma maximă Subbarray | Găsirea subgrupului învecinat cu cea mai mare sumă într-o matrice unidimensională dată. |
| Partiție Egal Subset Sum | Determinarea dacă este posibilă partiția unui anumit set în două submulțimi cu sumă egală. |
| Calea costului minim | Găsirea căii de cost minim din colțul din stânga sus până în colțul din dreapta jos al unei grile date. |
| Subbary maxim de produse | Găsirea subgrupului învecinat cu cel mai mare produs dintr-o matrice unidimensională dată. |
Articole similare:
- Tabulare vs memorare
- Cum se rezolvă o problemă de programare dinamică?
- Tutorial de programare dinamică
- Top 50 de probleme de codare de programare dinamică pentru interviuri
- Exersați probleme cu algoritmul de programare dinamică
8. Algoritmi grafici :
Algoritmi grafici în structurile de date și algoritmii (DSA) sunt un set de tehnici și metode utilizate pentru rezolvarea problemelor legate de grafice, care sunt o colecție de noduri și muchii. Acești algoritmi sunt proiectați pentru a efectua diverse operații pe grafice, cum ar fi căutând, străbătând, găsind calea cea mai scurtă , și determinarea conectivitate . Ele sunt esențiale pentru rezolvarea unei game largi de probleme din lumea reală, inclusiv rutarea rețelei, analiza rețelelor sociale și alocarea resurselor.
| Subiect | Descrierea subiectului | Algoritm | Descrierea algoritmului |
|---|---|---|---|
| Traversarea graficului | Tehnici de vizitare a tuturor nodurilor dintr-un grafic. | Căutare în profunzime (DFS) | Explorează cât mai departe posibil de-a lungul fiecărei ramuri înainte de a da înapoi. |
| Căutare pe lățimea întâi (BFS) | Explorează vârfurile vecine înainte de a trece la următorul nivel de vârfuri. | ||
| Arbori de întindere minim | Arborele de întindere minimă sunt cei mai mici arbori care conectează toate nodurile dintr-un grafic fără a forma cicluri, obținute prin adăugarea celor mai scurte muchii posibile. | Găsește un arbore de acoperire minim pentru un grafic ponderat conectat. Adaugă cea mai mică margine de greutate care nu formează un ciclu. | |
| De asemenea, găsește un arbore de acoperire minim pentru un grafic ponderat conectat. Se adaugă cea mai mică margine de greutate care conectează doi copaci. | |||
| Sortare topologică | Sortarea topologică este o ordonare liniară a vârfurilor într-un graf aciclic direcționat (DAG), astfel încât pentru fiecare muchie direcționată de la vârful u la vârful v, u vine înaintea v în ordonare. | Algoritmul lui Kahn | Algoritmul lui Kahn găsește o ordonare topologică a unui graf aciclic direcționat (DAG). |
| Algoritm bazat pe DFS | Algoritmul bazat pe DFS utilizează Depth-First Search pentru a efectua sortarea topologică într-un grafic aciclic direcționat (DAG). | ||
| Cea mai scurtă cale | Cea mai scurtă cale dintr-un grafic este calea dintre două vârfuri dintr-un grafic care are suma minimă a greutăților de-a lungul marginilor sale în comparație cu toate celelalte căi dintre aceleași două vârfuri. | Algoritm lacom pentru a găsi calea cea mai scurtă între toate nodurile în timp O(E * V logV). | |
| Găsește calea cea mai scurtă între toate perechile de noduri în timp O(V^3). | |||
| Găsește cea mai scurtă cale de la o singură sursă în timp O(V * E). | |||
| Algoritmul Johnson | Găsește cele mai scurte căi între toate perechile de vârfuri în timp O(V^2 logV + V * E). variabila bash | ||
| Componente puternic conectate | O componentă puternic conectată (SCC) a unui graf direcționat este un set maxim de vârfuri, astfel încât să existe o cale de la fiecare vârf din mulțime la fiecare alt vârf din mulțime. | Algoritmul lui Kosaraju este un algoritm în două treceri care găsește eficient componentele puternic conectate (SCC) ale unui graf direcționat. | |
| Algoritmul lui Tarjan | Algoritmul lui Tarjan este un alt algoritm eficient pentru găsirea SCC-urilor într-un grafic direcționat |
Subiecte asemănătoare:
- Tutorial grafic
- Top 50 de probleme de codificare grafică pentru interviuri
- Problemă de practică pe algoritmi grafici
9 . Căutare de modele
Căutare de modele este o tehnică fundamentală în DSA utilizată pentru a găsi aparițiile unui model specific într-un text dat.
Mai jos sunt câțiva algoritmi standard de căutare a modelelor:
| Algoritm | Descriere | Complexitatea timpului |
|---|---|---|
| Forta bruta | Acesta compară modelul cu fiecare subșir al textului | O(mn) |
| Knuth-Morris-Pratt | Utilizează o funcție de eșec precalculată pentru a omite comparațiile inutile | O(m + n) |
| Boyer-Moore | Compară modelul de la dreapta la stânga, sărind caractere pe baza ultimei nepotriviri | O(mn) |
| Rabin-Karp | Utilizează hashing pentru a verifica rapid eventualele potriviri | O(m + n) |
Subiecte asemănătoare:
- Tutorial de căutare de modele
- Problemă de practică activată Căutare de modele
10 . Algoritmi matematici
Algoritmi matematici sunt o clasă de algoritmi care rezolvă probleme legate de concepte matematice. Sunt utilizate pe scară largă în diverse domenii, inclusiv grafică pe computer, analiză numerică, optimizare și criptare.
| Algoritm | Descriere |
|---|---|
| GCD și LCM | Aflați cel mai mare divizor comun și cel mai mic multiplu comun a două numere. |
| Factorizare primara | Descompune un număr în factorii săi primi. |
| Numerele Fibonacci | Generați șirul lui Fibonacci, unde fiecare număr este suma celor două precedente. |
| Numere catalane | Numărați numărul de expresii valide cu un număr dat de perechi de paranteze. |
| Aritmetică modulară | Efectuați operații aritmetice pe numere modulo o valoare dată. |
| Funcția Euler Totient | Numărați numărul de numere întregi pozitive mai mici decât un număr dat, care sunt relativ prime pentru acesta. |
| Calcule nCr | Calculați coeficientul binom, care reprezintă numărul de moduri de a alege r elemente dintr-un set de n elemente. |
| Numerele prime și testele de primalitate | Determinați dacă un anumit număr este prim și găsiți eficient numerele prime. |
| Algoritmi Sieve | Găsiți toate numerele prime până la o limită dată. |
Subiecte asemănătoare:
- Problemă de practică pe algoritmul matematic
11. Algoritmi geometrici
Algoritmi geometrici sunt o clasă de algoritmi care rezolvă probleme legate de geometrie. Algoritmii geometrici sunt esențiali pentru rezolvarea unei game largi de probleme din informatică, cum ar fi:
| Algoritm | Descriere |
|---|---|
| Cocă convexă | Găsește cel mai mic poligon convex care conține un set de puncte. |
| Cea mai apropiată pereche de puncte | Găsește cele două puncte dintr-o mulțime care sunt cel mai apropiate unul de celălalt. |
| Intersecția liniei | Determină dacă două drepte se intersectează și, dacă da, găsește punctul de intersecție. |
| Punct în poligon | Stabilește dacă un punct dat se află în interiorul sau în afara unui poligon. |
Subiecte asemănătoare:
- Problemă de practică pe algoritmi geometrici
12. Algoritmi biți
Algoritmi pe biți sunt algoritmi care operează pe biți individuali de numere. Acești algoritmi manipulează reprezentarea binară a numerelor pentru a efectua sarcini precum manipularea biților, operații logice pe biți (ȘI, SAU, XOR), biți de schimbare , și setare sau ștergerea unor biți specifici în cadrul unui număr. Algoritmii pe biți sunt utilizați în mod obișnuit în programare de nivel scăzut, criptare și sarcini de optimizare unde este necesară manipularea eficientă a biților individuali.
| Subiect | Descriere |
|---|---|
| Schimbarea biților | Deplasează biții la stânga sau la dreapta cu un anumit număr de poziții. |
| Schimbarea la stânga (<<) | Mută biții la stânga, înmulțind efectiv numărul cu 2. |
| Schimbarea la dreapta (>>) | Mută biții la dreapta, împărțind efectiv numărul la 2. |
| Extrageți biți | Utilizarea măștilor pentru a extrage biți specifici dintr-un număr întreg. |
| Setarea biților | Folosind măști pentru a seta biți specifici la 1 într-un număr întreg. |
| Ștergerea biților | Folosind măști pentru a seta biți specifici la 0 într-un număr întreg. |
| Biți de comutare | Folosind XOR (^) pentru a comuta biți specifici dintr-un număr întreg. |
| Numărarea set de biți | Numărarea numărului de biți setați (1s) într-un număr întreg. |
Subiecte asemănătoare:
- Tutorial pentru algoritmi biți
- Practicați problema pe algoritmi pe biți
13. Algoritmi randomizati
Algoritmii randomizati sunt algoritmi care folosesc aleatoritatea pentru a rezolva probleme. Ei folosesc inputuri aleatorii pentru a-și atinge obiectivele, conducând adesea la soluții mai simple sau mai eficiente.
Tipuri de algoritmi randomizati:
- Las Vegas : Produce întotdeauna un rezultat corect, dar timpul de rulare este aleatoriu.
- Monte Carlo : Poate produce un rezultat incorect cu o probabilitate mică, dar timpul de rulare este de obicei mai rapid.
Algoritmi importanți care utilizează algoritmi de randomizare:
| Algoritm | Descriere |
|---|---|
| Sortare rapida | Un algoritm de sortare randomizat cu o complexitate de timp medie a cazului de O(n log n). |
| Omite lista | O structură de date randomizată care oferă operații rapide de căutare și inserare. |
| Filtrul de înflorire | O structură de date probabilistică pentru testarea eficientă a membrilor setului. |
14. Algoritmul de ramificare și legat
The Algoritmul de ramificare și legat este o metodă folosită în problemele de optimizare combinatorie pentru a căuta sistematic cea mai bună soluție. Funcționează prin împărțirea problemei în subprobleme mai mici, sau ramuri, și apoi eliminând anumite ramuri pe baza limitelor soluției optime. Acest proces continuă până când se găsește cea mai bună soluție sau se explorează toate ramurile.
Probleme standard privind algoritmul de ramificare și legat:
| Problemă unică | Descriere |
|---|---|
| 0/1 Rucsac folosind Branch and Bound | Detalii de implementare ale abordării ramificate și legate pentru rezolvarea problemei 0/1 Knapsack. |
| Rucsac 0/1 folosind Least Cost Branch și Bound | Rezolvarea problemei rucsacului 0/1 folosind tehnica ramificată și legată cu cel mai mic cost. |
| 8 puzzle Problemă folosind Branch and Bound | Aplicația de ramură și legată de a rezolva problema 8 puzzle, un popular joc de puzzle alunecat. |
| N Queen Problemă folosind Branch și Bound | Folosind ramura și obligat să găsească soluții la problema N Queens, o problemă clasică de șah. |
Subiecte asemănătoare:
- Tutorial de ramificare și algoritm legat
Aflați despre complexități
În Structuri și algoritmi de date (DSA), scopul principal este de a rezolva probleme în mod eficient și eficient. Pentru a determina eficiența unui program, ne uităm la două tipuri de complexități:
- Complexitatea timpului : Aceasta ne spune cât timp durează codul nostru pentru a rula.
- Complexitatea spațială : Aceasta ne spune câtă memorie folosește codul nostru.
Notație asimptotică :
Pentru a compara eficiența algoritmilor, folosim notația asimptotică, un instrument matematic care estimează timp bazat pe dimensiunea de intrare fără a rula codul. Se concentrează pe numărul de operațiuni de bază din program.
| Notaţie | Descriere |
|---|---|
| Big-O (Ο) | Descrie cel mai rău scenariu, oferind o limită de timp superioară a algoritmului. |
| Omega (Ω) | Descrie cel mai bun scenariu, oferind o limită de timp mai mică a algoritmului. |
| Theta (θ) | Reprezintă complexitatea medie a unui algoritm de algoritm. |
Cea mai des folosită notație pentru analiza codului este Notația O mare , oferind o limită superioară a timpului de rulare sau a utilizării memoriei în ceea ce privește dimensiunea de intrare.
Subiecte asemănătoare:
- Înțelegerea complexității timpului cu exemple simple
- Complexitatea temporală a diferitelor structuri de date
- Cum se analizează buclele pentru analiza complexității algoritmilor
- Întrebări practice privind analiza complexității timpului
Practică cheat Sheet cu probleme:
Liste de probleme selectate din articolele de mai jos:
- Foaie de parcurs DSA de Sandeep Jain
- FIȘĂ SDE – Un ghid complet pentru pregătirea SDE
- techcodeview.com Master Sheet – Lista tuturor Cheat Sheets