Sunteți pe pagina 1din 5

Proiectarea Algoritmilor

Tema 2
Dat publicare: 05.04.2015
Deadline soft: 23.04.2015
Dat Actualizare: 13.04.2015

1. Problema 1 - K-Colorare
Prima problem este o reformulare a unei probleme clasice, cu importante aplicaii in practic:
problema colorrii grafurilor [0], [1].

1.1 Enun
Fie un graf cu N noduri si M muchii. Considernd c avem la dispoziie C culori, dorim s asociem
fiecrui nod o culoare astfel inct pentru oricare dou noduri vecine s atribuim o culoare diferit.
n plus, atam un cost pentru orice combinaie ntre culorile a dou noduri adiacente. Se cere
determinarea unei colorri valide avnd costul total minim, respectiv afiarea unui mesaj de eroare
in cazul care colorarea nu este posibil.

1.2 Aplicaii practice


Multe probleme intlnite in practic se pot reduce la o instan a problemei colorrii grafurilor.
Un exemplu generic este problema planificrii n timp a unor task-uri. Adesea, alegerea algoritmului
trebuie s in cont de o serie de restricii: o penalizare pentru utilizarea simultan a unei resurse
(de exemplu, numrul de task-uri care pot fi planificate in acelai timp), costuri pentru o anumit
ordine aleas ntre task-uri, etc.
De exemplu, o optimizare important realizat de compilator este alocarea valorilor utilizate des pe
regitrii procesorului. [2] Aceast problem poate fi modelat ca o instan a problemei colorrii
unui graf: considerm ca fiecare nod reprezint o valoare, respectiv fiecare registru o culoare. Avem
muchie intre doua valori daca nu putem sa le salvm simultan in acelai registru.
Dei pe cazul general problema este NP-complet, solutiile intalnite in practic exploateaz natura
specific a datelor problemei (e.g.: [3]) pentru a deriva algoritmi polinomiali sau algoritmi care s
aproximeze eficient rspunsul optim. La evaluarea temei, vom ine cont de implementrile
deosebite, pentru acordarea unui punctaj suplimentar.
[0] http://en.wikipedia.org/wiki/Graph_coloring
[1] http://cgm.cs.mcgill.ca/~godfried/teaching/dm-reading-assignments/Map-Graph-Coloring.pdf
[2] http://www.lighterra.com/papers/graphcoloring/
[3] http://en.wikipedia.org/wiki/Interval_graph

1.3 Format date intrare/ieire


Soluia va citi datele de intrare din fiierul kcol.in i va scrie rezultatul n fiierul kcol.out.

1.3.1 Format intrare:


Pe prima linie se afl 3 numere separate prin spaiu N (numrul de noduri n graf), M
(numrul de muchii n graf), C (numrul maxim de culori disponibile)
Pe urmtoarele M linii se afl perechi de numere (x1, x2) ce reprezint nodurile ntre care
exist o muchie.
Urmeaz o linie goal.
Pe urmtoarele C * (C - 1) / 2 linii se afl triplete de numere (C1, C2, cost) ce reprezinta
costul asociat utilizarii culorilor C1 i C2 n 2 noduri adiacente.
Restricii intrare:
0 < N <= 30
0 <= M <= N * (N - 1) / 2
0 < C <= 10
0 <= x1, x2 < N

1.3.2 Format ieire:


Pe prima linie se afl un numr MinCost ce reprezinta costul minim obinut.
Pe urmtoarele N linii se afl perechi de numere (Xi, Ci) ce reprezint indicele culorii (Ci)
asignat nodului Xi.
Daca sunt prea puine culori disponibile, fiierul de ieire va conine doar o singur linie,
cu valoarea -1.
Dac exist mai multe soluii, se va afia una dintre ele.

Intrare

Ieire

553
01
04
12
23
34

8
00
11
20
31
42

011
022
123

Graful are 5 noduri si 5 muchii, exist maxim 3 culori


disponibile.
Costul utilizarii culorii 0 alturi de culoarea 1 este 1.
Costul utilizarii culorii 0 alturi de culoarea 2 este 2.
Costul utilizarii culorii 1 alturi de culoarea 2 este 3.

Intrare 2

Ieire 2

332
01
02
12

-1

Soluia are un cost minim posibil


de 8.
Nodul 0 are culoarea 0.
Nodul 1 are culoarea 1.
Nodul 2 are culoarea 0.
Nodul 3 are culoarea 1.
Nodul 4 are culoarea 2.
Costul este obtinut astfel:
Intre nodurile 0 si 1, costul este 1.
Intre nodurile 1 si 2, costul este 1.
Intre nodurile 2 si 3, costul este 1.
Intre nodurile 3 si 4, costul este 3.
Intre nodurile 0 si 4, costul este 2.
2+3+1+1+1=8

0 1 100
Acest exemplu contine un graf complet
cu 3 noduri, avnd la dispozitie 2 culori
distincte.

2.4 Limite de timp


C++: 0.5 secunde

Java: 3.0 secunde

Numrul de culori disponibile este prea mic pentru a


putea satisface restrictiile problemei, prin urmare
outputul este -1.

2.

Problema 2 - Expoziie de flori

2.1 Enun
tefania organizeaz o expoziie de flori n toate parcurile din Bucureti. Cum numrul ateptat de
persoane este foarte mare, ea vrea ca fiecare alee din fiecare parc s poat fi traversat doar ntrun singur sens pe durata expoziiei. Mai mult, din fiecare intersecie a aleilor sau punct de acces al
parcului trebuie s existe un numr par de alei pe care s poi s le urmezi.
Cum tefania este ocupat cu aspectul cromatic, v roag pe voi, studeni pasionai la Calculatoare,
s gsii orientarea corect a aleilor.

2.2 Cerin:
Se d un graf neorientat asupra cruia voi trebuie s modificai toate muchiile n arce i n plus la
final gradul extern al fiecrui nod trebuie s fie par. Realizai aceast orientare dac este posibil.

2.3 Format date intrare/ieire


Soluia va citi datele de intrare din fiierul expozitie.in i va scrie rezultatul n fiierul expozitie.out.

2.3.1 Format intrare:


Pe prima linie se afl un numar N (numrul de noduri n graf)
Pe urmtoarele linii se afl perechi de numere naturale x y cu semnificaia c exist muchie
de la x la y.
2.3.2 Format ieire:
Se vor scrie pe cte o linie perechi de numere de forma i j semnificnd faptul c muchia [i, j]
a devenit arcul (i, j), orientat de la i la j.
Dac operaia de orientare nu este posibil se va scrie mesajul Imposibil.
Restricii si precizri:
0 < N <= 5000
0 <= x, y < N
Numrul de muchii ale grafului <= 100000
Graful nu este neaprat conex.
Ordinea de scriere a arcelor nu conteaz.
Dac exist mai multe soluii, se va afia una dintre ele.

Intrare

Ieire

4
01
12
23
30

01
03
21
23

Graful are 4 noduri i 4


muchii.

Aceasta este o posibil reprezentare. Exista 2 arce de la nodul 0 si 2


arce de la nodul 2.

2.4 Limite de timp


C++: 0.15 secunde

Java: 0.3 secunde


Format arhiv i testare
Temele pot testate automat pe vmchecker - acesta suport temele rezolvate in C/C++ i Java.
Dac dorii s realizai tema n alt limbaj trebuie s trimitei un e-mail lui Traian Rebedea
(traian.rebedea@cs.pub.ro) n care s i cerei explicit acest lucru.
Arhiva cu rezolvarea temei trebuie sa e format zip, cu extensia .zip i s conin n rdcina
acesteia:
Fiierul/ierele surs
Fiierul Makele
Fiierul README
Fiierul pentru make trebuie denumit obligatoriu Makefile i trebuie s conin
urmtoarele reguli:
build-p1, care va compila sursele coresponzatoare primei probleme
build-p2, care va compila sursele coresponzatoare celei de a doua probleme
run-p1, care va rula executabilul pentru problema 1
run-p2, care va rula executabilul pentru problema 2
clean, care va terge executabilele generate
Atentie! Numele regulilor trebuie s fie exact cele de mai sus, n special cele de run. Absena sau
denumirea diferit a acestora va avea drept consecin obinerea a 0 puncte pe testele echivalente
problemei rezolvate de regula respectiv.
Atenie! Pentru cei care folosesc C/C++ este permisa compilarea cu optiuni de optimizare a codului
(O1,O2, etc.). Versiunea compilatorului de g++ de pe vmchecker este 4.7.2.

S-ar putea să vă placă și