Řešení kolizí frekvencí vysílačů

Transkript

Řešení kolizí frekvencí vysílačů
Ř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 - 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.

Více

Stránky, které možná ještě neznáte…

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...

Více

zde.

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/

Více

Sennheiser HDR 170 značky SENNHEISER - 16B6D2

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ý…

Více

Portaflow PF330/PF220 - Micronics Flow Meters UK

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...

Více

2 - IMPROMAT KLIMA

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. ...

Více