Řešení kolizí frekvencí vysílačů
Transkript
Řešení kolizí frekvencí vysílačů Semestrální práce z C Jméno: Martin Kružej Osobní číslo: A14B0292P E-mail: [email protected] chybí obsah 1 Zadání Cílem zadání je vyřešit kolizi frekvenci vysílačů přiřazením jiných frekvencí těmto vysílačům. Více podrobností viz. Programování v C/Semestrálka/Řešení kolizí frekvencí vysílačů. aspoň jste sem mohl dát odkaz 1 2 Analýza úlohy Ze zadání vyplývá, že jde o grafový problém. Vysílače si můžeme představit jako vrcholy grafu s nastavenou frekvencí. Pokud jsou vrcholy příliš blízko u sebe, jejich frekvence kolidují a je třeba jejich frekvenci změnit. Můžeme si je představit jako sousedy v grafu, spojíme je hranou (viz. obrázek 2 v zadání). Takových to vrcholů může být ale kolem jediného spousta. Změněním jedné frekvence ovlivníme frekvence dalších sousedů vrcholu. Máme tedy dva základní problémy - jak graf reprezentovat a jak sestavit algoritmus pro nastavení frekvencí tak, aby žádná nekolidovala. 2.1 Reprezentace grafu Graf se dá reprezentovat mnoha způsoby. Základní dvě řešení jsou matice sousednosti a seznam sousednosti. Je třeba brát ohled na paměťovou a časovou náročnost. Matice sousednosti nabývá při větším počtu vrcholů velké velikosti. Navíc obsahuje spoustu neužitečných 0 a zbytečně tak zaobírá příliš místa v paměti. Seznam sousedů naopak obsahuje pouze položky vrcholů a jejich sousedy. Seznam sousednosti je často implementován jako spojový seznam. Vzhledem k těmto výhodám jsem se přiklonil k seznamu. 2.2 Algoritmus obarvování grafu Prohledávání grafu a změna jeho frekvencí je známý problém tzv. obarvování grafu (viz. obrázek 3 v zadání). V zadání je ukázán spolehlivý algoritmus. Využívá zásobníku pro rozhodnutí jaký vrchol bude prohledáván. V základu prohledává všechny vrcholy, ale zároveň prochází jejich sousedy a všechny neobarvené vrcholy vkládá do zásobníku. Nejde samozřejmě o jediný algoritmus, ale není příliš složitý a nevyžaduje na svoji implementaci nic náročného. Teď stačí, abychom si barvu představili jako frekvenci a obarvením grafu získáme naše řešení. 2 3 Popis implementace 3.1 Seznam sousednosti V analýze jsem se přiklonil k seznamu sousednosti jako reprezentaci grafu. Jeho implementace je nejčastěji spojový seznam a tento program není žádnou výjimkou. Hlavičkový soubor graph.h je tento seznam implementován. Využívá struktury graph node, která představuje vrchol grafu. Obsahuje ukazatel na vysílač, další vrchol v grafu a ukazatel na své sousedy. Tito sousedé jsou také spojovým seznamem. Samotná struktura graph je velice jednoduchá obsahuje pouze ukazatel na hlavičku spojového seznamu. 3.2 Zásobník Zásobník je hojně používáná datová struktura. Funguje na principu LIFO (last in, first out). Jeho nejdůležitější funkce jsou pop a push. V programu je využíván jako součást algoritmu obarvování grafu. Implementace této datové struktury byla probírána na cvičení a zdrojový kód zásobníku je použit odtud. Jeho deklarace je v hlavičkovém souboru stack.h. 3.3 Reprezentace dat Vysílače a frekvence mají své vlastní hlavičkové soubory - transmitter.h a frequence.h. 3.3.1 Vysílače V hlavičkovém souboru transmitter.h se nachází deklarace funkcí a datových struktur pro ukládání vysílačů. Struktura transmitter obsahuje položky: index vysílače, x-ovou souřadnici, y-ovou souřadnici a barvu (frekvenci) vysílače. Pro načtení dat je použit spojový seznam. Struktura node t je položkou spojového seznamu vysílačů. Obsahuje samotný vysílař a ukazatel na další položku v seznamu. Při načítání dat ze vstupního souboru se vysílače ukládají do tohoto seznamu, abychom s nimi mohli dál pracovat. Až po načtení všdch vysílačů jsou načteny do grafu, aby vytvořily vrcholy v grafu. 3.3.2 Frekvence V hlavičkovém souboru frequence.h se nachází deklarace funkcí a datových struktur pro ukládání frekvencí. Struktura node f obsahuje položky: index frekvence a hodnotu frekvence. Pro načtení dat je také použit spojový seznam. Struktura node f je položkou spojového seznamu frekvencí. Obsahuje samotnou frekvenci a ukazatel na další položku v seznamu. Při načítání dat ze vstupního souboru jsou frekvence načteny do tohoto seznamu. Dál se již nikam neukládají, takže s tímto seznamem potom pracujeme pro získání frekvencí a jejich hodnot. 3.4 Main Ve spustitelném souboru programu main.c se pracuje se vstupním parametrem z příkazové řádky, načítají se data do datových struktur a provedou se veškeré algoritmy. 3 3.4.1 Vytvoření sousedů Algoritmus na vytvoření sousedů má hlavičku: void make neighbors(graph *graph, unsigned int radius) Tento algoritmus projde všechny vrcholy a spočítá vzdálenost mezi nimi. Pokud je vzdálenost kolizní, vytvoří mezi takovými vrcholy hranu. 3.4.2 Obarvení grafu Algoritmus na obarvení grafu má hlavičku: int color node(graph node *node, node f *head f ) Tento algoritmus byl vytvořen dle zadání a tak ve svých krocích dělá přesně to, co je o tomto algoritmu popsáno v zadání. Jeho návratová hodnota je 0, pokud obarvil všechny vrcholy nebo 3, pokud úloha nemá řešení. Pro zjištění barvy vrcholu využívá další funkci color node, která vrací barvu vrcholu nebo 3, pokud nevyzbyla barva. 4 4 Uživatelská příručka Pro spuštění programu je nutné ho nejprve přeložit. Pro přeložení slouží soubory Makefile a Makefile.win. Pomocí nástroje make se poté program přeloží. Uživatelé Windowsu musejí mít nainstalovaný C překladač gcc. Vznikne spustitelný exe soubor freq.exe. Vhodnější je spouštět ho z příkazové řádky příkazem: freq.exe <soubor-s-vysílači> Symbol <soubor-s-vysílači> je soubor s informaci o frekvencích a vysílačích. Je to jediný parametr, který je vyžadován a nutný pro správných chod programu. Při nezadání žádného parametru nebo více než jednoho program vypíše chybové hlášení. Správný vstup, jež program očekává, vypadá např. takto: freq.exe vysilace-1000.txt Pokud jsou parametry v souboru správně zadány (viz. zadání), program data zpracuje a jako výsledek vypíše na obrazovku vrcholy v grafu s přiřazenými frekvencemi. Pokud nenalezl řešení, tak vypíše chybové hlášení. Nic jiného program neudělá a nic dalšího by se od něj nemělo očekávat. 5 5 Závěr Program splňuje všechny požadavky zadání. Algoritmus probíhá v přijatelném čase. Program obsahuje prostor pro vylepšení. Spojové seznamy nejsou implementovány nejlépe a jsou v programu použity třikrát, pokaždé vytvářející novou datovou strukturu. Žádoucí by bylo, kdyby se spojový seznam implementoval obecněji tak, aby na zavolání jedné metody vracel např. pointer na začátek seznamu a nebyl určen jen a pouze pro ukládání určitého pointeru a žádného jiného. V průběhu semestrální práce se vyskytlo několik problémů. Pouze se základní kontrolou překladače se člověku často stane, že se přehlídne a program dělá něco jiného, nebo nedělá vůbec nic a spadne (to se stávalo častěji). Algoritmy nebyly to nejtěžší na této práci, spíše to byl boj s jazykem než se zadáním. Samotnou kapitolu tvoří práce s pamětí, která si vyžádala několik dalších dní po dokončení aplikace. 6
Podobné dokumenty
Jidoka - Educom
• JIDOKA je primárně zaměřena na
zabudování kvality do procesu.
• Neméně důležitými přínosy Jidoky jsou
však i růst produktivity práce ve spojení
s její humanitou.
Stránky, které možná ještě neznáte…
www.omko.cz/?uid=5a11d31ccdb2061f&lg=cz&idm=katalog&sub=katalog&subidm=BEZ
Internetové rádio, o kterém se nedávno psalo v RR, se dá koupit v Brně u firmy Omko, která
zastupuje firmu Technisat. Jedn...
zde.
12. 6.2009 ČT1 v 18:00 pořad Události v regionech - Digitalizace na Ještědu
(13. minuta 49. sekunda) http://www.ceskatelevize.cz/ivysilani/209411000140612udalosti-v-regionech-praha/
Sennheiser HDR 170 značky SENNHEISER - 16B6D2
Na integrovaným nošení lanyardem a pro připevnění s hudebního přenosná Luxusní sluchátka
možnosti jeho krku přehrávače. Silné K reprodukci systém překvapivě napomáhá firmy Sennheiser
patentovaný…
Portaflow PF330/PF220 - Micronics Flow Meters UK
Elektronika Portaflow je uložena v specificky navrhnutém pouzdru, které včleňuje grafický displej, blok tlačítek, snímač
a připojení výstupního příslušenství. Programování jednotky probíhá zvolením...
2 - IMPROMAT KLIMA
OFF TIMER - viz str. 7
Použijte tohoto časovače k vypnutí klimatizační jednotky. Funkce časovače je spuštěná a jednotka se po
stanovené době vypne. OFF TIMER může být nastaven až 24 hodin dopředu.
...