Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.20 KB | None | 0 0
  1.  
  2. /**
  3.  * @mainpage Projekt 3
  4.  * @link
  5.  * proj3.h
  6.  * @endlink
  7.  *
  8.  * @file proj3.h
  9.  * @brief Projekt 3 - Jednoduchá zhluková analýza (Single linkage)
  10.  * @author Adam Svenk <xsvenk00@stud.fit.vutbr.cz>
  11.  * @date December 2018
  12.  * @version 1.0
  13.  */
  14.  
  15.  
  16.  /**
  17.   * @brief Štruktúra reprezentujúca objekt so súradnicami.
  18.   */
  19. struct obj_t {
  20.     /** Identifikátor objektu */
  21.     int id;
  22.     /** Súradnica na osi X */
  23.     float x;
  24.     /** Súradnica na osi Y */
  25.     float y;
  26. };
  27.  
  28. /**
  29.  * @brief Štruktúra reprezentujúca zhluk objektov.
  30.  */
  31. struct cluster_t {
  32.     /** Počet objektov v zhluku */
  33.     int size;
  34.     /** Počet objektov, pre ktoré je alokované miesto v zhluku */
  35.     int capacity;
  36.     /** Počet objektov v zhluku */
  37.     struct obj_t *obj;
  38. };
  39.  
  40.  
  41. /**
  42.  * Inicializácia zhluku `c`, alokuje pamúť pre `cap` objektu.
  43.  * Ukazovateľ NULL pri poli objektu znamená kapacitu 0.
  44.  *
  45.  * @post
  46.  * V prípade, že pri alokácii nedôjde k chybe, alokuje pre zhluk `c` pamäť pre `cap` objektov.
  47.  *
  48.  * @param c zluk použitý na inicialzáciu
  49.  * @param cap požadovaná kapacita zhluku
  50.  */
  51. void init_cluster(struct cluster_t *c, int cap);
  52.  
  53. /**
  54.  * Odstránenie všetkých objektov zo zhluku `c` a inicializácia na prázdny zhluk.
  55.  *
  56.  * @post
  57.  * Pamäť alokovaná pre všetky objekty zo zhluku `c` bude uvoľnená.
  58.  *
  59.  * @param c zhluk na odstránenie
  60.  */
  61. void clear_cluster(struct cluster_t *c);
  62.  
  63. /// Hodnota použitá pri realokácii zhluku
  64. extern const int CLUSTER_CHUNK;
  65.  
  66. /**
  67.  * Zmena kapacity zhluku `c` na kapacitu `new_cap`.
  68.  *
  69.  * @pre
  70.  * Kapacita zhluku `c` bude väčšia, prípadne rovná 0.
  71.  *
  72.  * @post
  73.  * V prípade, že pri alokácii nedôjde k chybe, zmení kapacitu zhluku `c` na novú kapacitu `new_cap`,
  74.  *
  75.  * @param c zhluk na zmenu kapacity
  76.  * @param new_cap nová kapacita
  77.  * @return zhluk s novou kapacitou, v prípade chyby NULL
  78.  */
  79. struct cluster_t *resize_cluster(struct cluster_t *c, int new_cap);
  80.  
  81. /**
  82.  * Pridá objekt `obj` na koniec zhluku `c`. Rozšíri zhluk v prípade, že sa objekt do neho nevojde.
  83.  *
  84.  * @pre
  85.  * Počet objektov v zhluku bude väčší, prípadne rovný 0.
  86.  *
  87.  * @post
  88.  * Na poslednú pozíciu zhluku  Na posledni pozici shluku `c` bude objket `obj`,
  89.  * pokud nenastane chyba pri alokaci.
  90.  *
  91.  * @param c shluk pro pridani objektu
  92.  * @param obj objekt, ktery bude pridan do shluku
  93.  */
  94. void append_cluster(struct cluster_t *c, struct obj_t obj);
  95.  
  96. /**
  97.  * Do zhluku `c1` pridá objekty `c2`. Zhluk `c1` bude v prípade nutnosti rozšírený.
  98.  * Objekty v zhluku `c1` budú zoradené vzostupne podľa identifikačného čísla.
  99.  * Zhluk `c2` bude nezmenený.
  100.  *
  101.  * @pre
  102.  * Počet objektov v zhluku `c2` bude väčší, prípadne rovný 0.
  103.  *
  104.  * @post
  105.  * V prípade, že pri alokácii nedôjde k chybe, rozšíri zhluk `c1` o objekty zhluku `c2`.
  106.  *
  107.  * @post
  108.  * Objekty v zhluku `c1` budú vzostupne zoradené podľa ID.
  109.  *
  110.  * @param c1 zhluk, do ktorého budú priadené objekty zhluku `c2`
  111.  * @param c2 zhluk, ktorého objekty budú pridané do zhluku `c1`
  112.  */
  113. void merge_clusters(struct cluster_t *c1, struct cluster_t *c2);
  114.  
  115. /**
  116.  * Odstráni zhluk z poľa zhlukov 'carr'. Pole zhlukov obsahuje 'narr' položiek (zhlukov).
  117.  * Zhluk určený na odstránenie sa nachádza na indexe 'idx'. Funkcia vracia nový počet zhlukov v poli.
  118.  *
  119.  * @post
  120.  * Z poľa zhlukov `carr` odstráni prvok na indexe `idx` a zmenší pole o 1.
  121.  *
  122.  * @param carr pole zhlukov
  123.  * @param narr počet zhlukov v poli
  124.  * @param idx index zhluku na odstránenie
  125.  * @return nový počet zhlukov v poli
  126.  */
  127. int remove_cluster(struct cluster_t *carr, int narr, int idx);
  128.  
  129. /**
  130.  * Počíta Euklidovskú vzdialenosť medzi dvoma objektami.
  131.  *
  132.  * @see https://en.wikipedia.org/wiki/Euclidean_distance
  133.  *
  134.  * @param o1 prvý objekt
  135.  * @param o2 druhý objekt
  136.  * @return Euklidovská vzdialenosť medzi objektami `o1` a `o2`
  137.  */
  138. float obj_distance(struct obj_t *o1, struct obj_t *o2);
  139.  
  140. /**
  141.  * Počíta vzdialenosť dvoch zhlukov.
  142.  *
  143.  * @pre
  144.  * Počet objektov v zhluku `c1` bude väčší ako 0.
  145.  *
  146.  * @pre
  147.  * Počet objektov v zhluku `c2` bude väčší ako 0.
  148.  *
  149.  * @param c1 prvý zhluk 1
  150.  * @param c2 druhý zhluk 2
  151.  * @return vzdialenosť zhlukov `c1` a `c2`
  152.  */
  153. float cluster_distance(struct cluster_t *c1, struct cluster_t *c2);
  154.  
  155. /**
  156.  * V poli zhlukov `carr` veľkosti `narr` hľadá dva najbližšie zhluky.
  157.  * Nájdené zhluky identifikuje indexami v poli `carr`.
  158.  * Nájdené zhluky (indexy v poli `carr`) ukladá do pamäti na adresu `c1`, respektíve `c2`.
  159.  *
  160.  * @post
  161.  * Indexy dvoch najbližších zhlukov budú uložené v premenných `c1` a `c2`.
  162.  *
  163.  * @param carr pole zhlukov
  164.  * @param narr počet zhlukov v poli
  165.  * @param c1 index jedného nájdeného zhluku
  166.  * @param c2 index druhého nájdeného zhluku
  167.  */
  168. void find_neighbours(struct cluster_t *carr, int narr, int *c1, int *c2);
  169.  
  170. /**
  171.  * Zoradenie objektov v zhluku vzostupne podľa ich ID.
  172.  *
  173.  * @post
  174.  * Objekty v zhluku `c` budú zoradené vzostupne podľa ich ID.
  175.  *
  176.  * @param c zhluk na zoradenie
  177.  */
  178. void sort_cluster(struct cluster_t *c);
  179.  
  180. /**
  181.  * Vypísanie zhlukov na stdout (štandardný výstup).
  182.  *
  183.  * @post
  184.  * Objekty zhluku `c` budú vypíané na stdout (štandardný výstup).
  185.  *
  186.  * @param c zhluk určený na výpis
  187.  */
  188. void print_cluster(struct cluster_t *c);
  189.  
  190. /**
  191.  * Zo súboru 'filename' načíta objekty. Pro kazdy objekt vytvori shluk a ulozi
  192.  * jej do pole shluku. Alokuje prostor pro pole vsech shluku a ukazatel na prvni
  193.  * polozku pole (ukalazatel na prvni shluk v alokovanem poli) ulozi do pameti,
  194.  * kam se odkazuje parametr `arr`. Funkce vraci pocet nactenych objektu (shluku).
  195.  * V pripade nejake chyby uklada do pameti, kam se odkazuje `arr`, hodnotu NULL.
  196. */
  197. int load_clusters(char *filename, struct cluster_t **arr);
  198.  
  199. /**
  200.  * Vypís poľa zhlukov. Parameter `carr` je ukazovateľ na prvú položku (zhluk).
  201.  * Vypísanie prvých `narr` zhluku na stdout (štandardný výstup).
  202.  *
  203.  * @post
  204.  * Objekty všetkých zhlukov v poli zhlukov `carr` budú vypísané na stdout (štandardný výstup).
  205.  *
  206.  * @param carr pole zhlukov na výpis
  207.  * @param narr počet zhlukov v poli
  208.  */
  209. void print_clusters(struct cluster_t *carr, int narr);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement