[QGHG-it-dev-list] Zadatak 11 - rekonstrukcija suseda na osnovu podataka o verteksima

Marko Vojinovic vmarko at ipb.ac.rs
Tue Mar 1 03:47:25 CET 2022


Implementirati f-ju koja rekonstruise tabelu suseda datog k-simpleksa:

    bool KSimplex::reconstruct_neighbors_from_vertices( SimpComp *G );

    Input: pointer na simplicijalni kompleks.
    Output: true ako je uspesno izvrsena rekonstrukcija, false ako je doslo do neke greske.

F-ja ima zadatak da popuni tabelu neighbors datog simpleksa, pod pretpostavkom da su vec ispravno popunjeni svi verteksi, neighbors[0], kako za dati simpleks (zvacu ga "simp" u nastavku) tako i za sve ostale k-simplekse u kompleksu G. Algoritam ide otprilike ovako:

(1) Prvo proveriti da li simp pripada kompleksu G --- ako mu ne pripada, prijaviti error pomocu log_report() i vratiti false.

(1) Proci kroz sve k-simplekse u kompleksu G, za svako k>0 (k=0 ne treba jer su verteksi vec popunjeni po pretpostavci). Za svaki k-simpleks "current" uraditi sledece:

(2) Ako je nivo k od current manji od nivoa simp, current->k < simp->k, onda je on potencijalan pod-sused za simp. Ukoliko se svi njegovi verteksi (current->neighbors->elements[0]) sadrze na spisku verteksa za simp (simp->neighbors->elements[0]), povezati ga kao suseda sa simp-om, pomocu f-je add_neighbor(). Ako neki njegov verteks nije istovremeno i verteks od simp, onda nisu susedi.

(3) Ako je nivo k od current jednak nivou simp, current->k = simp->k, onda nisu susedi.

(4) Ako je nivo k od current veci od nivoa simp, current->k > simp->k, onda je on potencijalan nad-sused za simp. Ukoliko se svi verteksi od simp sadrze na spisku verteksa od current, povezati ih kao susede pomocu add_neighbor(). Ako neki verteks od simp nije istovremeno i verteks od current, onda nisu susedi.

F-ja moze da se testira na sledeci nacin. Najpre instanciramo neki kompleks nekom elementarnom seed f-jom (tj. nekom koja se ne oslanja na gornju f-ju). Zatim se verteksi tog kompleksa oboje sa UniqueID bojom, i ispise neighbor tablica nekog izabranog simpleksa u kompleksu pomocu print_compact(). Zatim se rucno obrisu svi k-susedi koji nisu verteksi (k>0) iz neighbor tablice za taj simpleks, pa se ti isti susedi rekonstruisu gornjom f-jom, i nakon toga se ponovo ispise neighbor tablica pomocu print_compact(). Ako se nova tablica poklapa sa starom, f-ja radi kako treba.


:-)
Marko


Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail:    vmarko at ipb.ac.rs




More information about the QGHG-it-dev-list mailing list