LAB 2&3 - Matematica Discreta (Me)

download LAB 2&3 - Matematica Discreta (Me)

of 8

Transcript of LAB 2&3 - Matematica Discreta (Me)

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    1/8

    Universitatea Tehnic a Moldovei

    Catedra Automatica si Tehnologii Informationale

    RAPORTlucrarea de laborator #2TEMA: ALGORITMUL DE CUTARE N ADNCIME SI LARGIME

    V. II

    A ndeplinit: st. gr. C-1!

    "olotchi #adu

    A verificat: $. Marusic

    Chi%inu !&1'

    SCOPUL LUCRRII:

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    2/8

    Studierea algoritmilor de cutare n graf i a diferitor forme de pstrare i prelucrare a datelor.

    Elaborarea procedurii de cutare n adncime si largime.

    SARCINA DE BAZ:

    1. Elaborai procedura cutrii n adncime ntr!un graf arbitrar"

    #. Elaborai un program cu urmtoarele posibiliti$ introducerea grafului n calculator% parcurgerea grafului n adncime% &i'uali'area re'ultatelor la displa( i imprimant.

    1. Elaborai procedura care &a reali'a algoritmul de parcurgere a grafului n lrgime"

    #. )olosind procedurile din lucrrile precedente% elaborai programul care &a permite$

    introducerea grafului n calculator" parcurgerea grafului n lrgime" e*tragerea datelor la displa( i printer.

    CONSIDERAII TEORETICE:

    Structuri de date: liste

    )iecare tip de list definete o mulime de iruri finite de elemente de tipul declarat. +umrul de elementecare se numete lungimea listei poate &aria pentru diferite liste de acelai tip. ,ista care nu conine nici unelement se &a numi &id. Pentru list sunt definite noiunile nceputul% sfritul listei i respecti& primul i

    ultimul element% de asemenea elementul curent ca i predecesorul i succesorul elementului curent. Elementcurent se numete acel unic element care este accesibil la momentul dat.

    Structuri de date :fire de ateptare

    )irele de ateptare -FA% rnd% coad% ir de ateptare se &or folosi pentru a reali'a algoritmul de prelucrare aelementelor listei n conformitate cu care elementele &or fi eliminate din list n ordinea n care au fostincluse n ea -primul sosit ! primul ser&it.

    Operaiile de ba' cu firele de ateptare$

    )ormarea unui )A &id" /erificare dac )A nu este &id"

    Alegerea primului element cu eliminarea lui din )A" 0ntroducerea unei &alori noi n calitate de ultim element al )A.

    Structuri de date: stive

    Sti&a se utili'ea' pentru a reali'a algoritmul de prelucrare a elementelor dup principiul ultimul sosit !primul prelucrat -,0)O.

    Operaiile de ba' cu sti&ele sunt urmtoarele$

    )ormarea unei sti&e &ide" /erificare la &id" Alegerea elementului din topul sti&ei cu sau fr eliminare" 0ntroducerea unui element nou n topul sti&ei.

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    3/8

    Structuri de date -arbori

    Se &a defini o mulime de structuri fiecare din care &a consta dintr!un obiect de ba' numit vrf saurdcina arborelui dat i o list de elemente din mulimea definit% care -elementele se &or numisubarboriai arborelui dat. Arborele pentru care lista subarborilor este &id se &a numi arbore trivial% iar rdcina lui !

    frunz.

    Rdcina arborelui se &a numi tatl &rfurilor care ser&esc drept rdcini pentru subarbori" aceste &rfuri se&or mai numi copiii rdcinii arborelui$ rdcina primului subarbore se &a numi fiul cel mai mare% iar

    rdcina fiecrui subarbore urmtor n list se &a numi frate.Operaiile de ba' pentru arbori &or fi$

    )ormarea unui arbore tri&ial" Alegerea sau nlocuirea rdcinii arborelui" Alegerea sau nlocuirea listei rdcinilor subarborilor" Operaiile de ba' care sunt &alabile pentru liste.

    Algoritmul d !"ut#r $% l"rgim

    Parcurgerea grafului n lrgime% ca i parcurgerea n adncime% &a garanta &i'itarea fiecrui &rf al grafului

    e*act o singur dat% ns principiul &a fi altul. 2up &i'itarea &rfului iniial% de la care &a ncepe cutarea

    n lrgime% &or fi &i'itate toate &rfurile adiacente cu &rful dat% apoi toate &rfurile adiacente cu aceste

    ultime &rfuri .a.m.d. pn &or fi &i'itate toate &rfurile grafului. E&ident% este necesar ca graful s fie

    cone*. Aceast modalitate de parcurgere a grafului -n lrgime sau postordine% care mai este adesea numit

    parcurgere n ordine ori'ontal% reali'ea' parcurgerea &rfurilor de la stnga la dreapta% ni&el dup ni&el.

    Algoritmul de mai 3os reali'ea' parcurgerea n lrgime cu a3utorul a dou fire de ateptare O1i O2.Se vor forma dou fire de ateptare vide O1i O2;

    Introduce rdcina n FA O1;

    WHILE cel puin unul din firele de ateptare O1sau O2nu va fi vid D

    IF O1nu este vid !HE"

    #E$I"

    fiepv%rful din topul FA O1;

    vi&itea& v%rfulpelimin%ndu'l din O1;

    vi&itea& pe toi fiii luipn FA O2( ncep%nd cu cel mai mare;

    E"D

    ELSE

    n calitate de O1se va lua FA O2( care nu este vid(

    iar n calitate de O2se va lua FA vid O1;

    /om nota c procedura parcurgerii grafului n lrgime permite s reali'm arborele de cutare i n acelai

    timp s construim acest arbore. 4u alte cu&inte% se &a re'ol&a problema determinrii unei re'ol&ri sub

    forma &ectorului -a1, a2,... de lungime necunoscut% dac este cunoscut c e*ist o re'ol&are finit a

    problemei.

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    4/8

    Algoritmul pentru ca'ul general este analogic cu cel pentru un graf n form de arbore cu o mic modificare

    care const n aceea c fiecare &rf &i'itat &a fi marcat pentru a e*clude ciclarea algoritmului.

    C"ut#r $% #d&%!im

    ,a cutarea n adncime -parcurgerea unui graf n sens direct% n preordine &rfurile grafului &or fi

    &i'itate n conformitate cu urmtoarea procedur recursi&$

    mai nti va fi vizitat rdcina arborelui q, aoi, dac rdcina arborelui nu este frunz - entru fiecare

    fiu al rdcinii q ne vom adresa recursiv rocedurii de arcur!ere n adncime entru a vizita vrfurile

    tuturor subarborilor cu rdcina ordonate ca fii ai lui q"

    5n ca'ul utili'rii unei sti&e pentru pstrarea drumului curent pe arbore% drum care ncepe din rdcina

    arborelui i se termin cu &rful &i'itat n momentul dat% poate fi reali'at un algoritm nerecursi& de forma$

    Viziteaz rdcina ar)orelui i introdu'o n stiva vid S;

    WHILE stiva Snu este vid D

    BEGIN

    fiep' v%rful din topul stivei S;

    IF fiii v%rfuluipnc nu au fost vi&itai

    !HE" vi&itea& fiul mai mare al lui pi introduce'l n S

    ELSE BEGIN

    elimin v%rfulpdin stiva S

    IFpare frai !HE" vi&itea& pe fratele luipi introduce'l n stiva S

    E"DE"D

    Acest algoritm poate fi modificat pentru a putea fi utili'at la parcurgerea tuturor &rfurilor unui graf arbitrar.

    5n algoritmul de mai 3os se &a presupune c este stabilit o relaie de ordine pe mulimea tuturor &rfurilor

    grafului% iar mulimea &rfurilor adiacente cu un &rf arbitrar al grafului este de asemenea ordonat$

    WHILE va e*ista cel puin un v%rf care nu a fost vi&itat D

    #E$I"

    fiep' primul din v%rfurile nevi&itate;

    vi&itea& v%rfulpi introduce'l n stiva vid S;

    WHILE stiva Snu este vid D

    #E$I"

    fiep' v%rful din topul stivei S;

    IF mv%rfuri ale luipsunt v%rfuri adiacente nevi&itate

    !HE" #E$I"

    fie zprimul v%rf nevi&itat din v%rfurile adiacente cup;

    parcur+e muc,ia (p,z)( vi&itea& v%rful zi introduce'l n stiva S;

    E"D

    ELSE elimin v%rfulpdin stiva S

    E"D

    E"D

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    5/8

    5n ca'ul n care se &a lucra cu un graf cone* arbitrar cu relaia de ordine lips% nu &a mai a&ea importan

    ordinea de parcurgere a &rfurilor. Propunem un algoritm care utili'ea' mai larg posibilitile sti&ei% cea ce

    face programul mai efecti& n sensul diminurii timpului de calcul necesar. 2e e*emplu% acest algoritm n

    &arianta recursi& este pe larg utili'at n programele de selectare global n subdirectori -ca'ul programelor

    anti&irus.

    Introdu n stiv v%rful iniial i marc,ea&'l;

    WHILE stiva nu este vid D

    #E$I"

    e*tra+e un v%rf din stiv;

    IF e*ist v%rfuri nemarcate adiacente cu v%rful e*tras

    !HE" marc,ea&'le i introduce'le n stiv;

    E"D

    Li'ti%gul Progr#mului:

    6include 7conio.89

    6include 7stdio.89

    6include 7stdlib.89

    ::!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    &oid Pre't-

    ; clrscr-"

    ::!!!!!!!!!!!!!!!!!!!!!!!!!!!

    &oid main-

    ;int i%3%?%l%n%s%*%(%8"c8ar c8"

    ::!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Pre't-"

    ,1$static int a@BC@#BC%b@BC"

    clrscr-"

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    6/8

    for-iHB"i7n"iII

    ;

    printf-rF#iJ%iI1"

    scanf-Fi%Ga@iC@BC"

    for-3H1"37nI1"3II

    if-a@iC@3!1CKHB scanf-Fi%Ga@iC@3C"

    else brea?">::!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    for-iHB"i7n"iII b@iCHiI1"

    for-iHB"i7n"iII

    for-3HB"37n"3II

    if-a@iC@3CKHB

    if-b@a@iC@3C!1CKHBGGB7a@iC@3CGGa@iC@3C7Hn b@a@iC@3C!1CHB"

    else goto l#" :: ErorK

    else brea?"

    for-iHB%*HB"*7n"*II

    if-b@*CKHB ;b@BCH*I1" iII">

    if-i91 goto l#" :: ErorK

    *H(HB"

    printf-nnr"

    printf-Parcurgerea in largime $nr"

    printf-n Fd%%b@BC"

    for-iH1"i7n"iII

    ; if-a@b@*C!1C@(CHHB ;*II" (HB" i!!">else ;b@iCHa@b@*C!1C@(C" (II"

    printf- Fd%%b@iC"

    if-iF1LHHB printf-n"

    >

    >

    goto lM"

    l#$printf-nnttt"

    printf-EroareK"

    goto l"

    ::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    lM$printf-nnnr"

    printf-Parcurgerea in adimcime$n"

    iHb@BC!1"3HsH8HB"

    printf-n Fd%%b@BC"

    N8ile-87n!1

    ;?Hi"

    if-a@?C@3CKHB ; printf- Fi%%a@?C@3C"

    iHa@?C@3C!1"

    >

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    7/8

    l1$if-a@?C@3CHHB

    ; if-sHHBlH?I1"

    if-sHH1lH*I1"

    for-*HB"*7n"*II

    for-(HB"(7nI1"(II

    ; if-a@*C@(CHHlGGa@*C@(I1CKHB

    ; printf- Fi%%a@*C@(I1C"iHa@*C@(I1C!1"

    sHB"

    goto lL" >

    if-a@*C@(CHHlGGa@*C@(I1CHHB

    ; sH1"goto l1">

    >

    >

    lL$8II"

    if-8F1LHHB printf-n"

    >

    ::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    l$

  • 8/12/2019 LAB 2&3 - Matematica Discreta (Me)

    8/8

    !Concluzie:Efecuand aceasta lucrare de laborator% am in&atat sa efectuam metodele de repre'entare alegrafului atit in adincime cit si in largime% precum si metodele lui de stocare in memoria calculatorului.4a si la prima lucrare% pentru introducerea datelor am folosit lista de adiacenta% ea fiind cea mai simplametoda de introducere a grafului de la tastatura% care si piermite utili'atorului sa aleaga cu usurinta&irfurile necesare%de asemenea aceasta metoda utili'ea'a si cel mai putin din memoria calculatorului.