Skip to main content Link Search Menu Expand Document (external link)

Pohlepni algoritmi

Pohlepni algoritam (eng. greedy algorithm) konstruira rješenje problema tako da uvijek odabire izbor koji u ovom trenutku izgleda najbolje. Pohlepni algoritam nikada ne povlači svoje odabire, već izravno konstruira konačno rješenje. Zbog toga su pohlepni algoritmi vrlo učinkoviti. Poteškoća u dizajniranju pohlepnih algoritama je pronaći pohlepnu strategiju koja uvijek proizvodi optimalno rješenje problema. Lokalno optimalni izbori u pohlepnom algoritmu također bi trebali biti globalno optimalni. Često je teško tvrditi da pohlepni algoritam radi.

Zadatak 1: Problem s kovanicama

Razmatramo problem u kojem nam je dan skup kovanica ${c_1, c_2, c_3,…,c_k}$ i naš je zadatak oblikovati svotu novca $n$, pritom svaku kovanicu možemo koristiti koliko kod puta želimo. Koji je minimalan broj potrebnih kovanica?

Na primjer zadane su kovanice : ${1, 2, 5, 10, 20, 50, 100, 200}$. Zadatak je s pomoću danih kovanica kreirati iznos $n$

Napišite program koji kao ulaz prima cijeli broj $n$ a kao rješenje ispisuje kovanice s pomoću koji se može kreirati broj $n$, cilj programa je koristiti najmanji mogući broj kovanica, odnosno pohlepni pristup.

Input: Cijeli broj $n$ $(1 <= n <= 10000)$ koji označava traženu sumu.

Output: Lista vrijednosti na kovanicama ${c_1, c_2, c_3,…,c_k}$ na kovanicama.

Input:

530

Output:

200 200 100 20 10

Zadatak 2: Kompresija podataka

Kreirajte program koji pretvara uneseni zapis slova u šifrirani zapis 0 i 1.

character codeword
A 00
B 01
C 10
D 11

Input:

AABACDACA

Output:

000001001011001000

Zadatak 3: Zakazivanje aktivnosti

Organiziraj upis predmeta tako da student upiše maksimalan broj predmeta. Predmeti se ne smiju preklapati.

Input: Prvi red sadrži jedan cijeli broj $c$ $(1 \le c \le 10^3)$ - broj testnih slučajeva. Sljedećih $c$ linija sadržava dva cijela broja $t_start$ i $t_end$ koji označuju vrijeme početka i završetka predmeta.

Output: Ispis popisa vremena $t_1$ i $t_2$ za predmete koje će student upisati.

Primjer

Input:

7
8 9
11 13
9 10
8 14
15 17
10 12
8 10

Output:

8 9
9 10
10 12
15 17

Zadaci za vježbu

Sljedeća lekcija: Dinamičko programiranje