Thread: Programozás
View Single Post
  #162  
Old 12-23-2011, 10:18
Cpt Balu Cpt Balu is offline
Junior Member
 
Join Date: Mar 2011
Posts: 47
Activity: 0%
Longevity: 71%
Default

A második feladat cseles
Amiből kiindultam, hogy a gépeknek minimum szum(A műveletek időigénye) ill. szum(B műveletek időigénye) ideig dolgoznak, ezen nincs mit faragni. Az egyetlen lehetőségünk a minimalizálásra a gépek üresjáratának csökkentése.
Vegyünk egy olyan elemet, ahol A kicsi, B nagy. Ha az első gép A-val végez, mehet B-re, ahol sok időt fog tölteni, ezalatt egy másik terméken is elvégezhetjük A lépést, majd várólistára tehetjük, hogy a második gép rögtön tudjon tovább dolgozni.
Amire kell figyelni, hogy az első x elem A műveletidejének összege ne haladja meg a B műveletidők összegét (mínusz az első elem A ideje, ennyi előnyt kap az első gép), így nem kell a második gépnek az elsőre várakozni.
Ha az adatok olyanra sikerülnek, nyilván valóan akadni fog üresjárat, ezt úgy tudjuk minimalizálni, ha az input elemeket B idő-A idő szerint csökkenő sorrendbe tesszük (ezáltal az elején sok A lépéssel végzett elemet felhalmozunk, a második gép folyamatosan dolgozik)
Ettől már csak egy lépés a tökéletes megoldás, meg kell találni azt az első elemet, amelynél B-A kellőpen nagy, hogy utána mindig legyen legalább egy elem, amin A-t már befejeztük, de a második gépre még várnia kell, viszont ugyanakkor, A ideje ne legyen túl nagy, hogy a második gép is minél előbb dolgozni tudjon. Az ideális, ha az első elemnél A ideje 1, B pedig elég nagy ahhoz, hogy más (szintén B>A tulajdonságú) elemen elvégezzük az első lépést, és várakozzon a másodikra.
Reply With Quote