Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S

Documente similare
Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Grafuri - Concepte de baza. Tipuri de grafuri. Modalitati de reprezentare

E_d_Informatica_sp_MI_2015_bar_02_LRO

Grafuri neorinetate Aplicatii 1 Care este numărul maxim de componente conexe pe care le poate avea un graf neorientat cu 20 noduri şi 12 muchii? a. 6

Subiectul 1

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Probleme rezolvate informatica: Probleme rezolvate grafuri si a

Slide 1

Slide 1

PCLPII-C16(9)

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

C++ Probleme

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Microsoft Word - _arbori.docx

Top

CLP_UTCN-grila-2012.dvi

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Programarea şi utilizarea calculatoarelor

Retele Petri si Aplicatii

Slide 1

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Nr. 932 din Avizat ISJ Vâlcea, Inspector școlar informatică, Ciochină Luisa EXAMEN DE ATESTARE A COMPETENȚELOR PROFESIONALE A ABSOLVENȚILOR

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

ExamView Pro - Untitled.tst

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

SUBPROGRAME

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Backtracking_2018

2.1.Tipul tablou unidimensional

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

Analiză de flux de date 29 octombrie 2012

Cuantizare Vectoriala.doc

1

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Laboratorul 2 Problema tăieturii minime Considerăm un graf (neorientat) G = (V, E) (V e mulţimea vârfurilor, E e mulţimea muchiilor) care este conex (

D.Rusu, Teoria măsurii şi integrala Lebesgue 6 MĂSURA LEBESGUE Cursul 5 Teorema 6.26 Există submulţimi ale lui R care nu sunt măsurabile Lebesgue. Dem

Analiză statică Analiza fluxului de date 23 octombrie 2014

Microsoft Word - cap1p4.doc

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Introducere

Logică și structuri discrete Mulțimi Casandra Holotescu

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

1

E_d_Informatica_sp_SN_2014_bar_10_LRO

Algoritmi genetici paraleli. Implementari Java. Continut laborator: 1. Obiectivul lucrarii. 2. Notiuni teoretice: 3. Cerinte laborator. 4. Tema. 1. Ob

Paradigme de programare

Lucrarea 7 Filtrarea imaginilor BREVIAR TEORETIC Filtrarea imaginilor se înscrie în clasa operaţiilor de îmbunătăţire, principalul scop al acesteia fi

-

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Programarea şi utilizarea calculatoarelor

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Microsoft PowerPoint - Curs_TPI_22_v01.ppt

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Metode de programare Proiectarea algoritmilor

Facultatea de Automatică și Calculatoare

Microsoft Word - CarteC.doc

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

Proiectarea Algoritmilor

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Ministerul Educatiei, Cercetarii si Tineretului Grup Scolar Gh. Asachi Galati Proiect pentru obtinerea certificatului de competente profesionale Speci

Cursul 14 Mulţimea lui Mandelbrot Mulţimile şi funcţiile cu caracter excepţional (mulţimea lui Cantor, insula lui Koch, funcţiile lui Weierstrass şi T

Diapositive 1

Slide 1

Laborator 3

Slide 1

/*

Declararea variabilelor

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Secţiunea 9-10 avansaţi Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 TEXT 100 puncte Un text este format din una sau mai multe propoz

PROGRAMARE ORIENTATA PE OBIECTE

Facultatea de Matematică Anul II Master, Geometrie Algebrică Mulţimi algebrice ireductibile. Dimensiune 1 Mulţimi ireductibile Propoziţia 1.1. Fie X u

2

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Update firmware aparat foto Mac Mulţumim că aţi ales un produs Nikon. Acest ghid descrie cum să efectuaţi acest update de firmware. Dacă nu aveţi încr

CAPITOLUL I

Cursul 12 (plan de curs) Integrale prime 1 Sisteme diferenţiale autonome. Spaţiul fazelor. Fie Ω R n o mulţime deschisă şi f : Ω R n R n o funcţie de

L7

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

Microsoft Word - CarteC.doc

Microsoft PowerPoint - ARI_R_c9-10_IP_part2 [Compatibility Mode]

Cursul 1 1. Introducere Corpul numerelor complexe Dezvoltarea istorică a gândirii matematice a urmărit îndeaproape evoluţia ideii de număr. Această ev

Secţiunea 5-6 începători Concurs online de informatică Categoria PROGRAMARE PROBLEMA puncte PERIODIC Se citește un număr natural nenul N. Se ump

Curs 6: Clasificarea surselor de informatii - Clasificarea Bayes Naiva. Modelul Bernoulli

Paradigme de Programare

LUCRAREA NR

G.I.S. Curs 3

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Transcriere:

Structuri de date pentru partiţii de mulţimi O partiţie finită a unei mulţimi nevide S este o mulţime finită de submulţimi ale lui S: {S 1, S 2,..., S n P(S) care satisface condiţiile următoare: S i 0 pentru toţi 1 i n, S 1 S 2... S n = S, S i S j = dacă 1 i j n. Rezultă că, pentru fiecare x S există o singură submulţime S i astfel încât x S i. Vom desemna această submulţime cu S x. O mulţime de reprezentanţi a unei partiţii {S 1, S 2,..., S n este o submulţime {x 1, x 2,..., x n a lui S, astfel încât x i S i pentru toţi 1 i n. Presupunem că S este o mulţime de valori de tip E (adică A E), şi că putem testa egalitatea a două valori a, b E cu a == b. Vom prezenta două implementări ale unei structuri de date abstracte DSet<E> ale cărei instanţe reprezentă o partiţie S = {S 1,..., S n împreună cu o mulţime de reprezentanţi ai ei, şi permite efectuarea operaţiilor următoare E findset(e x) returnează reprezentantul submulţimii S i pentru care x S i. void makeset(e x) pentru x S, modifică instanţa curentă într-o reprezentare a partiţiei S = {S 1, S 2,..., S m, {x a mulţimii S {x. void s_union(e x,e y) pentru x, y S, modifică instanţa curentă încât să reprezinte partiţia (S {S x, S y ) {S x S y a mulţimii S. O metodă utilă care se poate adăuga la DSet<E> este void showsubsets(); care afişează elementele fiecărei submulţimi pe câte un rând, separate de spaţiu. Implementarea cu liste simplu înlănţuite Fiecare submulţime S i a partiţiei este reprezentată ca o listă de noduri simplu înlănţuite, unde nodul fiecărui element x S are structura (ca template C++) 1

struct ListNode<E> { E e; // continutul nodulul; are valoarea x ListNode<E>* next; // link spre nodul urmator din S i ListNode<E>* repr; // link spre primul nod din lista Reprezentantul unei submulţimi S i = {x 1, x 2,..., x p reprezentată ca o listă înlănţuită de astfel de noduri se consideră a fi elementul corespunzător primului nod din listă: e:x 1 next: e:x 2 next: e:x p next:/ Cu această implementare, o partiţiie este reprezentată de o instanţă a structurii (ca template C++) struct LinkedListSet<E> :public DSet<E> { map<e,listnode<e> > nodemap; using LNtype = ListNode<E>*;... unde nodemap reţine maparea elementelor mulţimii S la noduri din liste. O implementare simplă a operaţiilor descrise mai devreme este: void makeset(e x) { nodemap[x]=listnode<e>(x,nullptr,nullptr); nodemap[x].repr = &(nodemap[x]); E findset(e x) { return nodemap[x].repr->e; void s_union(e x,e y) { LNtype ptr1 = &nodemap[x]; LNtype newrepr=ptr1->repr; while (ptr1->next!= nullptr) ptr1 = ptr1->next; ListNode<E>* ptr2 = nodemap[y].repr; ptr1->next=ptr2; while(ptr2!=nullptr) { ptr2->repr=newrepr; ptr2=ptr2->next; 2

void showsubsets() { for(auto& p: nodemap) { LNtype ptr = &(p.second); if (p.second.repr == ptr) { for(;ptr!=nullptr;ptr = ptr->next) cout << ptr->e<< ; cout << endl; Implementarea cu o pădure de arbori Fiecare submulţime S i a partiţiei este reprezentată ca un arbore în care nodul fiecărui element x S are structura (ca template C++) struct TreeNode<E> { E e; // continutul nodulul; are valoarea x int rank; // estimare a adancimii arborelui TreeNode<E>* p; // link spre nodul parinte Rădăcina arborelui este singurul nod care se referă la el însuşi prin câmpul p. Reprezentantul unei submulţimi S i = {x 1, x 2,..., x p reprezentată cu un astfel de arbore este elementul corespunzător nodului rădăcină. Cu aceasta implementare, o partiţie este reprezentată de o instanţă a structurii (ca template C++) struct TreeSet<E> :public DSet<E> { map<e,treenode<e> > nodemap;... unde nodemap reţine maparea elementelor mulţimii S la noduri din arbori. O implementare simplă a operaţiilor descrise mai devreme este: void makeset(e x) { nodemap[x]=treenode<e>(x,0); nodemap[x].p = &(nodemap[x]); E findset(e x) { TreeNode<E>* xnod= &nodemap[x]; if(xnod!=xnod->p) xnod->p = &nodemap[findset(xnod->p->e)]; return xnod->p->e; 3

void s_union(e x,e y) { TreeNode<E>* xnod = &nodemap[findset(x)]; TreeNode<E>* ynod = &nodemap[findset(y)]; if (xnod->rank>ynod->rank) ynod->p=xnod; else { xnod->p=ynod; if(xnod->rank==ynod->rank) ynod->rank++; void showsubsets() { set<string> e_set; for(auto& p: nodemap) e_set.insert(p.first); for(string e1 : e_set) { bool b = false; for(string e2 : e_set) if(findset(e2)==e1) { cout << e2 << ; b=true; if(b) cout << endl; 1 Teme de laborator Se consideră dat un fişier text graf.txt în care este memorat un graf ponderat cu mulţimea de noduri {1, 2,..., N şi M muchii. Fişierul graf.txt are structura următoare: prima linie conţine numerele întregi N şi M, separate cu spaţiu; celelalte M linii sunt de forma a b w şi reprezintă muchia de la nodul a la b cu ponderea w, un număr întreg pozitiv. Liniile pentru muchii apar în ordine crescătoare a valorilor ponderilor. De exemplu, un fişier cu conţinutul 5 7 1 5 8 1 4 9 5 4 9 2 5 10 4 2 12 3 1 14 2 3 17 4

reprezintă graful ponderat Folosiţi/implementaţi structura de date descrisă mai devreme pentru a scrie programe C++ care rezolvă problemele următoare: 1. Se citeşte un graf ponderat simplu din fişierul graf.txt şi i se determină componentele conexe. Programul trebuie să afişeze pe rânduri separate nodurile componentelor conexe ale grafului. 2. Se citeşte un graf ponderat simplu şi conex şi se determină un arbore minim de acoperire. Programul trebuie să afişeze muchiile arborelui de acoperire găsit, precum şi suma ponderilor muchiilor sale. 5