1. Preliminarii
1.1 Ce este un algoritm?
1.2 Eficienta algoritmilor
1.3 Cazul mediu si cazul cel mai nefavorabil
1.4 Operatie elementara
1.5 De ce avem nevoie de algoritmi eficienti?
1.6 Exemple
1.6.1 Sortare
1.6.2 Calculul determinantilor
1.6.3 Cel mai mare divizor comun
1.6.4 Numerele lui Fibonacci
1.7 Exercitii
2. Programare orientata pe obiect
2.1 Conceptul de obiect
2.2 Limbajul C++
2.2.1 Diferentele dintre limbajele
C si C++
2.2.2 Intrari/iesiri in
limbajul C++
2.3 Clase in limbajul C++
2.3.1 Tipul intErval in
limbajul C
2.3.2 Tipul intErval in limbajul
C++
2.4 Exercitii
3. Structuri elementare de date
3.1 Liste
3.1.1 Stive
3.1.2 Cozi
3.2 Grafuri
3.3 Arbori cu radacina
3.4 Heap-uri
3.5 Structuri de multimi disjuncte
3.6 Exercitii
4. Tipuri abstracte de date
4.1 Tablouri
4.1.1 Alocarea dinamica a memoriei
4.1.2 Clasa tablou
4.1.3 Clasa parametrica
tablou<T>
4.2 Stive, cozi, heap-uri
4.2.1 Clasele stiva<T>
si coada<T>
4.2.2 Clasa heap<T>
4.3 Clasa lista<E>
4.4 Exercitii
5. Analiza eficientei algoritmilor
5.1 Notatia asimptotica
5.1.1 O notatie pentru “ordinul
lui”
5.1.2 Notatia asimptotica conditionata
5.2 Tehnici de analiza a algoritmilor
5.2.1 Sortarea prin selectie
5.2.2 Sortarea prin insertie
5.2.3 Heapsort
5.2.4 Turnurile din Hanoi
5.3 Analiza algoritmilor recursivi
5.3.1 Metoda iteratiei
5.3.2 Inductia constructiva
5.3.3 Recurente liniare omogene
5.3.4 Recurente liniare neomogene
5.3.5 Schimbarea variabilei
5.4 Exercitii
6. Algoritmi greedy
6.1 Tehnica greedy
6.2 Minimizarea timpului mediu de asteptare
6.3 Interclasarea optima a sirurilor
ordonate
6.4 Implementarea arborilor de interclasare
6.5 Coduri Huffman
6.6 Arbori partiali de cost minim
6.6.1 Algoritmul lui Kruskal
6.6.2 Algoritmul lui Prim
6.7 Implementarea algoritmului lui Kruskal
6.8 Cele mai scurte drumuri care pleaca din
acelasi punct
6.9 Implementarea algoritmului lui Dijkstra
6.10 Euristica greedy
6.10.1 Colorarea unui
graf
6.10.2 Problema comis-voiajorului
6.11 Exercitii
7. Algoritmi divide et impera
7.1 Tehnica divide et impera
7.2 Cautarea binara
7.3 Mergesort (sortarea prin interclasare)
7.4 Mergesort in clasele tablou<T>
si lista<E>
7.4.1 O solutie neinspirata
7.4.2 Tablouri sortabile
si liste sortabile
7.5 Quicksort (sortarea rapida)
7.6 Selectia unui element dintr-un tablou
7.7 O problema de criptologie
7.8 Inmultirea matricilor
7.9 Inmultirea numerelor intregi mari
7.10 Exercitii
8. Algoritmi de programare dinamica
8.1 Trei principii fundamentale ale programarii
dinamice
8.2 O competitie
8.3 Inmultirea inlantuita a matricilor
8.4 Tablouri multidimensionale
8.5 Determinarea celor mai scurte drumuri
intr-un graf
8.6 Arbori binari optimi de cautare
8.7 Arborii binari de cautare ca tip de data
8.7.1 Arborele optim
8.7.2 Cautarea in arbore
8.7.3 Modificarea arborelui
8.8 Programarea dinamica comparata cu
tehnica greedy
8.9 Exercitii
9. Explorari in grafuri
9.1 Parcurgerea arborilor
9.2 Operatii de parcurgere in clasa
arbore<E>
9.3 Parcurgerea grafurilor in adancime
9.3.1 Puncte de articulare
9.3.2 Sortarea topologica
9.4 Parcurgerea grafurilor in latime
9.5 Salvarea si restaurarea arborilor
binari de cautare
9.6 Backtracking
9.7 Grafuri si jocuri
9.7.1 Jocul nim
9.7.2 Sahul si tehnica
minimax
9.8 Grafuri AND/OR
9.9 Exercitii
10. Derivare publica, functii virtuale
10.1 Ciurul lui Eratostene
10.2 Tablouri initializate virtual
10.2.1 Structura
10.2.2 Implementarea (o varianta
de nota sase)
10.2.3 tablouVI<T>
ca subtip al tipului tablou<T>
10.3 Exercitii