banjalukaforum.com

Dobrodošli na banjalukaforum.com
Danas je 21 Jul 2025, 04:26

Sva vremena su u UTC [ DST ]




Započni novu temu Odgovori na temu  [ 4 Posta ] 
Autoru Poruka
 Tema posta: C i Backtracking!!!
PostPoslato: 31 Dec 2002, 16:44 
OffLine
Voajer
Voajer

Pridružio se: 31 Dec 2002, 16:14
Postovi: 8
Pretpostavljam da je pojam "Backtracking" poznat. Sledeci problem bi trebalo rjesiti, pri cemu se to moze rjesiti u programskom jeziku C ili Java. Problem izgleda ovako:

U jednom polju (Array), koji sadrzi npr. 20 int-Brojeva od min do max trebalo bi naci brojeve, cija suma iznosi X. Pri tome je moguce, da se u tom Array-u nalazi vise kombinacija brojeva, koji zajedno sumirani daju X kao rezultat. Zadatak bi bio, naci sve moguce kombinacije brojeva u tom Array-u, koji zajedno sumirani daju X. Pri tome smije jedan broj samo u jednoj kombinaciji biti koristen.

Na kraju bi trebalo pokazati sve kombinacije kao i rest, koji je jos ostao u Array-u, naravno kao kontrolu.

Dodatak:
Ako bi se ovaj zadatak rjesavao u Javi, mogao bi se koristiti Multi-Threading, pri cemu bi trazenje bilo mnogo brze, ako bismo npr. imali Array od 10000 int-Brojeva. Pri tome bi jedan broj iz Array-a tek onda bio udaljen, kad je jedna konkretna kombinacija nadjena. U bas ovdje je interesantno, jer bi se ovdje moralo sinhronizirati izmedju pojedinacnih Thred's.

O.K. Pa, do skorog "rjesenja".


Vrh
 Profil  
 
 Tema posta: Put ka rjesenju
PostPoslato: 21 Jan 2003, 17:45 
OffLine
Početnik
Početnik
Korisnikov avatar

Pridružio se: 17 Jan 2003, 18:24
Postovi: 98
Lokacija: BL
Rjesenje zasnovano na gruboj sili zasnivalo bi se na binarnom broju koji ima onoliko cifara koliko clanova ima niz, gdje 1 znaci da clan ulazi u sumu (a sabiras clanove pocevsi sa jedne "strane" binarnog broja sve dok ne prekoracis zadatu sumu i dok clanovi nisu "potroseni", da ne trosis vrijeme na bespotrebno sabiranje), a 0 da ne ulazi. Svaki put kada nadjes kombinaciju koja daje trazeni zbir, oznacis uzete clanove kao "potrosene". Lose rjesenje, po pitanju vremena izvrsavanja.

Rjesenje zasnovano na backtrack-u je slicno, opet podjes od toga da se prvi clan nalazi u sumi, pa probas sa drugim da se ne ulazi u sumu (druga mogucnost je da ulazi), saberes medjurezultat i ako je prekoracio vracas se unazad jedan korak u rekurziji, ako nije ides dublje u rekurziju, tj. prelazis na sljedeci element u nizu itd. Opet, obiljezavas clanove kao potrosene... Svaki put, kada ulazis u rekurzivni poziv, provjeris da li je element "potrosen", pa ako jeste, ne pravis kombinaciju koja element podrazumijeva kao "ukljucen". Ovo je vec bolje :wink:

A to sa threadovima... Kao prvo i C ima threadove, a moje je misljenje da nema smisla uvoditi threadove za ovaj zadatak na jednoprocesorskoj masini :angel: . A moglo bi se paralelizovati, dijeljenjem polaznih pozicija (tj. recimo polaznih pozicija na proizvoljnom nivou rekurzije, nakon odredjenog broja rekurzija izvrsenih od pocetka izvrsavanja) na nezavisne procese, pri cemu je sinhronizacija, naravno, potrebna ali nije problematicna, npr. koristenjem shared memory.

Ono sto mene interesuje jeste da li je ovo dijeljenje na kombinacije jednoznacno? Tj. da li je moguce naci vise setova disjunktnih skupova koji zadovoljavaju postavljene uslove?


Vrh
 Profil  
 
 Tema posta:
PostPoslato: 07 Avg 2003, 22:06 
OffLine
Voajer
Voajer

Pridružio se: 31 Dec 2002, 16:14
Postovi: 8
Tvoji predlozi zvuce dosta interesantno. Imao bih dva pitanja:
1. Zbog cega mislis, da "multithreading" na jednoprocesorskoj masini "ne donos nista"?
2. To sa "shared memory"? Kako bi to konkretno izgledalo?

Pozdrav


Vrh
 Profil  
 
 Tema posta: C i backtrack
PostPoslato: 08 Avg 2003, 08:02 
OffLine
Početnik
Početnik
Korisnikov avatar

Pridružio se: 17 Jan 2003, 18:24
Postovi: 98
Lokacija: BL
Ne, multithreading donosi svasta :wink: i na jednoprocesorskoj masini,
ali ja sam napisao da u ovom slucaju nista ne bi donio, posto je
krajnji cilj kod ovakvih problema postizanje sto boljeg vremena potrebnog
za izvrsavanje.

Shared memory kao koncept interprocess komunikacije bi se mogao
koristiti kao metoda / sredstvo za sinhronizaciju izmedju procesa nakon
izvrsene paralelizacije. Vidi npr.
http://www.google.com/search?hl=en&lr=& ... munication

Eto... :wink:


Vrh
 Profil  
 
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Odgovori na temu  [ 4 Posta ] 

Sva vremena su u UTC [ DST ]


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 2 gostiju


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Powered by phpBB® Forum Software © phpBB Group
Hosting BitLab
Prevod - www.CyberCom.rs