Structuri de date si algoritmi fundamentali in C#
Stiva (Stack)
Coada (Queue)
Lista Inlatuita (Linked List)
Tablou De Dispersie (Hashtable)
Cautare Binara (Binary Search)
Arbore Binar De Cautare (Binary Search Tree)
Grafuri (Graphs)
Importanta complexitati algoritmilor este data de faptul ca ne zice daca codul se scaleaza. Majoritatea structurilor de date si a algoritmilor fundamentali sunt deja implementati in .NET Framework, e important sa stim cum functioneaza aceste structuri de date si ce complexitate de timp, memorie au la operatiile de baza: accesare element, cautare element, stergere element, adaugare element.


Stiva (Stack)
Stiva (Stack) este o structura de date implementata in .NET Framework sub doua forme, stiva simpla in namespace System.Collections, si stiva ca structura de date generica in namespace System.Collections.Generic, principiul de functionare a structuri stack este LIFO(last in first out), ultimul element intrat primul iesit.
Coada (Queue)
Coada (Queue) este o structura de date implementata in .NET Framework sub doua forme, coada simpla in namespace System.Collections, si coada ca structura de date generica in namespace System.Collections.Generic, principiul de functionare a structuri queue este FIFO(first in first out), primul element intrat primul iesit.
Lista Inlantuita (Linked List)
Lista Inlantuita (Linked List) este o structura de date implementata in .NET Framework ca structura generica in namespace System.Collections.Generic, principiul de functionare a structuri lista inlatuita este ca fiecare nod din lista are o referinta la nodul urmator, exceptand coada listei care nu are o referinta la urmatorul nod.

Tablou De Dispersie (Hashtable)
Tablou De Dispersie (Hashtable) este o structura de date implementata in .NET Framework sub doua forme Hashtable simplu in namespace System.Collections si Dictionary
Cautare Binara (Binary Search)
Algoritmi de cautare reprezinta un alt topic din cursurile de algoritmi si structuri de date, putem folosi cautare secventiala cu complexitate O(n), sau binara daca elementele sunt sortate cu complexitate O(log n). Ideea din spatele binary search este ca accesam elementul din mijloc si comparam cu cel cautat daca e mai mic se repeta procesul recursiv pentru prima jumatate, altfel se cauta in a doua jumatate, cautarea binara in .NET Framework se realizeaza cu Array.BinarySearch.
Arbore Binar De Cautare (Binary Search Tree)
Un repository GitHub cu implementari custom pentru majoritatea structurilor de date cu cod sursa: https://github.com/aalhour/C-Sharp-Algorithms Am sa prezint in continuare arbore binar de cautare (binary search tree) ideea e ca ai un nod radacina, fiecare nod are cel mult doua noduri copii, cel din stanga e mai mic decat radacina, la fel tot subarbore stang, nodul drept este mai mare decat radacina, la fel tot subarbore drept.Exemplu de construire arbore binar:

Cautarea intr-un arbore binar de cautare are complexitatea de timp O(log n), exemplu de cautare in arbore binar:

Metode de parcurgere arbori binari:
Preordine
- Se parcurge rădăcina
- Se parcurge subarborele stâng
- Se parcurge subarborele drept
- Se parcurge subarborele stâng
- Se parcurge rădăcina
- Se parcurge subarborele drept
- Se parcurge subarborele stâng
- Se parcurge subarborele drept
- Se parcurge rădăcina
Graphs
Grafurile sunt structuri de date caracterizate prin noduri si muchii care unesc nodurile, se foloseste de obicei notatia G=(V, E) unde, V reprezinta multimea de noduri(varfuri, vertices), si E reprezinta multimea de edges(muchii), in limbajul de programare se reprezinta prin matrice de adiacenta de exemplu a[i, j] = k, asta inseamna ca intre nodul i si j avem o muchie cu pondere k, se mai folosesc si liste de adiacenta pentru reprezentarea lor.
Grafurile si arbori pot fi parcursi si in latime(BREADTH FIRST) cu o coada, adancime(DEPTH FIRST) cu o stiva.


Comentarii
Trimiteți un comentariu