{"id":22859876,"url":"https://github.com/harmim/vut-izp-proj3","last_synced_at":"2025-08-23T09:10:02.126Z","repository":{"id":74891469,"uuid":"75243546","full_name":"harmim/vut-izp-proj3","owner":"harmim","description":"Základy programování - Projekt 3 - Jednoduchá shluková analýza","archived":false,"fork":false,"pushed_at":"2017-02-17T03:00:29.000Z","size":61,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-31T08:23:28.771Z","etag":null,"topics":["c","cluster-analysis","doxygen","project","vut"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/harmim.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-01T01:36:11.000Z","updated_at":"2021-11-19T10:55:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"5a006546-e18b-4fca-b778-58898598c895","html_url":"https://github.com/harmim/vut-izp-proj3","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/harmim/vut-izp-proj3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harmim","download_url":"https://codeload.github.com/harmim/vut-izp-proj3/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harmim%2Fvut-izp-proj3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271746301,"owners_count":24813557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cluster-analysis","doxygen","project","vut"],"created_at":"2024-12-13T09:08:19.358Z","updated_at":"2025-08-23T09:10:02.101Z","avatar_url":"https://github.com/harmim.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# izp-proj3\nProjekt 3 - Jednoduchá shluková analýza\n\n## Popis projektu\nVytvořte program, který implementuje jednoduchou shlukovou analýzu, metodu nejvzdálenějšího souseda (angl. complete linkage).\n\nSmyslem projektu není studium shlukových analýz. Pro projekt bude stačit následující popis (zdroj [Wikipedia](https://cs.wikipedia.org/wiki/Shlukov%C3%A1_anal%C3%BDza)): Shluková analýza (též clusterová analýza, anglicky cluster analysis) je vícerozměrná statistická metoda, která se používá ke klasifikaci objektů. Slouží k třídění jednotek do skupin (shluků) tak, že jednotky náležící do stejné skupiny jsou si podobnější než objekty z ostatních skupin.\n\nShlukovou analýzu provádějte na dvourozměrných objektech. Každý objekt je identifikován celým číslem. Objekty jsou uloženy v textovém souboru.\n\nPři implementaci můžete pro vizualizaci a porozumění objektů používat tuto jednoduchou [aplikaci](http://www.fit.vutbr.cz/study/courses/IZP/public/cluster.php), která vykresluje a obarvuje shluky. Reference s popisem metody [zde](http://is.muni.cz/th/172767/fi_b/5739129/web/web/clsrov.html).\n\n## Detailní specifikace\n### Překlad a odevzdání zdrojového souboru\n\nOdevzdání: Program implementujte ve zdrojovém souboru proj3.c. Zdrojový soubor odevzdejte prostřednictvím informačního systému.\n\nPřeklad: Program bude překládán s následujícími argumenty\n```sh\n$ gcc -std=c99 -Wall -Wextra -Werror -DNDEBUG proj3.c -o proj3 -lm\n```\n- Definice makra NDEBUG (argument -DNDEBUG) je z důvodu anulování efektu ladicích informací.\n- Propojení s matematickou knihovnou (argument -lm) je z důvodu výpočtu vzdálenosti objektů.\n\n### Syntax spuštění\nProgram se spouští v následující podobě:\n\n`./proj3 SOUBOR [N]`\n\nArgumenty programu:\n- SOUBOR je jméno souboru se vstupními daty.\n- N je volitelný argument definující cílový počet shluků. N \u003e 0. Výchocí hodnota (při absenci argumentu) je 1.\n\n### Implementační detaily\n#### Formát vstupního souboru\n\nVstupní data jsou uložena v textovém souboru. První řádek souboru je vyhrazen pro počet objektů v souboru a má formát:\n\n`count=N`\n\nkde číslo je počet objektů v souboru. Následuje na každém řádku definice jednoho objektu. Počet řádků souboru odpovídá minimálně počtu objektů + 1 (první řádek). Další řádky souboru ignorujte. Řádek definující objekt je formátu:\n\n`OBJID X Y`\n\nkde OBJID je v rámci souboru jednoznačný celočíselný identifikátor, X a Y jsou souřadnice objektu také celá čísla. Platí 0 \u003c= X \u003c= 1000, 0 \u003c= Y \u003c= 1000.\n\n#### 1. podúkol\nStáhněte si kostru programu proj3.c. Seznamte se s datovými typy a funkcemi. Vaším úkolem je pouze doplnit kód na místech označených komentářem TODO.\n\n#### 2. podúkol\nNačítání vstupního souboru a následný výpis:\n\n1 - Implementujte funkce:\n```c\nvoid init_cluster(struct cluster_t *c, int cap);\nvoid clear_cluster(struct cluster_t *c);\nvoid append_cluster(struct cluster_t *c, struct obj_t obj);\nint load_clusters(char *filename, struct cluster_t **arr);\n```\nFunkce init_cluster slouží pro inicializaci shluku (alokaci požadovaného místa).\n\nFunkce clear_cluster slouží pro odstranění všech objektů ve shluku (dealokaci místa) a reinicializaci shluku s kapacitou 0.\n\nFunkce append_cluster slouží pro přidání objektu na konec shluku.\n\nFunkce load_clusters načítá ze vstupního souboru všechny objekty a ukládá je každý do jednoho shluku. Shluky budou uloženy v poli. Místo pro pole shluků musí funkce alokovat.\n\n2 - Ověřte funkcionalitu na načtení vstupního souboru (pomocí vámi implementované funkce load_clusters) a následném výpisu (pomocí funkce print_clusters):\n\nVstupní soubor objekty\n```\ncount=20\n40 86 663\n43 747 938\n47 285 973\n49 548 422\n52 741 541\n56 44 854\n57 795 59\n61 267 375\n62 85 874\n66 125 211\n68 80 770\n72 277 272\n74 222 444\n75 28 603\n79 926 463\n83 603 68\n86 238 650\n87 149 304\n89 749 190\n93 944 835\n```\nNačtení vstupního souboru a následné vypsání shluků:\n```sh\n$ ./proj3 objekty 20\nClusters:\ncluster 0: 40[86,663]\ncluster 1: 43[747,938]\ncluster 2: 47[285,973]\ncluster 3: 49[548,422]\ncluster 4: 52[741,541]\ncluster 5: 56[44,854]\ncluster 6: 57[795,59]\ncluster 7: 61[267,375]\ncluster 8: 62[85,874]\ncluster 9: 66[125,211]\ncluster 10: 68[80,770]\ncluster 11: 72[277,272]\ncluster 12: 74[222,444]\ncluster 13: 75[28,603]\ncluster 14: 79[926,463]\ncluster 15: 83[603,68]\ncluster 16: 86[238,650]\ncluster 17: 87[149,304]\ncluster 18: 89[749,190]\ncluster 19: 93[944,835]\n```\n\n#### 3. podúkol\nImplementujte všechny ostatní funkce v kostře souboru proj3.c označené komentářem TODO. Výsledný program odevzdejte.\n\n### Příklady vstupů a výstupů\n```sh\n$ cat objekty\ncount=20\n40 86 663\n43 747 938\n47 285 973\n49 548 422\n52 741 541\n56 44 854\n57 795 59\n61 267 375\n62 85 874\n66 125 211\n68 80 770\n72 277 272\n74 222 444\n75 28 603\n79 926 463\n83 603 68\n86 238 650\n87 149 304\n89 749 190\n93 944 835\n```\n```sh\n$ ./proj3 objekty 8\nClusters:\ncluster 0: 40[86,663] 75[28,603] 86[238,650]\ncluster 1: 43[747,938] 93[944,835]\ncluster 2: 47[285,973]\ncluster 3: 49[548,422]\ncluster 4: 52[741,541] 79[926,463]\ncluster 5: 56[44,854] 62[85,874] 68[80,770]\ncluster 6: 57[795,59] 83[603,68] 89[749,190]\ncluster 7: 61[267,375] 66[125,211] 72[277,272] 74[222,444] 87[149,304]\n```\n```sh\n$ valgrind ./proj3 objekty 19\n==8142== Memcheck, a memory error detector\n==8142== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.\n==8142== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info\n==8142== Command: ./proj3 objekty 19\nClusters:\ncluster 0: 40[86,663]\ncluster 1: 43[747,938]\ncluster 2: 47[285,973]\ncluster 3: 49[548,422]\ncluster 4: 52[741,541]\ncluster 5: 56[44,854] 62[85,874]\ncluster 6: 57[795,59]\ncluster 7: 61[267,375]\ncluster 8: 66[125,211]\ncluster 9: 68[80,770]\ncluster 10: 72[277,272]\ncluster 11: 74[222,444]\ncluster 12: 75[28,603]\ncluster 13: 79[926,463]\ncluster 14: 83[603,68]\ncluster 15: 86[238,650]\ncluster 16: 87[149,304]\ncluster 17: 89[749,190]\ncluster 18: 93[944,835]\n==8142== \n==8142== HEAP SUMMARY:\n==8142==     in use at exit: 0 bytes in 0 blocks\n==8142==   total heap usage: 25 allocs, 25 frees, 6,256 bytes allocated\n==8142== \n==8142== All heap blocks were freed -- no leaks are possible\n==8142== \n==8142== For counts of detected and suppressed errors, rerun with: -v\n==8142== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)\n```\n\n## Hodnocení\nNa výsledném hodnocení mají hlavní vliv následující faktory:\n- přesné dodržení implementačních detailů,\n- implementace jednotlivých funkcí,\n- správná práce s pamětí,\n- správný algoritmus shlukování,\n- správné řešení neočekávaných stavů.\n\n## Dokumentace zdrojových kódů\n[Doxygen](http://www.stack.nl/~dimitri/doxygen/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharmim%2Fvut-izp-proj3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharmim%2Fvut-izp-proj3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharmim%2Fvut-izp-proj3/lists"}