tema3sd

5

Click here to load reader

Upload: roxana-macarie

Post on 24-Sep-2015

217 views

Category:

Documents


1 download

DESCRIPTION

tema 3

TRANSCRIPT

  • Tema 3 Structuri de date (seria CB) Arbori de partiionare

    Responsabili tema: Emanuela Haller, Irina Mocanu

    Data publicarii: 7.05.2015

    Termenul de predare: 21.05.2015 ora 23:55 Se accepta teme trimise cu penalizare 10 puncte /zi (din max 100 puncte)

    pn la data 24.05.2015 ora 23:55.

    1. Introducere

    Un arbore de partiionare binar a spaiului reprezint o structur de date obinut prin divizarea recursiv a spaiului n semispaii, folosind hiperplane de poziie i orientare cunoscute. Arborele reprezint o subdivizare ierarhic a unui spaiu n dimensional n semispaii convexe. Nodurile interne ale arborelui au asociate hiperplane de partiionare, iar cei doi fii corespund celor dou semispaii. ntr-un spaiu bidimensional, hiperplanul este reprezentat de o dreapt, iar ntr-un spaiu tridimensional, hiperplanul este reprezentat de un plan.

    n literatura de specialitate, acest tip de arbore este referit ca arbore BSP (binary space partitioning) [1]. Arborii

    BSP au fost dezvoltai pentru optimizarea operaiilor n grafica 3D. Structura unui arbore BSP permite accesarea in timp liniar a informaiilor legate de poziionarea obiectelor n scen, cum ar fi ordonarea acestora din perspectiva unui observator.

    n cadrul temei curente, ne vom limita interesul asupra spaiilor bidimensionale, considernd o variant simplificat a arborilor BSP. n acest context, hiperplanele de separaie vor fi reprezentate de drepte, care vor fi definite utiliznd ecuaia dreptei:

    + + = 0 O dreapt : + + = 0 va diviza planul n dou semiplane deschise:

    {1: {(, )| + + < 0}2: {(, )| + + > 0}

    Considernd trei drepte n plan, 1: 1 + 1 + 1 = 0, 2: 2 + 2 + 2 = 0 i 3: 3 + 3 + 3 = 0, acestea pot diviza un plan n apte regiuni = 1,7 . Punctele marcate n Figura 1 ( , = 1,7 ), sunt exemple de puncte din regiunile determinate de cele trei drepte. Fiind date cele trei drepte, cele apte puncte pot fi considerate ca identificatori ai regiunilor formate.

    Figura 1. Divizarea planului pe baza dreptelor d1, d2, d3

    n continuare vom considera N drepte n planul XOY, care definesc M regiuni (definite ca semiplane deschise,

    deci punctele dreptelor de separaie nu fac parte din regiuni). De asemenea, pentru fiecare din cele M regiuni se va furniza

    1

    2

    3

    4

    5

    6

    7

  • un punct n plan, care aparine respectivei regiuni. Astfel, se va construi un arbore de partiionare binar a spaiului. Fiecare nod intern al arborelui va avea asociat una din cele N drepte i va partiiona planul asociat lui n dou semiplane deschise definite de dreapta asociat. Fiecare nod frunz va avea asociat o regiuni definit de restriciile impuse de strmoii respectivului nod.

    Considernd dreapta : + + = 0, aceasta va partiiona planul asociat nodului curent, n dou semiplane:

    {1: {(, )| + + < 0}2: {(, )| + + > 0}

    Fiul stng va avea asociat semiplanul 1, iar fiul drept va avea asociat semiplanul 2. Este necesar s fie respectat aceast convenie pentru implementarea temei.

    Pentru a putea determina crei regiuni i aparine un punct P(x,y), va trebui s traversm arborele, respectnd condiiile impuse de fiecare nod, pn ajungem ntr-o frunz. Regiunea asociat respectivei frunze va fi regiunea cruia i aparine punctul P.

    Vom considera o ordine iniial a celor N drepte (ordine aleatoare). Nodul rdcin al arborelui va avea asociat prima dreapt, i va avea doi fii, conform conveniei de mai sus. La un anumit moment, vom avea un arbore generat de primele i drepte considerate i va trebui s introducem dreapta j n arbore. Fiecare din nodurile frunz ale arborelui curent are asociat o regiune, deci trebuie s decidem care din aceste regiuni trebuiesc partiionate considernd dreapta j. Pentru aceasta, vom traversa arborele cu dreapta j i frunzele n care ajungem vor fi partiionate utiliznd aceast dreapt.

    Presupunem c intenionm s traversm arborele creat cu o dreapt , pentru a determina care din regiunile aflate n frunze pot fi partiionate utiliznd aceast dreapt. Considerm nodul curent r, care are asociat o dreapt . Dac , atunci vom determina de care parte a dreptei se afl dreapta i vom continua parcurgerea doar cu fiul respectiv. Dac , atunci vom continua parcurgerea cu ambii fii ai nodului curent.

    Exist situaii n care o regiune nu poate fi divizat de o anume dreapt, fr a avea relaii de paralelism ntre dreptele suport, dar nu vom considera aceste situaii n cadrul implementrii curente. Considernd aceast limitare, soluia final nu va fi una optim. De asemenea, vom avea frunze care nu vor avea asociat nici o regiune (regiuni create artificial).

    2. Cerin

    Fie N drepte n planul XOY, ce definesc M regiuni i M puncte n plan, fiecare aparinnd uneia din cele M regiuni. Aceste M puncte sunt utilizate pentru a defini identitatea celor M semiplane ( dac punctul cu indicele i va aparine unui plan, acest plan va primi la rndul su indicele i ).

    Se cere s se determine pentru Q puncte, regiunea n care sunt incluse, utiliznd arbori de partiionare binar a spaiului.

    Se vor considera dou moduri de funcionare 1) Arborele de partiionare binar a spaiului este furnizat 2) Arborele de partiionare binar a spaiului trebuie determinat

    Pentru simplificare considerm c dreptele nu sunt paralele cu axele sistemului de coordonate. Se garanteaz c cele M puncte utilizate pentru identificarea regiunilor nu aparin nici uneia dintre cele N drepte.

    Se garanteaz aceeai proprietate i pentru cele Q puncte de interogare. Se garanteaz c nu vor exista dou puncte (in cadrul celor M puncte de identificare), care s fac parte din

    aceeai regiune.

    3. Implementare

    3.1. Rulare

    Programul va fi rulat:

    ./tema3 tip date.in date.out Unde:

    tip indicele modului de funcionare (1/2) date.in fiierul cu date de intrare date.out fiierul cu date de ieire

  • 3.2. Formatul datelor de intrare/ieire

    Formatul fiierului de intrare depinde de modul de funcionare.

    1) Se vor furniza N drepte, M puncte de identificare, arborele BSP i Q puncte de interogare. Arborele va fi furnizat specificndu-se organizarea nodurile utile (care au asociat o dreapt de partiionare). Se presupune o parcurgere n preordine, iar pentru fiecare nod este menionat indexul dreptei asociate ct i 2 valori binare, pentru a specifica existena fiilor stng i respectiv drept.

    2) Se vor furniza N drepte, M puncte de identificare i Q puncte de interogare

    Formatul fiierului de ieire nu depinde de modul de funcionare:

    Se va furniza arborele BSP, utiliznd o parcurgere n postordine. Pentru fiecare nod intern se specific ecuaia dreptei i pentru frunze se specific coordonatele punctului de identificare asociat regiunii respective, ct i indexul regiunii. Dac o frunz nu are asociat o regiune, atunci se va afia irul de caractere null. Se vor furniza regiunile din care fac parte cele Q puncte, preciznd indexul lor.

    Att parametrii ecuaiilor ct i coordonatele punctelor sunt numere ntregi. Indexarea dreptelor i a regiunilor de face de la 0.

    date.in

    1) 2)

    date.out

    3.3 Exemplu

    Considerm exemplul din Figura 2.

    0: = 0 1: + 50 = 0

    Cele dou drepte vor defini 4 regiuni, numerotate 0, 1, 2, 3 (ce corespund regiunilor 0, 1, 2, 3) din Figura 2.

    N 1 1 1 2 2 2 ... M 1 1 2 2 ... 1 2 ... Q 1 1 2 2 ...

    N 1 1 1 2 2 2 ... M 1 1 2 2 ... Q 1 1 2 2 ...

    1 2

    (1,1, 1) (2,2, 2)...((1,1)- 1)...

    ...

  • Figura 2: Divizare plan pe baza dreptelor d0, d1

    Arborele BSP rezultat prin divizarea planului specificat n Figura 2 este redat n Figura 3.

    Figura 3. Arborele BSP obinut pentru divizarea spaiului din Figura 2

    date.in

    1) 2)

    3

    0

    (

    0

    1

    2

    1

    2 1 -1 0 1 1 -50 4 0 25 25 0 50 25 25 50 0 1 1 1 0 0 1 0 0 8 35 5 5 20 40 25 25 40 45 19 3 24 10 2 25 35

    2 1 -1 0 1 1 -50 4 0 25 25 0 50 25 25 50 8 35 5 5 20 40 25 25 40 45 19 3 24 10 2 25 35

  • date.out

    4. Notare

    80 de puncte obinute pe testele de pe vmchecker o 40 de puncte pentru modul 1 de funcionare o 40 de puncte pentru modul 2 de funcionare

    10 puncte: coding style, codul trebuie s fie comentat, consistent i uor de citit (a se vedea [2]). De exemplu, tema nu trebuie s conin:

    o warninguri la compilare o linii mai lungi de 80 de caractere o tab-uri amestecate cu spaii, denumire neadecvat a funciilor sau a variabilelor

    10 puncte: README + comentarii

    Bonus 20 de puncte pentru soluiile ce nu au memory leak-uri (bonusul se va calcula proporional cu numrul de teste trecute)

    O tema care nu va compila se va nota automat cu 0 5. Reguli de trimitere a temelor

    A se vedea i Regulile generale de trimitere i punctare a temelor [3]

    Temele vor fi ncrcate att pe vmchecker (n seciunea Structuri de Date (CB): SD-CB), ct i pe cs.curs.pub.ro, n seciunea aferent temei 3.

    Arhiva cu rezolvarea temei trebuie s fie .zip i s conin: - fiiere surs; fiecare fiier surs creat sau modificat va trebui s nceap cu un comentariu de forma:

    /* NUME Prenume grupa */ - fiier README care s conin detalii despre implementarea temei - fiier Makefile; fiierul pentru make trebui denumit obligatoriu Makefile i trebuie s conin urmtoarele

    reguli:

    o build care va compila sursele i va obine executabilul, cu numele tema3 o clean care va terge executabilele generate

    Arhiva nu trebuie s conin fiiere executabile sau obiect.

    Dac arhiva nu respect specificaiile de mai sus nu va fi acceptat la upload i tema nu va fi luat n considerare.

    Referine [1] http://en.wikipedia.org/wiki/Binary_space_partitioning

    [2] http://ocw.cs.pub.ro/courses/programare/coding-style [3] http://cs.curs.pub.ro/2014/mod/page/view.php?id=4309

    ((0,25)-0)((25,50)-3)(1,1,-50)((25,0)-1)((50,25)-2)(1,1,-50)(1,-1,0) 1 0 2 3 2 0 1 3