Friday, May 5, 2023

O carte de Structuri de date din 2023

De domeniul structurilor de date m-am ocupat de mulți ani, fără a spune că am fost dat afară de la grădiniță că m-am lăudat cu așa ceva. Am publicat materiale de structuri de date în anul 2008, 2005, 2003, 1998, 1992.
Azi 05 mai 2023 mai tânărul meu coleg Marius POPA mi-a oferit un exemplar din lucrarea referită prin:
Marius POPA, Cristian CIUREA, Mihai DOINEA, Alin ZAMFIROIU - Structuri de date, Teorie și practică, Editura ASE, București, 2023, 280 pag, ISBN 978-606-34-0438-2
Cartea are următorul cuprins:
Lista figurilor
Lista tabelelor
Cuvânt înainte
Introducere
reprezentarea internă a datelor
Masive de date
Structuri dinamice liniare înlănțuite
Tabela de dispersie
Structura coadă de priorități
Structuri arborescente
Structura de tip graf
Concluzii
Bibliografie.
Întrucât cuvântul înainte l-am scris eu, îl voi reproduce aici.

Am așteptat cu deosebit interes demersul întreprins de prof. dr. Cristian CIUREA, conf. dr. Mihai DOINEA, conf. dr, Marius POPA și conf. dr. Alin ZAMFIROIU, cadre didactice prestigioase la Departamentul de Informatică și Cibernetică Economică, de a trimite spre publicare la Editura ASE a lucrării intitulată Structuri de date, teorie și practică. Lucrarea este rodul undei îndelungate activități desfășurate de cei patru autori la Facultatea de Cibernetică, Statistică și Informatică Economică, Secția Informatică Economică, unde ei au predat cursuri și au coordonat activități de laborator la disciplina Structuri de date, aflată în programa de învățământ a studenților, viitori informaticieni.

Autorii au structurat lucrarea pe capitole care urmăresc o abordare graduală a problematicii structurilor de date, îmbinând latura teoretică cu latura practică, pentru a oferi studenților, dar și specialiștilor din producție, un suport solid care să le permită derularea unor procese optime de alocare și nivelare de resurse, atunci când trec la dezvoltarea de aplicații informatice cu nivel de complexitate ridicat, destinate unui număr foarte ridicat de utilizatori în mediul online mai ales.

În capitolul intitulat Reprezentarea internă a datelor, autorii foarte buni cunoscători ai limbajului de asamblare, prezintă o serie de detalii absolut necesare înțelegerii reprezentării datelor în memorie, a modurilor de adresare, a mecanismelor de alocare și de gestionare dinamică a zonelor de memorie. Un spațiu important din acest capitol este rezervat variabilelor pointer, iar exemplificările sunt efectuate folosind limbajul de programare C.

Capitolul intitulat Masive este destinat prezentării structurilor de date omogene vector și matrice. Modul de alocare a zonelor de memorie și referirea elementelor sunt puse în evidență prin utilizarea unei aplicații complexe, cu multe funcții de prelucrare. Alegerea acestui mod de abordare permite trecerea rapidă spre soluționarea de probleme dintr-o clasă foarte cuprinzătoare, căci colectivităților omogene din viața reală, le corespund în plan informatic, aplicații în care lucrul cu vectorii și cu matricele sunt cele mai potrivite.

Pentru a prezenta listele simplu înlănțuite, listele dublu înlănțuite, a fost construit capitolul Structuri de date liniare înlănțuite. Sunt prezentate conceptele de bază și operațiile cu aceste structuri de date dinamice. Fiecărei operații îi corespunde o funcție scrisă în limbajul C. Aici sunt prezentate operațiile de creare element, de numărare elemente, de sortare a elementelor, de inserare element, de ștergere element, de ștergere a întregii liste, de concatenare a două liste și de descompunere a unei liste în două liste. Construcția funcțiilor permite preluarea textelor de către orice dezvoltator, cu efectuarea rapidă a adaptărilor care să permită implementarea listelor simple în textele lor sursă. În același mod se procedează și în cazul listelor dublu înlănțuite. Sunt date criterii de selecție, care arată când trebuie implementare listele simplu înlănțuite și când se implementează listele dublu înlănțuite în aplicații informatice, căci diferențele dintre ele generează performanță numai când alegerea este adecvată.

Capitolul intitulat Tabele de dispersie conține tratarea unei structuri de date extrem de utile în aplicațiile unde se impun regăsiri de informații după chei. Sunt date operații de inserare, de căutare, de viziualizare și de ștergere. Sunt prezentate diferite variante de creare a tabelelor de dispersie, cu avantajele și limitele pe care acestea le prezintă.

Pentru structura coadă de priorități autorii au construit un capitol special în care sunt prezentate funcții de inserare element cu prioritate dată, afișare elemente, identificarea elementului disponibil, schimbarea priorității, extragerea elementului cu prioritate maximă și verificarea conținutului structurii. Textul sursă propus de autori se translatează rapid către problemele dezvoltatorilor în care ierarhizarea elementelor din colectivități se realizează în baza unor priorități stabilite după reguli clar definite.

Structuri arborescente este capitolul în care sunt prezentați arborii oarecare, arborii binari, arborii binari de căutare, arbori echilibrați, arbori AVL și arborii de structură. Pentru fiecare tipologie de arbori sunt prezentare funcții corespunzătoare operațiilor de creare, de traversare, de inserare nod, de ștergere nod, de afișare nod, calcul înălțime arbore. Și aici s-a optat pe ideea de a exemplifica utilizarea fiecărei structuri arborescente pentru câte o clasă de probleme, care este reprezentativă și care se regăsește frecvent în practica dezvoltatorilor de software.

Pentru Grafuri, este dedicat un capitol distinct și sunt dezvoltate atât abordări privind matricelor de adiacență, cât și abordări cu alocare dinamică a memoriei pentru nodurile unui graf. Sunt detaliate funcțiile de traversare în graf în înălțime, de căutare, de alocare, de dezalocare, de inserare arce, de inserare noduri. Sunt implementați  algoritmi de stabilire a drumului minim și de stabilire a costului minim în graful definit într-o matrice. Dezvoltatorii de software care parcurg acest capitol au posibilitatea de soluționa direct, folosind funcțiile date, a variantelor de probleme de transport cu identificarea de rute eficient după diferite criterii combinate, prin introducerea de filtre proprii.

Lucrarea se încheie cu Concluzii, parte care sintetizează elocvent necesitatea utilizării adecvate a structurilor de date, căci diferența între o structură de date adecvat folosită și una folosită la întâmpălare se concretizează prin creșterea semnificativă a performanței aplicației informatice, mai ales prin reducerea drastică a timpilor de prelucrare, mai exact a timpilor de așteptare ai utilizatorilor care folosesc cu deosebire aplicații online.

Bibliografia folosită de autori include lucrări publicate majoritatea în ulțimii ani, lucrări reprezentative din domeniu, selectate  cu grijă, lucrări care sunt accesibile în mediul online.

Textele sursă incluse în lucrare sunt reprezentative pentru clase de probleme frecvent întâlnite în viața de toate zilele. Textele sursă sunt autodocumentate folosind comentarii sugestive. S-a optat pentru creșterea clarității textelor sursă prin alegerea numelor de identificatori folosind cuvinte sugestive legate prin underscore. Secvențele de instrucțiuni ce se referă la o anumită prelucrare sunt grupate în blocuri distincte, ușor de urmărit căci delimitatorii de bloc se află pe linii sursă separate. Toate programele scrise și incluse în carte au fost verificate, testate și validate, astfel încât, prin utilizarea directă, studenții și dezvoltatorii de software au un punct de plecare sigur, care să le asigure succesul necesar în elaborarea de texte sursă pentru propriile probleme.

Lucrarea a fost gândită pentru a fi utilă celor care doresc să scrie software performant, cu nivel de complexitate ridicat și care urmăresc obținerea unui nivel ridicat de calitate prin includerea de secvențe de instrucțiuni verificate de-a lungul timpului, bine gândite, optimale, dacă prin acest concept se acceptă secvențele cele mai bune dintr-o multitudine cunoscută de secvențe de instrucțiuni și nu din totalitatea de secvențe care ar exista vreodată.

Scrierea programelor în limbajul C crează premise reale olosirii fără efort suplimentar a funcțiilor de prelucrare a structurilor de date, în aplicații cu niveluri diferite de complexitate, cu utilizarea celor mai avansate tehnici de programare și a unei mari varietăți de limbaje avansate de programare. Se vede că cei patru autori vin cu o experiență vastă din practica dezvoltării de proiecte informatice ca programatori, căci toți patru scriu în mod curent programe în limbajul C în producție, dar și practica de la catedră, căci pe pozițiile didactice pe care le ocupă, au predat cursuri și au coordonat activițiți de laborator la disciplina de Programare a calculatoarelor, disciplină care poartă denumiri ce corespund tipului de limbaj sau tehnicii de programare folosite. Ei au și alte colaborări în scrierea de articole, în prezentări de comunicări la conferințe, ceea ce le-a permis abordarea întregii problematicii într-o manieră omogenă, echilibrată, unitară, ceea ce face ca lucrarea să fie cu atât mai valoroasă.

Autorii acestei lucrări originale sunt doctori în specializarea Informatică Economică, au o vastă experiență atât didactică cât și de cercetare științifică. Dr. Cristian CIUREA dezvoltă proiecte de informatică la Biblioteca Academiei Române, dr. Mihai DOINEA și dr. Marius POPA dezvoltă proiecte de informatică la Compania ORACLE, iar dr. Alin ZAMFIROIU dezvoltă proiecte de informatică la Institutul de Cercetări în Informatică.

Este o onoare pentru mine să scriu aceste rânduri, căci am urmărit evoluția celor patru autori de-a lungul timpului și acestă lucrare este unul din șirul lung al realizărilor pe care le-au concretizat prin colaborare rodnică, prin muncă asiduă și dovedind exigență, rigurozitate și originalitate în toate demersurile lor.

Îmi exprim credința că lucrarea Structuri de date, teorie și practică scrisă de r. Cristian CIUREA, dr. Mihai DOINEA, dr, Marius POPA și dr. Alin ZAMFIROIU, va fi o lucrare de referință în domeniu, iar studenții și specialiștii informaticieni, vor avea un istrument deosebit de util în munca lor pentru a crește calitatea și eficiența aplicațiilor informatice pe care le vor realiza, după studierea ei, dar mai ales, după ce vor translata în textele lor sursă secvențe cu care autorii exemplifică avantajele folosirii anumitor structuri de date, integrate în construcțiile proprii.

M-am bucurat să văd că cei patru tineri duc mai departe tradiția care a fost dezvoltată începând cu anul universitar 1991 - 1992 la Secția de informatică Economică și structurile de date au rămas o disciplină deosebit de importantă pentru studenții care vor să devină specialiști de înaltă clasă, căci totul depinde de cum ei vor ști să aleagă structurile de date adecvate, atunci când vor dezvolta aplicații informatice în viitor. Să nu uite nimeni că fișierul este o structură de date, că baza de date este o structură de date, că obiectele sunt structuri de date, că inteligența artificială se bazează pe operații complexe cu structuri de date și că orice dezvoltare viitoare a tehnologiilor informatice nu se va realiza în afara structurilor de date.

 

 

 



(05 mai 2023)

No comments:

Post a Comment