![]() |
Quote:
|
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. |
Egy kis segítségre lenne megint szükségem, most JAVA nyelv rejtelmeiben merül el. Agyhullám könyvsorozat JAVA könyvében találtam egy feladatot, a szövege a következő:
Quote:
Singleton one = new Singleton(); módon. Valakinek valami ötlet? |
Nos, ha jól értem, olyan osztály kell, ami egy példányban szerepel max, és az sem példányosítás útján, erre a legegyszerűbb a statikus osztály szervezése. A singleton példában már látni, hogyan működne, egyszerűen minden metódus és mező statikus kell hogy legyen, így példány létrehozására nincs is szükség, a statikus szerkezet a típuson keresztül érhető el, persze kell egy metódus, ami konstruktorként funkcionál (ha nem a kódban vannak inicializálva az értékek)
a kérdés, hogy ki az a mindenki, aki használná ezt az osztályt, és hogyan? |
Quote:
Quote:
|
na arra én is kíváncsi leszek :) a példányosítás definíciója szerint önálló entitást hoz létre, erre is utal a "new" kulcsszó, régi újat létrehozni nem lehet, elvben úgy lehetne megoldani, hogy egy statikus metódus visszaadja az egyetlen példány azonosítóját:
TheClass One = TheClass.GetTheOne(); TheClass Two = TheClass.GetTheOne(); csak kérdés, hogy mi is az amit ez a függvény visszaad? lehet egy statikus változó, de egyszer létre kell hozni ezt is, mondjuk egy másik statikus függvénnyel: |
class TheClass
{ static TheClass TheOnlyOne; public static TheClass GetTheOne() { return TheOnlyOne; } public static void CreateTheOne(); { if([még nem létezik]) TheOnlyOne=new TheClass(); else [már létezik]; } private TheOne()<--privát konstruktor { [példányosítás]; } } |
Ha pedig mindenképp a hagyományos eljárás kell a példányosításra, akkor az egyetlen megoldás, hogy a mezők statikusak, a metódusok pedig nem, ilyenkor sok-sok különböző példány jön létre, de ha a metódusok hívásakor mindig ugyanazt a statikus adatot érik el, a látszat az lesz, hogy ugyanazt az objektumot használod :P
A new kulcsszó mindig új memóriaterületet foglal, tehát új példányt hoz létre, ezen változtatni nem lehet (kb olyan, mintha az összeadás jelet akarnád kivonásra használni, nem fog menni és kész) |
Quote:
|
All times are GMT +1. The time now is 18:10. |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Design partly based on Hódító's design by Grafinet Team Kft.
Contents and games copyright (c) 1999-2020 - Queosia, Hódító
Partnerek: Játékok, civ.hu