Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Potapanje podmornica

[es] :: Art of Programming :: Potapanje podmornica

[ Pregleda: 3747 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

bags

Član broj: 10072
Poruke: 715
*.teol.net.



+2 Profil

icon Potapanje podmornica06.04.2007. u 00:05 - pre 207 meseci
Dobio sam zadatak na faksu koji se u pocetku cinio lagan ali pretvorio se u nocnu moru.

Trebam rasporediti n podmornica razlicitih duzina na tabli kooridnata x,y.

Raspored podmornica treba biti slucajan ali i uspjesno postavljen ako je to moguce.

Ako imam 5x5 tablu i podmornicu duzine 1 ,program treba da je svaki put random postavi na neko polje.
Problemi dolaze tek kada na malu tablu treba postaviti veliki broj podmornica. (tj. kad mi ne ostaje puno praznih polja a i tada treba voditi racuna o slucajnosti).Recimo, ako imam tablu 2x4, dvije podmornice duzine 3 i jednu podmornicu duzine 2 program treba random da ih rasporedi (postoje dva slucaja za resenje).

Sa tim se nekako i moguce izboriti.Ono sto mene muci je recimo:

tabla 2*6 i tri podmornice sa duzinom 4.

Kako provjeravati takve slucajeve?

Inace moj algoritam radi ovako nekako:

1. provjeri da li je ukupna duzina podmornica veca od table
2. sortiraj podmornice po velicini
3. postavi najvecu podmornicu random na tablu
4. postavljaj sledecu (manju) na tablu
5. ako je nemoguce,ponovo tacka 3.

Brzina izvrsavanja i nije toliko losa, kada je tabla dovoljno velika. (Verovatno niko ni nece igrati podmornica tako da su mu 80% polja pokrivena,ali eto resio sam da rijesim korektno zadatak :).

Ima li neko ideju kako postaviti constraint za onaj slucaj gore?
Ima li uopste u teoriji algoritama neki slican problem?

Vjerovatno se moze rjesiti problem dinamickim programiranjem jako brzo,ali ono sto meni muci je randomizacija svega.

Free advice is seldom cheap.
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Re: Potapanje podmornica06.04.2007. u 13:19 - pre 207 meseci
Pa generalno ja bih postavio resenje kao backtracking pa bi posle video da ga prebacim u dinamicko programiranje ...

Opsti algoritam u backtrack formi bi bio nesto poput:

Sortiranje podmornica po nekom redosledu (ovde nije losa ideja da se to uradi u "opadajucem" rasporedu kao sto si vec poceo)

pocetak rekurzije:

za prvu podmornicu u nizu generisi listu validnih pozicija u zavisnosti od stanja na tabli
(listu mozes da generises u random redosledu ili u nekom normalnom redosledu ali da ih posle random biras)
stavi podmornicu na datu poziciju
izbaci je iz niza (pomeri se na sledecu poziciju)
Pozovi rekurziju (skoci na pocetak rekurzije)
vrati podmornicu u niz i probaj sa sledecom pozicijom po redu (ili je opet random izaberi)

terminalni uslov je da si rasporedio sve podmornice ili za datu sekvencu rasporeda k-ta podmornica ima prazanu listu mogucih polozaja ...

ja bih ti preporucio da generisanje liste polozaja i njihov izbor bude ovakav:

generisi listu (niz) polozaja - recimo da ih ima k

uzmi random broj u opsegu 0 - (broj permutacija uredjene k-torke (1,2,3,4,5, ... , k))-1
i datu permutaciju k-torke koristi kao niz indeksa u listu polozaja ...

Malo sam ovo konfuzno napisao, ali ces verovatno razumeti ... ako ti sta nije jasno ili ti treba neki pseudo kod, javi ...

(predlazem da prvo isprobas sa back trackingom pa ako ti resava problem posle to optimizujes da bude dinamicko programiranje ili sta ti vec
radi posao - sto se brzine tice)
 
Odgovor na temu

masetrt
Marko Djurovic
Programer, Omni-Explorer
Beograd

Član broj: 3129
Poruke: 228
195.252.119.*

Sajt: www.vast.com


+2 Profil

icon Re: Potapanje podmornica11.04.2007. u 17:29 - pre 207 meseci
Klasican primer knapsack problema. Postovani link ce te uputiti na opis i nacin resavanja problema:

http://en.wikipedia.org/wiki/Knapsack_problem

Vlaiv-ovo resenje je verovatno prihvatljivo samo sam se u opisu malo izgubio :)
His majesty Grand Duke of Shumadija and Western Pomoravlje
 
Odgovor na temu

[es] :: Art of Programming :: Potapanje podmornica

[ Pregleda: 3747 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.