10
Ministerul Învăţămîntului a Republicii Moldova Universitatea Tehnică a Moldovei Raport La Disciplina ”Matematica Discreta“ Laboratorul numarul 3-4 Tema :ALGORITMUL DE CĂUTARE ÎN LĂRGIME SI ADÂNCIME A efectuat : Studentul grupei SI-141 Cucu Eugeniu A verificat : 1

LabMD 2 3 Matematica Discreta

Embed Size (px)

DESCRIPTION

Raport Matematica discreta utm

Citation preview

Matematica Discreta

Ministerul nvmntului a Republicii Moldova

Universitatea Tehnic a Moldovei

Raport

La DisciplinaMatematica DiscretaLaboratorul numarul 3-4Tema:ALGORITMUL DE CUTARE N LRGIME SI ADNCIME

A efectuat :Studentul grupei SI-141 Cucu Eugeniu

A verificat : Profesor Veronica Bagrin

Chisinau 2015

1. SCOPUL LUCRRII: Studierea algoritmilor de cutare n graf i a diferitor forme de pstrare i prelucrare a datelor. Elaborarea procedurii de cutare n adncime. Studierea algoritmului de cutare n lrgime; Elaborarea programului de cutare n lrgime.

2. NOTE DE CURSStructuri de date: listeFiecare tip de list definete o mulime de iruri finite de elemente de tipul declarat. Numrul de elemente care se numete lungimea listei poate varia pentru diferite liste de acelai tip. Lista care nu conine nici un element se va numi vid. Pentru list sunt definite noiunile nceputul, sfritul listei i respectiv primul i ultimul element, de asemenea elementul curent ca i predecesorul i succesorul elementului curent. Element curent se numete acel unic element care este accesibil la momentul dat.Structuri de date : fire de ateptareFirele de ateptare (FA, rnd, coad, ir de ateptare) se vor folosi pentru a realiza algoritmul de prelucrare a elementelor listei n conformitate cu care elementele vor fi eliminate din list n ordinea n care au fost incluse n ea (primul sosit - primul servit).Operaiile de baz cu firele de ateptare: Formarea unui FA vid; Verificare dac FA nu este vid; Alegerea primului element cu eliminarea lui din FA; Introducerea unei valori noi n calitate de ultim element al FA.Structuri de date: stiveStiva se utilizeaz pentru a realiza algoritmul de prelucrare a elementelor dup principiul "ultimul sosit - primul prelucrat" (LIFO).Operaiile de baz cu stivele sunt urmtoarele: Formarea unei stive vide; Verificare la vid; Alegerea elementului din topul stivei cu sau fr eliminare; Introducerea unui element nou n topul stivei.Structuri de date - arboriSe va defini o mulime de structuri fiecare din care va consta dintr-un obiect de baz numit vrf sau rdcina arborelui dat i o list de elemente din mulimea definit, care (elementele) se vor numi subarbori ai arborelui dat. Arborele pentru care lista subarborilor este vid se va numi arbore trivial, iar rdcina lui - frunz.Rdcina arborelui se va numi tatl vrfurilor care servesc drept rdcini pentru subarbori; aceste vrfuri se vor mai numi copiii rdcinii arborelui: rdcina primului subarbore se va numi fiul cel mai mare, iar rdcina fiecrui subarbore urmtor n list se va numi frate.Operaiile de baz pentru arbori vor fi: Formarea unui arbore trivial; Alegerea sau nlocuirea rdcinii arborelui; Alegerea sau nlocuirea listei rdcinilor subarborilor; Operaiile de baz care sunt valabile pentru liste.Algoritmul de cutare n lrgimeParcurgerea grafului n lrgime, ca i parcurgerea n adncime, va garanta vizitarea fiecrui vrf al grafului exact o singur dat, ns principiul va fi altul. Dup vizitarea vrfului iniial, de la care va ncepe cutarea n lrgime, vor fi vizitate toate vrfurile adiacente cu vrful dat, apoi toate vrfurile adiacente cu aceste ultime vrfuri .a.m.d. pn vor fi vizitate toate vrfurile grafului. Evident, este necesar ca graful s fie conex. Aceast modalitate de parcurgere a grafului (n lrgime sau postordine), care mai este adesea numit parcurgere n ordine orizontal, realizeaz parcurgerea vrfurilor de la stnga la dreapta, nivel dup nivel.Algoritmul de mai jos realizeaz parcurgerea n lrgime cu ajutorul a dou fire de ateptare O1 i O2.Se vor forma dou fire de ateptare vide O1 i O2;Introduce rdcina n FA O1;WHILE cel puin unul din firele de ateptare O1 sau O2 nu va fi vid DOIF O1 nu este vid THENBEGINfie p vrful din topul FA O1;viziteaz vrful p eliminndu-l din O1;viziteaz pe toi fiii lui p n FA O2, ncepnd cu cel mai mare;ENDELSE n calitate de O1 se va lua FA O2, care nu este vid, iar n calitate de O2 se va lua FA vid O1;Vom nota c procedura parcurgerii grafului n lrgime permite s realizm arborele de cutare i n acelai timp s construim acest arbore. Cu alte cuvinte, se va rezolva problema determinrii unei rezolvri sub forma vectorului (a1, a2,...) de lungime necunoscut, dac este cunoscut c exist o rezolvare finit a problemei.Algoritmul pentru cazul general este analogic cu cel pentru un graf n form de arbore cu o mic modificare care const n aceea c fiecare vrf vizitat va fi marcat pentru a exclude ciclarea algoritmului.Cutare n adncimeLa cutarea n adncime (parcurgerea unui graf n sens direct, n preordine) vrfurile grafului vor fi vizitate n conformitate cu urmtoarea procedur recursiv: mai nti va fi vizitat rdcina arborelui q, apoi, dac rdcina arborelui nu este frunz - pentru fiecare fiu p al rdcinii q ne vom adresa recursiv procedurii de parcurgere n adncime pentru a vizita vrfurile tuturor subarborilor cu rdcina p ordonate ca fii ai lui q.n cazul utilizrii unei stive pentru pstrarea drumului curent pe arbore, drum care ncepe din rdcina arborelui i se termin cu vrful vizitat n momentul dat, poate fi realizat un algoritm nerecursiv de forma:Viziteaz rdcina arborelui i introdu-o n stiva vid S;WHILE stiva S nu este vid DOBEGINfie p - vrful din topul stivei S;IF fiii vrfului p nc nu au fost vizitaiTHEN viziteaz fiul mai mare al lui p i introduce-l n SELSE BEGINelimin vrful p din stiva SIF p are frai THEN viziteaz pe fratele lui p i introduce-l n stiva SENDENDAcest algoritm poate fi modificat pentru a putea fi utilizat la parcurgerea tuturor vrfurilor unui graf arbitrar. n algoritmul de mai jos se va presupune c este stabilit o relaie de ordine pe mulimea tuturor vrfurilor grafului, iar mulimea vrfurilor adiacente cu un vrf arbitrar al grafului este de asemenea ordonat:WHILE va exista cel puin un vrf care nu a fost vizitat DOBEGINfie p - primul din vrfurile nevizitate;viziteaz vrful p i introduce-l n stiva vid S;WHILE stiva S nu este vid DOBEGINfie p - vrful din topul stivei S;IF m vrfuri ale lui p sunt vrfuri adiacente nevizitateTHEN BEGINfie z primul vrf nevizitat din vrfurile adiacente cu p;parcurge muchia (p,z), viziteaz vrful z i introduce-l n stiva S;ENDELSE elimin vrful p din stiva SENDENDn cazul n care se va lucra cu un graf conex arbitrar cu relaia de ordine lips, nu va mai avea importan ordinea de parcurgere a vrfurilor. Propunem un algoritm care utilizeaz mai larg posibilitile stivei, cea ce face programul mai efectiv n sensul diminurii timpului de calcul necesar. De exemplu, acest algoritm n varianta recursiv este pe larg utilizat n programele de selectare global n subdirectori (cazul programelor antivirus).Introdu n stiv vrful iniial i marcheaz-l;WHILE stiva nu este vid DOBEGINextrage un vrf din stiv;IF exist vrfuri nemarcate adiacente cu vrful extrasTHEN marcheaz-le i introduce-le n stiv;END3. SARCINA DE BAZ1. Elaborai procedura cutrii n adncime ntr-un graf arbitrar (vezi anexaA si B);2. Elaborai procedura care va realiza algoritmul de parcurgere a grafului n lrgime;3. Elaborai un program cu urmtoarele posibiliti: introducerea grafului n calculator, parcurgerea grafului n adncime, parcurgerea grafului n lrgime; vizualizarea rezultatelor la display i imprimant.

ANEXA4.Listing-ul programului

#include #include #include #include

using namespace std;int tab_a[10][10],c_a[20],viz_a[10],tab_l[10][10],c_l[20],viz_l[10];int n,m,prim_a,ultim_a,varf_a,prim_l,ultim_l,varf_l,nd;

void bf_recursiv() //parcurgerea in latime{ int k; if(prim_l