Previous Table of Contents Next

In clipa cand exprimam un lucru, reusim,
in mod bizar, sa-l si depreciem.

Maeterlinck

Prefata

Cartea noastra isi propune in primul rand sa fie un curs si nu o "enciclopedie" de algoritmi. Pornind de la structurile de date cele mai uzuale si de la analiza eficientei algoritmilor, cartea se concentreaza pe principiile fundamentale de elaborare a algoritmilor: greedy, divide et impera, programare dinamica, backtracking. Interesul nostru pentru inteligenta artificiala a facut ca penultimul capitol sa fie, de fapt, o introducere - din punct de vedere al algoritmilor - in acest domeniu.

Majoritatea algoritmilor selectati au o conotatie estetica. Efortul necesar pentru intelegerea elementelor mai subtile este uneori considerabil. Ce este insa un algoritm "estetic"? Putem raspunde foarte simplu: un algoritm este estetic daca exprima mult in cuvinte putine. Un algoritm estetic este oare in mod necesar si eficient? Cartea raspunde si acestor intrebari.

In al doilea rand, cartea prezinta mecanismele interne esentiale ale limbajului C++ (mosteniri, legaturi dinamice, clase parametrice, exceptii) si trateaza implementarea algoritmilor in conceptul programarii orientate pe obiect. Totusi, aceasta carte nu este un curs complet de C++.

Algoritmii nu sunt pur si simplu "transcrisi" din pseudo-cod in limbajul C++, ci sunt reganditi din punct de vedere al programarii orientate pe obiect. Speram ca, dupa citirea cartii, veti dezvolta aplicatii de programare orientata pe obiect si veti elabora implementari ale altor structuri de date. Programele au fost scrise pentru limbajul C++ descris de Ellis si Stroustrup in "The Annotated C++ Reference Manual". Acest limbaj se caracterizeaza, in principal, prin introducerea claselor parametrice si a unui mecanism de tratare a exceptiilor foarte avansat, facilitati deosebit de importante pentru dezvoltarea de biblioteci C++. Compilatoarele GNU C++ 2.5.8 (UNIX/Linux) si Borland C++ 3.1 (DOS) suporta destul de bine clasele parametrice. Pentru tratarea exceptiilor se pot utiliza compilatoarele Borland C++ 4.0 si, in viitorul apropiat, GNU C++ 2.7.1.

Fara a face concesii rigorii matematice, prezentarea este intuitiva, cu numeroase exemple. Am evitat, pe cat posibil, situatia in care o carte de informatica incepe - spre disperarea ne-matematicienilor - cu celebrul "Fie ... ", sau cu o definitie. Am incercat, pe de alta parte, sa evitam situatia cand totul "este evident", sau "se poate demonstra". Fiecare capitol este conceput fluid, ca o mica poveste, cu putine referinte si note. Multe rezultate mai tehnice sunt obtinute ca exercitii. Algoritmii sunt prezentati intr-un limbaj pseudo-cod compact, fara detalii inutile. Am adaugat la sfarsitul fiecarui capitol numeroase exercitii, multe din ele cu solutii.

Presupunem ca cititorul are la baza cel putin un curs introductiv in programare, nefiindu-i straini termeni precum algoritm, recursivitate, functie, procedura si pseudo-cod. Exista mai multe modalitati de parcurgere a cartii. In functie de interesul si pregatirea cititorului, acesta poate alege oricare din partile referitoare la elaborarea, analiza, sau implementarea algoritmilor. Cu exceptia partilor de analiza a eficientei algoritmilor (unde sunt necesare elemente de matematici superioare), cartea poate fi parcursa si de catre un elev de liceu. Pentru parcurgerea sectiunilor de implementare, este recomandabila cunoasterea limbajului C.
Cartea noastra se bazeaza pe cursurile pe care le tinem, incepand cu 1991, la Sectia de electronica si calculatoare a Universitatii Transilvania din Brasov. S-a dovedit utila si experienta noastra de peste zece ani in dezvoltarea produselor software. Colectivul de procesare a imaginilor din ITC Brasov a fost un excelent mediu in care am putut sa ne dezvoltam profesional. Le multumim pentru aceasta celor care au facut parte, alaturi de noi, din acest grup: Sorin Cismas, Stefan Jozsa, Eugen Carai. Nu putem sa nu ne amintim cu nostalgie de compilatorul C al firmei DEC (pentru minicalculatoarele din seria PDP-11) pe care l-am "descoperit" impreuna, cu zece ani in urma.

Ca de obicei in astfel de situatii, numarul celor care au contribuit intr-un fel sau altul la realizarea acestei carti este foarte mare, cuprinzand profesorii nostri, colegii de catedra, studentii pe care am "testat" cursurile, prietenii. Le multumim tuturor. De asemenea, apreciem rabdarea celor care ne-au suportat in cei peste doi ani de elaborare a cartii.

Speram sa cititi aceasta carte cu aceeasi placere cu care ea a fost scrisa.

Brasov, ianuarie 1995


Razvan Andonie
Ilie Garbacea



Previous Table of Contents Next