Eötvös Loránd Tudományegyetem Természettudományi Kar Lomoschitz Lilla Anna Közelít algoritmusok a 2 dimenziós online ládapakolási feladatra forgatással BSc Szakdolgozat Témavezet : Király Tamás Operációkutatási Tanszék Budapest, 2013
Köszönetnyilvánítás Szeretném megköszönni témavezet mnek, Király Tamásnak a téma ötletét, és a szakirodalom megkeresését, valamint azt, hogy sok és rendszeres konzultációs alkalmat biztosított számomra. Szakmai és formai észrevételeivel sok segítséget nyújtott. Külön köszönöm a dolgozat szerkesztéséhez alkalmazott programok használatában nyújtott segítséget. Köszönettel tartozom még családomnak és barátaimnak, hogy felhívták gyelmemet a dolgozat korábbi verzióiban lév formai hibákra, és általában a támogatásukért. 2
Tartalomjegyzék 1. Bevezetés 4 1.1. A problémakör ismertetése........................... 4 1.2. Tartalmi áttekintés............................... 6 1.3. Egyéb eredmények, alkalmazások....................... 6 2. Négyzet alakú ládák 8 2.1. Egy algoritmus nem korlátos ládaszám esetén................ 8 2.1.1. A tárgyak csoportosítása........................ 8 2.1.2. Sávok.................................. 10 2.1.3. A tárgyak pakolása........................... 10 2.1.4. Fels korlát............................... 14 2.2. Alsó korlát a feladatra............................. 15 3. Algoritmus téglalap alakú ládák esetén 20 3.1. Csoportosítás.................................. 20 3.2. Tárgyak elhelyezése............................... 22 3.3. Általános alsó korlát a feladatra........................ 28 3.4. Fels korlát az algoritmusra.......................... 30 3.5. Javítási lehet ségek............................... 32 4. Irodalomjegyzék 34 3
1. fejezet Bevezetés 1.1. A problémakör ismertetése A ládapakolási feladat egy NP-nehéz kombinatorikus optimalizálási feladat. Számos területen alkalmazható, különböz speciális esetei gyakran fordulnak el gyakorlati problémák megoldásakor. A legegyszer bb alaptípusa az egydimenziós ládapakolási feladat. Ebben az esetben van n darab kis szakaszunk, melyek hosszait a j -vel jelölve teljesül, hogy 0 < a j 1. A cél az, hogy ezeket a szakaszokat minél kevesebb 1 egység hosszú nagy szakaszon helyezzük el, úgy hogy a kis szakaszok ne fedjék egymást, és ne lógjanak le az egységhosszú nagy szakaszokról. A klasszikus két dimenziós ládapakolási feladat esetén téglalap alakú tárgyakat kell elhelyezni minél kevesebb 1 egység oldalú ládában. (Mostantól a tárgy és a kis téglalap szavakat, valamint a láda és a nagy téglalap szavakat szinonímaként használom.) A kis téglalapok magassága és szélessége sem nagyobb, mint 1 egység. A tárgyakat úgy kell elhelyezni, hogy azok oldalai a láda falaival párhuzamosan helyezkedjenek el, a ládából ne lógjanak ki és egymást ne fedjék. Két dimenzióban már felmerül a kérdés, hogy lehessene forgatni a téglalapokat, vagy az eredeti helyzetben kelljen-e ket elhelyezni. Ha nem lehet ket forgatni, akkor könnyen látható, hogy a téglalap alakú ládába pakolás feladata is modellezhet a négyzetbe pakolással. Amennyiben a forgatás megengedett, akkor a téglalap alakú ládába pakolás már nem vezethet vissza ilyen egyszer en a négyzet alakú ládába pakolásra. 4
Fontos szerepe van annak, hogy el zetesen ismerjük-e az összes elpakolandó tárgy méretét, ez alapján megkülönböztethetünk online és oine feladatokat. Oine feladat esetén az összes tárgy paramétereit ismerjük, miel tt elkezdenénk a pakolást. Online esetben csak a pakolás során tudjuk meg, hogy milyen tárgyakat kell elpakolnunk; azaz kezdetben egy láda paramétereit ismerjük, és mindig csak akkor ismerünk meg egy új tárgyat, ha az ismertekb l egyet elpakolunk. Olyan feladat is elképzelhet, hogy egyszerre több, de korlátos sok olyan tárgy lehet, aminek ismerjük a méreteit, de még nem pakoltuk el. Online esetben az alapján is lehet osztályozni a feladatokat, hogy mennyi ládát használ egyszerre. Ha nem használunk ilyen megkötést, akkor a feladat megoldására kitalált algoritmus futási ideje nagyon megn het. Ugyanis, ahányszor új ládát nyitunk meg, azaz olyanba pakolunk, amibe addig még nem, akkor eggyel növeljük a megnyitott ládák számát. Ha az összes nyitott ládát megvizsgálja az algoritmus, miel tt egy tárgyat elhelyezne, akkor egy-egy tárgy elhelyezése O(n) nagyságrend id be is telhet, ahol n az összes elpakolni való tárgy számát jelöli. Ezt az id t úgy lehet csökkenteni, hogy maximalizáljuk azoknak a ládáknak a számát, amit az algoritmus megvizsgál az elemek elhelyezésekor. Ehhez deniáljuk a lezárt és aktív ládákat. Azokat a ládák nevezzük aktívnak, amiben már van legalább egy tárgy, és az algoritmus még pakolhat bele tárgyakat. Azt mondjuk, hogy egy algoritmus egy aktív ládát lezár, ha utána már soha többé nem nézi meg, hogy rakjon-e bele tárgyat; az ilyen ládát lezártnak nevezzük. Ha az aktív ládák maximális számára van megkötés, akkor a feladatot korlátos ládaszámúnak nevezzük. Az oine ládapakolási feladat (azaz amikor a minimális ládaszám, és egy hozzá tartozó pakolás megadása a cél) NP-nehéz. Ezért a probléma megoldására kitalált polinomiális id ben futó algoritmusok csak közelít megoldásokat adnak. Ezeknek az algoritmusoknak a teljesítményét lehet úgy mérni, hogy megvizsgáljuk, hányszor annyi ládát használnak, mint amennyit egy optimális oine pakolás használna. Mindezt nagyon sok tárgy esetén nézzük, és a legrosszabb esetekben, azaz olyan ládasorozatok esetén, ahol ez az arányszám maximális. A pontos denícióhoz jelölje L az elpakolni való tárgyak sorozatát, OP T (L) azt, hogy ehhez minimum mennyi láda kell, és A(L) azt, hogy az L sorozat elpakolásához az A algoritmus mennyi ládát használ. Legyen továbbá { } A(L) RA n := max OP T (L) = n OP T (L) 5
Ekkor az A algoritmus aszimptotikus hatékonysági arányát (angolul asymptotic worst case ratio) a következ képpen deniáljuk: R := lim sup RA n n Az egyszer ség kedvéért ezt a továbbiakban hatékonysági aránynak nevezzük. 1.2. Tartalmi áttekintés A szakdolgozatnak a bevezet n kívül két f része van. A második fejezet a négyzet alakú ládába történ online pakolással foglalkozik. Itt szerepel egy nem korlátos ládaszámú algoritmus, valamint egy fels korlát annak a hatékonyságára. Az algoritmus S. Fujita, és T. Hada által írt [1] cikkb l származik, a fels korlátot pedig az ott lév számolás mintájára becsültem felülr l, a becslés R < 2.723. L. Epstein [2] cikke szerint a S. Fujita és T. Hada által adott bizonyítás hibás. Ezért a szakdolgozatban az eredeti fels korlátnál nagyobb szám szerepel. Ebben a fejezetben szerepel még egy alsó korlát a hatékonysági arányra, amennyiben az algoritmus korlátos sok nyitott ládát használ. Ennek az értéke megközelít leg R > 2.535, az erre vonatkozó bizonyítás L. Epstein [2] cikkéb l származik. Annak az oka, hogy az alsó becslés korlátos ládaszámú algoritmusra vonatkozik, míg a fels becslés egy nem korlátos ládaszámúra, az, hogy ez az algoritmus és ezek a bizonyítások szolgálnak a harmadik fejezet alapjául. Ebben saját eredmények vannak téglalap alakú ládába történ online pakolásról. Szerepel egy korlátos ládaszámú algoritmus, ami maximum 10 ládát használ egyszerre, valamint két fels korlát az algoritmusra: 2.75 és 2.55, ami a láda oldalainak arányától függ. Itt található még három alsó korlát a feladatra, szintén a láda oldalainak aránya függvényében: 2.05, 1.77, 1.47. 1.3. Egyéb eredmények, alkalmazások Bizonyos ütemezési feladatok modellezésére a 2 dimenziós online pakolás forgatást nem megenged változata alkalmas. A feladat korlátos ládaszámú változatára L. Epstein és R. van Stee adott [4]-ben egy olyan algoritmust, aminek a hatékonysági aránya a lehet legkisebb, körülbelül 2.86. A nem korlátos ládaszámú feladat hatékonysági arányára X. Han, F.Y.L. Chin, H.-F. Ting, G. Zhang és Y. Zhang [5]-ben adtak egy fels becslést, ez megközelít leg 2.66. 6
A forgatást is megenged változat nagyméret papír-, furnér-, vagy fémalapokból különböz kisebb méret lapok kivágását modellezheti, ha a kivágások elvégzésénél az a cél, hogy minél kevesebb felhasználatlan anyag maradjon ki, illetve, hogy minél kevesebb nagy lapot használjanak fel. Itt a maximálisan nyitva lev ládák száma azt jelenti, hogy mennyi nagy lapot kell kezelni egyszerre, azaz mennyit kell a kivágás helyén tárolni, és mennyi közül kell kiválasztani azt, amib l a megrendelt kisebb lapot ki fogjuk vágni. Erre a problémára nem korlátos ládaszámmal az L. Epstein és R. van Stee által [6]-ban adott alsó korlát megközelít leg 1.64. L. Epstein fels korlátot is adott [2]-ben, ami 2.45. Szintén ebben a cikkben szerepel korlátos ládaszámra egy-egy alsó és fels korlát. Az alsó korlát, a már említett 2.535, ennek bizonyítása a szakdolgozatban is szerepel. A fels korlát 2.547. Ennek az algoritmusnak a hatékonysági aránya azért annyira jó (azaz alacsony), mert ugyan korlátos ládaszámú, de 10 4 nagyságrend nyitott ládát is használhat. Ezért alkalmazásokra nem is érdemes felhasználni, mert ha nincs 10 5 nagyságrend elpakolni való tárgy, akkor el fordulhat, hogy alig lesz lezárt ládánk, viszont sok megnyitott láda lesz, melyeknek csak kis részét foglalja el tárgy, azaz a szükségesnél jóval több ládát használ fel. Téglalap alakú ládába pakolásról írt M. M. Mehdi és S. P. Willems [3]-ban. Žk egy konkrét problémával foglalkoztak: rögzített méret nagy acéllapokból kellett kivágni kisebbeket, úgy hogy a kisebbek méretei nem ismertek el re, de az eloszlásuk igen. Az algoritmusuk egyszerre maximum három nagy lapot használ. Az ötletük az, hogy mindig úgy vágják ki az aktuális téglalapot, hogy annak a sarka a még felhasználható terület egy sarkához érintkezzen, és hogy a 3 nagy lapból megmaradó részbe beleírható 3 téglalap összmérete a lehet legnagyobb legyen. Hatékonysági arányt nem számoltak, a saját maguk által adott példa-téglalapsorozatok állításuk szerint átlagosan a nagy lapok 80% -át felhasználták. 7
2. fejezet Négyzet alakú ládák 2.1. Egy algoritmus nem korlátos ládaszám esetén Ebben a részben egy S. Fujita és T. Hada által [1]-ben leírt algoritmust mutatok be. El ször a különböz tárgyak csoportosítását írom le, majd a ládák felosztását különböz sávokra, és a tárgyak elhelyezését a nekik megfelel sávokban. Az alfejezet végén egy fels korlát található az algoritmus hatékonysági arányára. 2.1.1. A tárgyak csoportosítása Legyen T az összes téglalap alakú elem halmaza, amelyeket egy-egy (x, y) pár határoz meg, ahol x és y a téglalapok szélességét, illetve magasságát jelentik; és teljesül, hogy 0 < x y 1. El ször négy részhalmazra osztjuk a T-beli elemeket az x koordinátáik szerint. Legyen T 0 = {(x, y) 2/3 < x 1}, T 1 = {(x, y) 1/2 < x 2/3}, T 2 = {(x, y) 1/3 < x 1/2}, és T 3 = {(x, y) 0 < x 1/3}. A T 2 és T 3 részhalmazokat a bennük lev tárgyak y koordinátái szerint további részhalmazokra osztjuk. T 3 -at így négy részhalmazra osztjuk. Legyen T 0 3 = {(x, y) T 3 2/3 < y 1}, T 1 3 = {(x, y) T 3 1/2 < y 2/3}, T 2 3 = {(x, y) T 3 1/3 < y 1/2}, és T 3 3 = {(x, y) T 3 0 < y 1/3}. A T 2 -beli elemek csoportosításához deniáljuk az {a i } valós számokból álló sorozatot: a i := 1 + 1 i N esetén. Például: a 3 3(2 i +1) 1 = 4/9, a 2 = 2/5, a 3 = 10/27. Vegyük észre, hogy 1/3 < a i 1/2 teljesül i N esetén. Legyen ɛ > 0 egy kicsi konstans, és Φ : R + Z függvény, melyre Φ(t) := log 2 ( 2 ). 9t 1 8
T 3 0 T 2 0 T 1 T 0 y 2/3 1/2 1/3 T 3 1 T 3 2 T 3 3 T 2 1 T 2 2 hosszú-sávba közepes-sávba rövid-sávba x 1/3 1/2 2/3 2.1. ábra. Csoportosítás T 2 -t ezek segítségével a következ három részhalmazra osztjuk: Φ(ɛ) 1 T2 0 := {(x, y) a j+1 < x a j, 1 a j < y 1} j=0 {(x, y) 1/3 < x a Φ(ɛ), 1 a Φ(ɛ) < y 1} Φ(ɛ) 1 T2 1 := {(x, y) a j+1 < x a j, 1/2 < y 1 a j } j=0 T 2 2 :={(x, y) 1/3 < y 1/2} {(x, y) 1/3 < x a Φ(ɛ), 1/2 < y 1 a Φ(ɛ) } A csoportosítást a 2.1 ábra is szemlélteti. Egy-egy részhalmazba tartozó elemek méretére vonatkozik a következ két állítás: 2.1.1. Állítás. Legyen i > log 2 ( 2 9ɛ 1), ekkor 1/3 (1 a i) > 2/9 ɛ/2. Bizonyítás. Ha i > log 2 ( 2 9ɛ 1), akkor 2i > 2 9ɛ 1. Így 1/3 (1 a i) = 2/9 1 2/9 1 9(2 i +1) > 2/9 1 9(2/9ɛ) = 2/9 ɛ/2. 3(3(2 i +1)) = 2.1.2. Állítás. A T 0 -beli elemek mérete > 4/9. A T 1 -beli elemek mérete > 1/4. A T 0 2 -beli elemek mérete > 2/9 (ɛ/2). 9
Bizonyítás. Az els két megállapítás triviális. A harmadik bizonyításához el ször megmutatjuk, hogy (1 a i ) a i+1 = 2/9 teljesül i N esetén. Ha i = 0, akkor (1 a 0 ) a 1 = 1/2 4/9 = 2/9. Ha i 1, akkor (1 a i ) a i+1 = ( 2 1 ) ( 1 + 3 3(2 i +1) 3 1 ) = 2 + 2 1 1. Ezért T 0 3(2 i+1 +1) 9 9(2 i+1 +1) 9(2 i +1) 9(2 i +1)(2 i+1 +1) 2 legkisebb elemének mérete legalább min{2/9, 1/3 (1 a Φ(ɛ) )}, így 2.1.1 segítségével az állítás következik. 2.1.2. Sávok A ládák sávokra bontásához deniálunk néhány halmazt: { } 1 X := i {3, 4, 5}, j N i 2 j X h := X {1/2} X k := X {a 1, a 2,..., a Φ(ɛ) }, ahol a i = 1 3 + 1 3(2 i + 1) i N A továbbiakban x (0, 1] esetén legyen x := min{a X h a x} x := min{a X k a x}. Vegyük észre, hogy x < 1/3 esetén x/ x(= x/ x) > 3/4. Az algoritmus a következ háromféle sávot használja: 2.1.3. Deníció. Egy ládának egy részét hosszú-sávnak nevezzük, ha a szélessége 1 egység, és a magassága egy X h -beli szám. Egy ládának egy részhalmazát rövid-sávnak nevezzük, ha a szélessége 1/2 egység, és a magassága egy X h -beli szám. Egy ládának egy részhalmazát közepes-sávnak nevezzük, ha vagy a szélessége 2/3 egység, és a magassága egy X-beli szám; vagy az egyik oldala 1 a i, a másik pedig a i hosszú, valamely 1 i Φ(ɛ) esetén. 2.1.4. Megjegyzés. A közepes-sávok rövidebb oldalának hossza mindig egy X k -beli szám. 2.1.3. A tárgyak pakolása Ebben a részben található az algoritmus leírása; el ször az, hogy milyen sávba rak egy bizonyos elemet az algoritmus, majd az, hogy a sávokat hogyan helyezi el, és hogy ehhez mikor kezd el egy új ládába pakolni, illetve mikor zár le egy ládát. 10
Ha (x, y) T 0 T 1, akkor az algoritmus egy új ládát nyit meg, abba belerakja az elemet, majd lezárja a ládát. (x, y) T2 0 T3 0 esetén aktiváljunk egy x magas, üres hosszú-sávot, helyezzük el az elemet a sávban, és zárjuk le a sávot. A sávot a kés bb leírt hosszú_sáv nyitása(x) szubrutin szerint tudjuk megnyitni. (x, y) T 1 2 T 1 3 esetén aktiváljunk egy x magas, üres közepes-sávot, helyezzük el az elemet a sávban, és zárjuk le a sávot. A sávot a kés bb leírt közepes_sáv_nyitása(x) szubrutin szerint tudjuk megnyitni. (x, y) T2 2 T3 2 esetén aktiváljunk egy x magas, üres rövid-sávot, helyezzük el az elemet a sávban, és zárjuk le a sávot. A sávot a kés bb leírt rövid_sáv_nyitása(x)) szubrutin szerint tudjuk megnyitni. (x, y) T3 3 esetén rakjuk a tárgyat egy aktív x magasságú hosszú-sávba, ha ezek között van olyan, amiben elfér a tárgy. Ha nincs ilyen sáv, akkor zárjuk le az összes aktív x magas hosszú-sávot; és aktiváljunk egy x magas, üres hosszú-sávot, és helyezzük el az elemet az új sávban. Ekkor az eddigiekt l eltér en még nem zárjuk le a sávot. Az 2.1 ábra azt is szemlélteti, hogy a különböz típusú elemeket milyen sávokba pakolja az algoritmus. 2.1.5. Állítás. Minden lezárt S terület hosszú-sávnak legalább (4/9 ɛ)s terület részén van tárgy, ha a sáv 1/2 magas; és legalább S/2 terület részén, ha a magassága < 1/2. Bizonyítás. 2.1.1 szerint egy lezárt 1/2 magas hosszú-sáv legalább 2/9 ɛ/2 területen ki van töltve elemekkel, így a kitöltöttségi aránya egy csak ilyet tartalmazó ládának legalább 4/9 ɛ. Másrészt ugyanezen állítás szerint egy 1/i ( ahol i 3) magas lezárt hosszú-sáv több, mint 2/3 1/(i+1) terület részén van tárgy, így ennek a kitöltöttségi aránya 1/2. 2.1.6. Állítás. Minden lezárt S terület rövid-sávnak legalább 4/5 S terület részén van tárgy, ha a sáv 1/2 magas; és legalább S/2 terület részén, ha a magassága < 1/2. 11
Bizonyítás. Az el z höz hasonlóan következik. 2.1.7. Állítás. Minden lezárt a i magas rövid-sávnak (ahol 1 i Φ(ɛ)) több, mint 1/2 1/3 = 1/6 terület részén van tárgy; ha pedig a lezárt sáv magassága < 1/i (valamilyen i 3 esetén), akkor egy olyan elem van benne, aminek a területe több, mint 1/(i+1) 1/2 = 1/(2(i + 1)). Bizonyítás. Denícióból következik. A következ kben leírom, hogy az algoritmus hogyan oszt fel sávokra egy ládát. Ezt a hosszú_sáv_nyitása(x), közepes_sáv_nyitása(x), rövid_sáv_nyitása(x) szubrutinok ismertetésével tesszük. Az utasítások pontos leírásai a következ k: hosszú_sáv_nyitása(x): Ha nincs 2 j x magas hosszú-sáv semmilyen j N esetén, akkor legyen j N olyan, hogy 2 j x 1 {1/2, 1/3, 1/5}. Nyissunk egy új ládát, és bontsuk fel darab 2j x 2 j x magas hosszú-sávra. Így van olyan j N, hogy van 2 j x magas hosszú-sáv. Válasszuk ki az egyik legvékonyabb hosszú-sávot, aminek a magassága 2 i x, valamilyen i N esetén. Jelöljük ezt a sávot Q-val. Legyen 2 i x a Q sáv magassága. Ha i = 0, akkor aktiváljuk a Q sávot. Egyébként osszuk fel Q-t i + 1 sávra rendre 2 i 1 x, 2 i 2 x,..., x, x magasságokkal, és aktiváljuk az egyik x sávot. rövid_sáv_nyitása(x): Ha van üres x magas rövid-sáv, akkor ezt aktiváljuk. Egyébként vegyünk egy üres x magas hosszú-sávot, a hosszú_sáv_nyitása(x)-szel, bontsuk a hosszú-sávot két üres x magas rövid-sávra, és az egyiket aktiváljuk. közepes_sáv_nyitása(x): Ha van üres x magas fekv közepes-sáv (vagy ilyen széles álló közepes-sáv), akkor azt aktiváljuk. Egyébként, ha x > 1/3, akkor nyissunk egy új ládát, és jelöljünk ki benne 4 egyforma sávot (2 fekv t és 2 állót) középpontosan szimmetrikusan. A fekv sávok magassága legyen x, szélességük 1 x, az álló sávoknál pedig pont fordítva. 12
Ha x 1/3, és 2.2. ábra. Közepes-sávok elhelyezése x > 1/3, és x 1/3 esetén nincsen 2 j x magas üres közepes-sáv semmilyen j N-re, akkor nyissunk egy 1 új ládát, jelöljünk ki benne darab 2j x magas fekv sávot, és 1/3 2 j x 2 j x darab 2 j x széles sávot, ahol j N és 2 j x {1/2, 1/3, 1/5}. Így már van olyan j N, hogy van 2 j x magas közepes-sáv. Válasszuk ki az egyik legkeskenyebb olyan közepes-sávot, aminek a magassága 2 i x valamilyen i N esetén, és nevezzük el a sávot Q-nak. Legyen 2 i x a Q sáv magassága. Ha i = 0, akkor Q legyen egy aktív sáv. Egyébként osszuk fel Q-t i + 1 sávvá rendre 2 i 1 x, 2 i 2 x,..., x, x magasságokkal, és aktiváljuk az egyik x sávot. A közepes-sávok elhelyezkedését egy-egy ládában a 2.2 ábra is illusztrálja. 2.1.8. Állítás. Minden 1/3-nál szélesebb közepes-sávokra bontott lezárt ládában lev tárgyak összterülete legalább 2/3. Bizonyítás. 2.1.7 állítás szerint egy ilyen sávban lév tárgyak összterülete legalább 1/6, és a közepes-sávok kijelölési módszere alapján 4 ilyen sáv van egy lezárt ládában. Így a ládában lev tárgyak összterülete legalább 2/3. 2.1.9. Állítás. Minden 1/3-nál nem szélesebb közepes-sávokra bontott lezárt ládában lev tárgyak területe legalább 1/2. Bizonyítás. Ha a sávok magassága 1/i, ahol i 3, akkor mindegyikben pontosan egy darab több, mint 1/(2(i + 1)) terület tárgy van. Ez igaz a sávok f sávokká egyesítésére is, csak itt a terület több tárgyból is összejöhet. Itt a f sáv azt az eredeti sávot jelenti, amit kés bb felbontott az algoritmus, és amire i {3, 4, 5}. Minden ládában i + 1 f sáv fér el, így a ládában lev tárgyak összterülete több, mint (i + 1) 1/(2(i + 1)) = 1/2. 13
2.1.4. Fels korlát 2.1.10. Tétel. Minden ɛ > 0 esetén R A 2.723 + ɛ. Bizonyítás. Legyen L tárgyaknak egy n elem sorozata. Jelölje a benne lév T 0 -beli elemek számát n 0, a T 1 -beliekét pedig n 1. Az algoritmus b 0 (= n 0 ) ládát használ a T 0 -beli elemek pakolására, és b 1 = (n 1 ) ládát a T 1 -beliek számára. Tegyük fel, hogy b 2 olyan ládát használ, amit 1/2 magas hosszú-sávokra oszt az algoritmus; és b 3 olyat, amiben 1/3-nál szélesebb közepes-sávok vannak. Legyen S az L-ben lev tárgyak összterülete, S 4 pedig azon tárgyak összterülete, melyek nincsenek benne a fent említett b 0 + b 1 + b 2 + b 3 darab ládában, azaz azoknak a tárgyaknak az összterülete, melyek magassága legfeljebb 1/3. Ha ɛ konstans, akkor az algoritmus legfeljebb b 0 + b 1 + b 2 + b 3 + 2S 4 + O(1) ládát használ. Az optimális oine pakolás legalább max{n 0 + max{n 1, b 2 /2}, S} ládát használ. Ezekb l következik, hogy R A b 0 + b 1 + b 2 + b 3 + 2S 4 max{n 0 + max{n 1, b 2 /2}, S}. A 2.1.5, 2.1.6, 2.1.8 és 2.1.9 állításokból következik, hogy S 4 S 4/9n 0 (4/9 ɛ)b 2 2/3b 3 n 1 /4. Ezt S 4 helyére behelyettesítve még mindig egy fels becslést kapunk R A -ra: R A n 0 + n 1 + b 2 + b 3 + 2(S 4/9n 0 (4/9 ɛ)b 2 2/3b 3 n 1 /4) max{n 0 + max{n 1, b 2 /2}, S} 2S + n 0/9 + n 1 /2 + (1/9 + ɛ )b 2 b 3 /3 max{n 0 + max{n 1, b 2 /2}, S} 1. eset Ha S > max{n 1, b 2 /2}, akkor Ha még n 1 b 2 /2, akkor R A 2 + 1/S (n 0 /9 + n 1 /2 + (1/9 + ɛ )b 2 ). R A 2 + 1/S (n 0 /9 + (11/36 + ɛ )b 2 ) 2 + 1/S (11/18n 0 + (11/18 + ɛ )b 2 /2) = 2 + n 0 + b 2 /2 11/18 + ɛ 2 + 11/18 + ɛ, S ha pedig n 1 > b 2 /2, akkor R A 2 + 1/S (n 0 /9 + (13/18 + ɛ )n 1 ) 2 + 1/S (13/18n 0 + (13/18 + ɛ )n 1 ) = 2 + n 0 + n 1 13/18 + ɛ 2 + 13/18 + ɛ S 14
2. eset Ha S max{n 1, b 2 /2}, akkor Ha még n 1 b 2 /2, akkor RA 2 + n 0/9 + n 1 /2 + (1/9 + ɛ )b 2. n 0 + max{n 1, b 2 /2} RA 2 + n 0/9 + b 2 /4 + (1/9 + ɛ )b 2 n 0 + b 2 /2 2 + (13/18 + ɛ )(n 0 + b 2 /2) n 0 + b 2 /2 ha pedig n 1 > b 2 /2, akkor = 2 + n 0/9 + (13/18 + ɛ )b 2 /2 n 0 + b 2 /2 = 2 + 13/18 + ɛ, R A 2 + n 0/9 + n 1 /2 + (2/9 + ɛ )n 1 n 0 + n 1 = 2 + (n 0/9 + (13/18 + ɛ )n 1 n 0 + n 1 2 + (13/18 + ɛ )(n 0 + n 1 ) n 0 + n 1 = 2 + 13/18 + ɛ. Mivel R A 2 + 13/18 + ɛ < 2.723 + ɛ minden lehetséges esetben, így a tétel teljesül. 2.2. Alsó korlát a feladatra Az alsó korlát bizonyítása L. Epstein [2] cikkéb l származik. El ször egy téglalapsorozatot fogunk megadni. Ehhez 7 viszonylag nagy téglalapot fogunk deniálni, amelyek együtt elférnek egy ládában. Mind a 7 téglalapról tudnunk kell, hogy ha csak egyformákat rakunk egy ládába, abból maximum mennyi fér el. Ehhez szükségünk lesz három állításra. 2.2.1. Állítás. Olyan téglalapokból, melyek oldala szigorúan nagyobb, mint 1/k, ahol 2 k N, legfeljebb (k 1) 2 darab fér el egy ládában. Bizonyítás. Tekintsük a láda és a benne lev téglalapok vetületét a láda egyik falával párhuzamos tengelyre. Így a láda egy 1 egység hosszú f intervallum lesz, a tárgyak pedig ennek az intervallumnak lesznek 1/k-nál szigorúan hosszabb részintervallumai. Mivel bármely vízszintes, vagy függ leges vonal maximum k 1 tárgyat metszhet a ládában, így a f intervallum minden pontjában legfeljebb k 1 téglalap vetülete lehet. Tekintsük a részintervallumok által meghatározott intervallumgráfot. A legnagyobb klikk mérete legfeljebb k 1. Mivel minden intervallumgráf perfekt, így ennek a pontjait (azaz az intervallumokat 15
illetve tárgyakat) k 1 színnel tudjuk színezni. Mivel minden téglalap nagyobb, mint 1/k, így legfeljebb k 1 fér el fedés nélkül az intervallumban, így k 1 intervallum lehet csak minden színb l. Így összesen (k 1) 2 intervallum lehet a f intervallumban, azaz ennyi téglalap lehet a ládában. 2.2.2. Állítás. Vegyünk egyforma téglalapokat, melyek szélessége 1/2 < y < 2/3 és magassága 1/3 < x < 1/2, és amelyekre teljesül, hogy x + y > 1. Ezekb l legfeljebb 2 fér el egy ládában. Bizonyítás. Vegyünk egy ládát, amiben ilyen tárgyak vannak. Egy, a ládát metsz vízszintes, vagy függ leges vonal legfeljebb 2 tárgyat metszhet. Az, hogy két tárgyat messen, csak úgy fordulhat el, ha mindkét tárgy ugyanarra az oldalára van forgatva; ekkor a vonal egy y hosszú intervallumot metsz ki mindkét téglalapból. Bármely egyéb esetben a téglalapok nem férnének el egymás mellett, vagy egymás felett. Tekintsük a téglalapoknak és a ládának a láda egyik falára való vetületét. A tárgyaknak kétféle vetülete lehet: rövid (x méret ) intervallum, vagy hosszú (y méret ) intervallum. Minden pontot legfeljebb egy rövid intervallum, vagy legfeljebb két hosszú intervallum tartalmazhat. Mivel egy hosszú intervallum mellett nem fér el egy rövid, és egymást pedig nem fedhetik, így vagy csak rövid, vagy csak hosszú intervallumok lehetnek egy vetületen. Ha hosszú intervallumok vannak, akkor azoknak mindenképpen fedniük kell egymást, legalábbis a f intervallum közepén, így ebben az esetben maximum 2 tárgy lehet a ládában. Ha az összes intervallum rövid, akkor azok nem fedhetik egymást, így szintén legfeljebb 2 lehet bel lük egy ládában. Így összesen maximum 2 ilyen téglalap fér el egy ládában. 2.2.3. Állítás. Vegyünk egyforma téglalapokat, melyek szélessége 1/2 < y < 4/7 és magassága 1/7 < x < 1/6, és amelyekre teljesül, hogy 3x + y > 1. Ezekb l legfeljebb 8 fér el egy ládában. Bizonyítás. Elforgatás nélkül legfeljebb 6 téglalap rakható egy ládába, mivel 7 ilyen téglalap már nem fér el egymás felett. Ha még megmutatjuk, hogy elforgatott téglalapokból a 6 eredeti irányban lev mellett legfeljebb kett fér el, és azt; hogy ha 3 egyik irányba forgatott téglalap van a ládában, amellett maximum 4 másik irányba forgatott téglalap fér el, akkor készen vagyunk. Vegyünk egy ládát például csak fekv téglalapokkal. Tegyük fel, hogy l 3 téglalap van benne. Vegyünk egy függ leges vonalat, ami a láda közepén is áthalad. Mivel y > 1/2, így ez a vonal mind az l tárgyat metszeni fogja. A vonal álló téglalapot nem metszhet, 16
ugyanis az már nem férne el a 3 fekv téglalaptól, mivel y + 3x > 1. Kett zzük meg a függ leges vonalat, és toljuk el ket jobbra illetve balra y 1/2 távolságra. Mivel mind az l darab téglalap y széles, így mindkét vonal metszi az összes téglalapot a mozgatás során végig, és a mozgatás végén is. Ezért az l téglalapon felül további téglalapok csak a két vonal által meghatározott sávon kívül lehetnek. A vonalak, és a hozzájuk közelebb lév függ leges ládafal közötti távolság 1 y mindkét esetben. Álló téglalapok csak egymás mellett lehetnek, mert a hosszabb oldaluk > 1/2, így egymás fölött nem férne el 2 bel lük. Mivel a széls sávok szélessége 1 y < 3x, így ezekbe a sávokba csak 2-2 téglalapot lehet pakolni. Így a 3 fekv téglalap mellé maximum 4 álló fér el. Ugyanez igaz fordítva is. 2.2.4. Tétel. A hatékonysági arány korlátos ládaszám, forgatható elemek és négyzet alakú ládák esetén a két dimenziós ládapakolási feladatra legalább 60377/23814 2.535356. Bizonyítás. Legyen δ > 0 egy kicsi konstans. A bizonyításhoz a következ téglalaptípusokat használjuk: A: 1/2 + δ oldalú négyzetek. Ezekb l 2.2.1 szerint csak egy darab fér el egy ládában. B: 1/3 + δ oldalú négyzetek. Ezekb l 2.2.1 szerint legfeljebb 4 darab fér el egy ládában. C 1 : 2/3 δ széles, és 1/3 + 2δ magas téglalapok. 2.2.2 alapján ilyenekb l legfeljebb 2 darab fér el egy ládában. C 2 : 2/3 2δ széles, és 1/3 + 3δ magas téglalapok. 2.2.2 alapján ilyenekb l legfeljebb 2 darab fér el egy ládában. D 1 : 11/21 4δ széles, és 10/63 + 2δ magas téglalapok. 2.2.3 alapján ilyenekb l legfeljebb 8 darab fér el egy ládában. D 2 : 32/63 4δ széles, és 31/189 + 2δ magas téglalapok. 2.2.3 alapján ilyenekb l legfeljebb 8 darab fér el egy ládában. E: 1/7 + δ oldalú négyzetek. Ezekb l 2.2.1 szerint legfeljebb 36 darab fér el egy ládában. Ezenkívül még apró téglalapokat is fogunk használni, melyek oldalai nagyon kicsik. A bet kkel jelölt nagyobb téglalapok úgy vannak deniálva, hogy egy optimális oine algoritmus által pakolt ládában pontosan egy darab fér el mindegyikb l. A pakolás során 17
B C 1 D 1 E C 2 A D 2 2.3. ábra. Optimális oine elrendezés maradnak kitöltetlen részek a ládában, az apró téglalapokat úgy kell megadni, hogy ezt a maradék területet az így megadott ládában pont kitöltsék. Mivel az oine algoritmus által pakolt összes láda területe 1 egység, így az apró tárgyak területe egy ládában 1 (bet kkel jelölt tárgyak területe) = 361/47628 + Θ(δ) Így az összes ládában az apró tárgyak összterülete (361/47628 + Θ(δ)) (az oine ládák száma). A tárgyak elrendezését az optimális oine algoritmus szerint a 2.3 ábra szemlélteti. A négyzet tetejéb l egy 1/3+2δ magas sávot levágunk, ebbe kerül egy B és egy C 1 típusú tárgy. A megmaradó rész jobb oldalából egy 1/3 + 3δ széles sávot vágunk le, ezt pont egy C 2 típusú tárgy tölti ki. Így egy 2/3 2δ magas és 2/3 3δ széles téglalap marad. Ennek a bal alsó sarkába egy A, a bal fels sarkába egy D 1, a jobb fels be egy E, a jobb alsóba pedig egy D 2 típusú elemet helyezünk el. Így a kimaradó terület V = 361/47628 Θ(δ) 0.007579575 Θ(δ). Egy téglalap-sorozat n téglalapot tartalmaz minden típusból, úgy, hogy az egyfélék egymás után jönnek, és utána az apró téglalapokat. Azaz el ször jön n darab A típusú, majd n darab B típusú, és így tovább, azaz az egyformák mindig együtt jönnek, a különböz k nem keverednek. Mivel az online algoritmus korlátos ládaszámú, így csak konstans sok ládát tarthat nyitva egyszerre, így ha n, akkor csak konstans sok ládába kerülhet többféle elem, így konstans sok láda kivételével csak egyféle tárgy van az egyes ládákban. Az n darab A típusú elem n O(1) ládát foglal el, a B típusúak n/4 + O(1)-et, a C 1 és C 2 típusúak külön-külön n/2 O(1) ládát, a D 1 és D 2 külön-külön n/8 + O(1), az E-típusúak pedig n/36 + O(1)-et. Az apró téglalapok pakolása legalább V n O(1) ládát használ fel. Ez 18
összesen (91/36 + V )n O(1) ládát jelent. Mivel az oine algoritmus ezeket az elemeket n ládába pakolja, így a hatékonysági arány 91/36 + V 2.53536. 19
3. fejezet Algoritmus téglalap alakú ládák esetén A következ algoritmus során a feladat abban változik, hogy az elpakolni való kis téglalapokat (tárgyakat) nem négyzetekben, hanem téglalapokban kell elhelyezni. A téglalap (láda) rövidebb oldala 1 egység hosszú, a másik oldal hossza a, ahol a > 4/3. A tárgyakat szintén a láda falával párhuzamosan kell elhelyezni, és lehet ség van azok 90 -kal való elforgatására. A tárgyak mérete itt is maximum 1 egység lehet mindkét irányban. A rövidebb oldalukat x, a hosszabat y jelöli. Az algoritmus maximum 10 nyitott ládát használ egyszerre, de ez az a szám növekedésével monoton csökken 7-ig. Az algoritmus minden érkez tárgyat el ször osztályoz, majd megkeresi, hogy a csoportjának megfelel ládában van-e hely neki; ha van, akkor (a kés bb leírtak szerint) elhelyezi ott, ha nincs, akkor bezárja a ládát és új ládát nyit, majd ebben helyezi el a tárgyat. A fejezetben el ször leírom a tárgyak csoportosítását, majd azt, hogy az egyes csoportokba tartózókat hogyan helyezi el az algoritmus, azzal együtt, hogy minimum mekkora részét foglalja el tárgy egy-egy lezárt ládának. Majd alsó és fels korlátokat adok az algoritmus hatékonysági arányára különböz a paraméterek esetén. Végül leírok két javítási lehet séget: az egyik nem módosítja a hatékonysági arányt, de általában csökkenti az összesen felhasznált ládák számát, a másik a hatékonysági arányt csökkenti, de a valóban felhasznált ládák számát akár növelheti is. 3.1. Csoportosítás A tárgyakat a csoportosításhoz úgy forgatjuk, hogy a rövidebb, (x-szel jelölt) oldalukon álljanak. Így 0 < x y 1 teljesül. A ládákat y szerint 4 f csoportra osztjuk: hosszúra, ha 2/3 < y; közepesre, ha 1/2 < y 2/3; rövidre, ha 1/3 < y 1/2; és minire, ha 20
H1 H2 H3 H1 H2 2/3 K1 K2b K3 2/3 K1 K2a K3 y 1/2 1/3 R1 M1,M2 M3 y 1/2 1/3 R1 M1,M2 M3 x 1/3 1/2 2/3 3/4=a/2 x 1/3 1/2 2/3=a/3 3.1. ábra. Csoportosítás a=3/2 és a=2 esetén 1/3 M1 1/4 M2 y 1/6 1/8 1/12 1/16 1/24 M1 M2 M3 M3 M1,M2 x 3.2. ábra. M1, M2, M3, csoportosítása y 1/3. A további osztályozás alcsoportokra (x és néha y szerint) gyakran a függvénye. A hosszú f csoportot felosztjuk H1-re, ha x a/3; H2-re, a/3 < x a/2; és H3-ra, ha a/2 < x. A közepeset K1-re, ha x 1/3; K2a-ra, ha 1/3 < x 1/2 és y a/3; K2b-re, ha 1/3 < x 1/2 és a/3 < y; K3-ra, ha 1/2 < x 2/3. A rövideket R1-re, ha x a/3; és R2-re, ha a/3 < x a/2. A minibe tartozók csoportosítása bonyolultabb: M3-ba kerül az, amire 1/24 < y 1/12; a többi közül M1-be kerülnek azok, amikhez k N, amire y 1/3 1/2 k és y > 1/4 1/2 k. A maradék pedig M2-be kerül. A csoportosítást a 3.1 ábra szemlélteti a = 3/2, és a = 2 esetén. Az M1, M2, M3-ba tartozó tárgyak csoportosítása a 3.2 ábrán látható. 21
3.2. Tárgyak elhelyezése A más-más típusba tartozó tárgyak általában különböz módon, és külön-külön ládákban kerülnek elhelyezésre. Mindenhol leírom a legrosszabb kitöltöttségi arányt 4/3 a < 2 és 2 a esetén. Ez a szám azt mutatja meg, hogy egy-egy lezárt láda területének mekkora részén van tárgy. Ezt az alfejezet végén található 3.2 táblázat foglalja össze. A ládák hosszabb oldalukon fekszenek. A tárgyak állítása mindig azt jelenti, hogy a rövidebb oldaluk van alul és felül, a fektetése pedig azt, hogy a hosszabb. A hosszú f csoportba tartozók közül a H1-es tárgyakat a nekik megnyitott ládában balról folytonosan egymás mellé állítjuk. Ha a soron lev tárgy nem fér már el, új ládát nyitunk, és ugyanígy folytatjuk a pakolást. Mivel y > 2/3 minden tárgy esetén, így ha valamelyik vízszintes tengely szerinti helyen van tárgy a ládában, ott a láda 2/3 magasságig tele lesz. Ez az elrendezés a láda egyik hosszabb oldalára vetítve tulajdonképpen egy egydimenziós ládapakolási feladat, ahol az x oldalak a szakaszok hosszai. Mivel x a/3, így maximum a/3 hosszú kitöltetlen rész lehet a láda jobb szélén, ami a láda hosszának az 1/3-a. Így a H1-típusú láda 2/3 2/3 = 4/9 részét biztosan tárgy fedi. A H2 típusú tárgyakat szintén így állítjuk a ládába, minden H2-es ládában pontosan 2 tárgy fér el. Ezek együttes mérete 2xy > 2 a/3 2/3 = (4/9)a, a láda mérete a, így annak 4/9 része biztosan ki lesz töltve. H2 típusú elemek csak a 3 esetén vannak, a > 3 esetén nincs szükség ilyen ládára. A H3 típusú tárgyakból összesen egy fér egy ládába. Ezért ebb l nincs is fenntartott nyitott láda, hanem csak az új H3 tárgy érkezésénél nyitunk egyet, és azután rögtön be is zárjuk. Egy ilyen téglalap területe xy > a/2 2/3 = a/3, így az a méret láda 1/3 részig van kitöltve. H3 típusú elemek csak a 2 esetén vannak; a > 2 esetén nincs szükség ilyen ládára. A közepes tárgyak közül a K1-be tartozók pakolásához a ládát fel kell osztani: balról folytonosan felbontjuk 2/3 széles, 1 egység magas sávokra, ameddig lehet. Az ilyen sávokba fogjuk fektetni lentr l felfelé folytonosan a tárgyakat; ha az aktuális sávba már nem fér bele az elhelyezend tárgy, akkor a következ be kezdünk pakolni. Ha az aktuális tárgyat már egyetlen sávban sem tudjuk elhelyezni, akkor a sávokból kimaradt jobb oldali rész bal szélébe állítjuk. Ett l fogva ide is pakolunk balról folytonosan. Ha az aktuális tárgyat se sávban, se pedig a kimaradó jobb oldali részben nem tudjuk elhelyezni, akkor az eddig használt ládát lezárjuk, új ládát nyitunk és ebben helyezzük el a tárgyat. Ezt a pakolást a 3.3 ábra is illusztrálja. 22
3.3. ábra. K1-beli elemek elhelyezése egy ládában 3.2.1. Állítás. Az aszimptotikus kitöltöttségi arány 4/3 a < 2 esetén minimum 2/5, a 2 esetén minimum 3/7. Bizonyítás. Az els esetben pont kett darab 2/3 széles sáv fér el. Ezekben minimum 1/2 hosszú tárgyak fekszenek, így szélességében 3/4-ig vannak kitöltve az ilyen sávok. A tárgyak magassága külön-külön maximum 1/3, így egy maximum 1/3 magas rész maradhat üresen a sáv tetején, így az magasság szerint 2/3-ig ki lesz töltve. Összességében egy-egy ilyen sáv minimum 1/2 részében lesz tárgy. A kimaradó a 4/3 széles részb l maximum 1/3 szélesség rész marad üresen, és a többi szélessége 1/2 magasságig lesz kitöltve. Így a kitöltöttségi arány: (2 2/3 1/2)/a, ha a < 5/3 és (2 2/3 1/2 + (a 4/3 1/3) 1/2)/a, ha a 5/3; ez az a = 5/3-ban veszi fel a minimumát, ahol 2/5 értéket vesz fel. A második esetben nem egyértelm, hogy mennyi sáv lesz, így a sávok száma (n) és a láda mérete (a) szerint is minimalizálni kell. A sávok száma n = (3/2)a. A sávok az el z vel megegyez en minden esetben minimum 1/2 részig lesznek kitöltve. A kimaradó rész pedig minimum d [0, 1/4) arányban, ahol d = 0, ha a 2n 1/3, és d = 1 a (2/3)n 1/3, 3 2 a (2/3)n ha a 2 n > 1/3. Így a teljes láda kitöltöttsége 1/2 és d konvex kombinációja lesz. Ha ezt 3 minimalizálni szeretnénk, akkor egyrészt az 1/2 súlyát kell csökkentenünk, másrészt 0-t választani 0 és 1/4 közül. A minimalizálandó függvény: 3a/2 2/3 1/2, ha a 2 n 1/3, és a 3 3a/2 2/3 1/2+(a 1/3 2/3 3a/2 ) 1/2, ha a 2 a 3 n > 1/3. Ez a = 7/3 esetén veszi fel a minimumot, akkor a kitöltöttség 3/7 lesz. A K2a-ba és K2b-be tartozó tartozó tárgyakhoz két-két egyforma vízszintes sávra osztjuk a ládát. A K2a és K2b típusúak külön ládába kerülnek. Mindkét esetben balról folytonosan fektetjük a tárgyakat a sávokba, amíg valamelyik sávban még van hely. (Amíg mindkét sávban van hely, addig mindegy, hogy melyikben helyezzük el a tárgyat.) K2a esetén minden sáv 1/3 magaságig ki lesz töltve, hosszra pedig maximum a/3 üres rész marad a jobb oldalukon, így a teljes elfoglalt terület minimum 2 1/3 2/3 a lesz, így a kitöltöttség minimum 4/9. K2b csak a > 2 esetén fordul el. Egy sávba pontosan két ilyen 23
3.4. ábra. K2a-beli és R1-beli tárgyak elhelyezése, valamint K2b és R2-beli tárgyak elhelyezése elem kerülhet, így a ládába összesen 4. Az elfoglalt terület 4xy 4 1/3 a/3 = 4/9 a, a kitöltöttségi arány 4/9. Ezt az elhelyezést a 3.4 ábra szemlélteti. A K3-ba tartozó tárgyakat balról folytonosan, állítva pakoljuk egy ládába, majd ha nem fér bele az aktuális tárgy, akkor a ládát lezárjuk, és újat nyitunk. A kitöltöttségi arány megmutatására nem elég egy ládát nézni, néhány ládához a kövekez K3-as láda kitöltött részéb l hozzászámolunk egy darabot, természetesen azt a következ láda kitöltöttségébe már nem számoljuk bele. 3.2.2. Állítás. Minden K3 típusú láda aszimptotikus kitöltöttsége legalább 1/3, ha 4/3 < a < 2; és legalább 3/8, ha 2 a. Bizonyítás. Ha a 3/2, akkor pont két tárgy fér el; ezek összmérete több, mint 1/2, mivel 2 x y < 2 1/2 1/2 = 1/2. A láda mérete maximum 3/2, így a minimális kitöltöttség több, mint 1/2 = 1/3. A többi esetben azt mutatom meg, hogy egy láda 1/2 3/2 magasságig minden esetben ki lesz töltve, és általában szélességében csak 1/2 rész marad üresen. Ha mégsem, akkor a következ láda ennél nagyobb mértékben van kitöltve, ami a hiányt kompenzálja. Mivel y > 1/2, így magasságban 1/2-ig ki lesz töltve a láda. A láda szélességében u [0, 2/3) széles rész maradhat ki. Ha u < 1/2, akkor rendben van. Ha u > 1/2, akkor bontsuk fel u = 1/2 + v alakban. Ez esetben a soron lev tárgy, ami már nem fért bele a ládába, x > u = 1/2 + v széles, és y x > 1/2 + v magas. Ha az elhelyezett tárgy tetejér l képzeletben levágunk egy v magas sávot (továbbiakban pótsáv), akkor a megmaradt rész még mindig legalább 1/2 magasságú marad. Ha ezt a pótsávot elfordítjuk, és a régi láda végébe állítjuk, akkor annak már csak 1/2 rész fog hiányozni a szélességéb l. A pótsáv mérete miatt a magassága is el fogja érni az 1/2-et. A pótsáv áthelyezését a 3.5 ábra illusztrálja. A láda kitöltöttsége így minimum 1/2 (a 1/2), ez 3/2 a < 2 esetén minimum 1/3, a 2 a esetén pedig 3/8. 24
3.5. ábra. Két egymást követ K3-as láda pakolása, az áthelyezett pótsávot a két pöttyözött rész jelöli A rövid f csoportból az R1-beliek pakolásához két egyforma vízszintes sávra osztjuk a ládát, és a tárgyakat balról folyamatosan állítva pakoljuk a sávokba. Ezt addig folytatjuk, amíg olyan elem nem jön, ami már az egyik sávba sem fér bele, ekkor az eddig használ ládát lezárjuk, és új ládát nyitunk. Mindkét sáv 1/3 magasságig ki lesz töltve (ahol egyáltalán van benne valami), és maximum a/3 üres részek lesznek a jobb szélükön. Így a kitöltöttsége legalább 4/9 lesz. Az R2-be tartozókat szintén így pakoljuk két sávba. Mindkét sávban pont két tárgy fér el, a ládában 4 tárgy van, melyek összmérete 4xy 4 a/3 1/3 = (4/9)a, így a kitöltöttség minimum 4/9. R2-beli elemek csak a < 3/2 esetén vannak. 3.2.3. Megjegyzés. A K2a és R1; valamint a K2b és R2 típusú elemek pakolása megegyezik. Így a K2a és R1 számára elég egy ládát fenntartani, míg a K2b és R2-belieknek is elég összesen egy nyitott láda. A minik pakolásához az egy típusba tartozókat még tovább kell csoportosítani. Az M1-beli tárgyak további felosztásához deniáljuk a következ függvényt: g(y) := min{1/3 2 k 1/3 2 k y, k N}. Minden y magasságú ládát egy g(y) magasságú (szélesség ) sávba fogunk állítani (fektetni). A fekv sávok hossza nincs el re rögzítve, hanem az érkez tárgyak függvénye. Ezek közül az egyiket két oldalról fogjuk pakolni különböz méret elemekkel, a sáv akkor telik be, amikor középen már majdnem összeérnek a különböz típusú tárgyak. A ládát 3 darab 1/3 magasságú f sávra osztjuk. Ezek közül az alsót még két vízszintes 1/6 magas sávra osztjuk, de csak a jobb oldalán. A fels f sáv bal végének egy 1/12 széles részét további függ leges sávokra osztjuk fel, ezek rendre 1 12 2 k (k N) szélesek. Azokat a tárgyakat, melyekre g(y) = 1/3, balról folytonosan pakoljuk a f sávokba, el ször a fels be, majd a középs be,aztán az alsóba, egészen addig, amíg ezekben van hely. Az 1/6 magas sávba való tárgyakat jobbról pakoljuk folytonosan, mindig abba a kicsi sávba, amelyikben az utoljára elhelyezett tárgy bal széle jobbrább van. Ha 25
3.6. ábra. M1, és M3-beli tárgyak pakolása az alsó f sávban már nem fér el az aktuális 1/6-os tárgy, akkor a középs sávot ugyanúgy felosztjuk, mint kezdetben az alsót, és ide pakolunk tovább. Az ezeknél kisebb tárgyakat a nekik megfelel fels f sávban álló kicsi sávba fektetjük folytonosan. Ha egy ilyen kicsi sávban már nem fér el a soron lev tárgy, akkor nyitunk egy vele megegyez méret kicsi sávot, amit úgy helyezünk el az 1/3-os f sávban, mintha egy 1/3 magas tárgy lenne; innent l fogva ide pakoljuk az ennek megfelel méret elemeket. Egy láda akkor telik be, ha az éppen elhelyezend 1/3-os vagy 1/6-os tárgyat nem tudjuk elhelyezni, vagy nem tudunk új kicsi sávot nyitni egy elhelyezend 1/24-es, vagy annál kisebb tárgynak. Az M1-beliek pakolását a 3.6 ábra illusztrálja. 3.2.4. Megjegyzés. Az 1/24-es, és annál kisebb tárgyaknak nem feltétlenül kellene el re kis sávokat lefoglalni, mert lehet, hogy nem lesz rájuk szükség; viszont ekkor bonyolultabb lenne mindig megkeresni az aktuális tárgyhoz tartozó kicsi sáv helyét. Az M2-be tartozó tárgyak pakolása hasonlóan történik. A tárgyak besorolását a h(y) := min{1/4 2 k 1/4 2 k y} függvény adja meg. A ládát 4 darab 1/4 magas f sávra bontjuk, az alsó f sáv jobb oldalán két darab 1/8 széles kisebb sáv indul. 1/16 széles részt vágunk le a fels f sáv bal végéb l a kicsi sávoknak, amik rendre 1/16 2 k (k N) szélesek. A pakolás ugyanúgy történik, és itt is igaz marad a megjegyzés, csak 1/32-del. Az M3-ba tartozók pakolásához 4 darab 1/4 magas f sávra osztjuk fel a ládát. A fels sávot bal oldalról 3 kisebb 1/12 magas sávra bontjuk, az alsót pedig jobbról 4 darab 1/16 szélesre. Az el bbiekbe pakoljuk állítva azokat a tárgyakat, melyekre y > 1/16; az utóbbiakba pedig a többit. Ha egy f sávba már nem fér bele az aktuális tárgy, akkor közvetlenül alatta vagy fölötte nyitunk egy ugyanolyat, mint ami éppen betelt. Új ládát akkor nyitunk, ha valamelyik sávban összeérnek a tárgyak (az aktuálisan elhelyezend vagy egy 1/12-esbe, vagy egy 1/16-osba belelógna), vagy mind a 4 sáv betelt. Az M3-beli elemek pakolását is a 3.6 ábra illusztrálja. 26
3.2.5. Állítás. Az M1-be tartozó ládák kitöltöttségi aránya 4/3 a < 2 esetén 187/384 > 0.48, 2 a esetén 319/576 > 0.55. Az M2-be tartozó ládák kitöltöttségi aránya 4/3 a < 2 esetén 1111/2304 > 0.48, 2 a esetén 605/1152 > 0.52. Az M3-be tartozó ládák kitöltöttségi aránya 4/3 a < 2 esetén 79/128 > 0.61, 2 a esetén 365/576 > 0.63. Bizonyítás. M1 esetén a sávok a rövidebb oldaluk 3/4-éig mindig ki vannak töltve, mert az ennél kisebb tárgyak már M2-be kerülnek. A csak 1/3-os tárgyakat tartalmazó sávban maximum 1/3 széles rész marad üresen, mivel x y < 1/3, így az új sávot nyitó elem, ami már nem fért ide, kevesebb, mint 1/3 széles lehet. Ez összesen 1/3 1/3 = 1/9 területegység. A csak 1/6-os tárgyakat tartalmazóban pedig maximum 1/6 széles, ez 1/3 1/6 = 1/18 területegység. Amelyik sávban mindkét féle tárgy van, abban a maximális kimaradó terület 1/3 1/3 + 1/6 1/6 = 5/36. Az utóbbi tulajdonságú sávból csak egy lehet minden ládában, így a legtöbb üresen maradó rész akkor fordulhat el, ha kett 1/3-os, és egy vegyes sávunk van. Ez összesen 2 1/9 + 5/36 = 13/36 területegység. Az üresen maradó részhez még hozzá kell vennünk a kicsi sávokban kimaradó helyeket, ennek fels becsléseként tekinthetjük az összes megnyitott, de még nem lezárt kicsi sávot. Mivel minden sávméretb l összesen egy van, így ezek összterülete 1/3 1/12 = 1/36. Így már csak a lezárt kicsi sávok végén maradó kihasználatlan területet nem vettük gyelembe. Ez minden esetben maximum akkora lehet, mint a kicsi sáv szélessége, ez a legnagyobb, azaz 1/24 széles kicsi sávnál veszi fel a maximumát, ami a kicsi sáv területének az 1/8-a. Ez a szám a 3.2.2 állítás bizonyításához hasonló módon lecsökkenthet 1/12-re. Ha egy 1/24-es kicsi sáv végén 2/3 1/24+u = 1/36+u rész marad üresen, akkor a következ kicsi sávban az els tárgy minimum u-val szélesebb lesz, mint az eddig kitöltöttnek számolt 2/3 1/24 = 1/36 széles rész, így ezt a kilógó részt képzeletben az el z lezárt sávba helyezve, annak a kitöltetlen része minimum u 1/36-dal csökken, így a hosszanti kitöltöttsége 11/12 lesz. Ha ilyen 1/24 széles kicsi sávokkal lesz tele a láda, a kitöltöttség akkor is minimum 11/12 3/4 a 13/36 1/36. Ez 4/3 a < 2 esetén a = 4/3-nál veszi fel a minimumát, ami a 187/384 > 0.48. Másrészt 2 a esetén a = 2-ben, ahol 319/576 > 0.55. M2 esetén a rövidebb oldal szerint minimum 2/3-ig ki lesznek töltve a sávok. Az 1/4- es sávokban 1/4 1/4 rész marad maximum üresen, az 1/8-osban maximum 1/4 1/8, a vegyesben 1/4 1/4 + 1/8 1/8, a 4 sávban összesen (három 1/4-es, egy vegyes) maximum 3 1/4 1/4 + 1/4 1/4 + 1/8 1/8 = 17/64. A kitöltetlen kicsi sávok miatt legfeljebb 1/4 1/16 = 1/64 rész maradhat üresen. A lezárt kicsi sávok végén lev üres rész miatti kitöltési arány az el z höz hasonlóan 1/12-el csökkenhet. Így az összkitöltöttség minimum 27
11/12 2/3 a 17/64 1/64. Ez 4/3 a < 2 esetén a = 4/3-nál veszi fel a minimumát, ami a 1111/2304 > 0.48 Másrészt 2 a esetén a = 2-ben, ahol 605/1152 > 0.52. M3 pakolása esetén a sávok minimum 2/3 vagy 3/4 magasságig lesznek kitöltve. Így 2/3-dal számolva alsó becslést kapunk a kitöltöttségre. Egy csak 1/12-es tárgyakat tartalmazó befejezett f sávban maximum 1/4 1/12 terület rész marad üresen. Egy csak 1/16-os tárgyakat tartalmazóban legfeljebb 1/4 1/16. A vegyesben kevesebb mint 1/4 1/12+1/4 1/16. Négy ilyen összege maximum 3 1/4 1/12+1/4 1/12+1/4 1/16 = 19/192. Így a teljes láda kitöltöttsége több, mint 2/3 a 19/192. Ez 4/3 a < 2 esetén a a = 4/3-nál veszi fel a minimumát, ami 79/128 > 0.61. Másrészt 2 a esetén a = 2-ben, ahol 365/576 > 0.63. Ládatípus 4/3 a < 2 2 a H1 4/9 4/9 H2 4/9 4/9 H3 1/3 - K1 2/5 3/7 K2a és R1 4/9 4/9 K2b és R2 4/9 - K3 1/3 3/8 M1 >0.48 >0.55 M2 >0.48 >0.52 M3 >0.61 >0.63 3.1. táblázat. Kitöltöttségi arányok legrosszabb esetekben 3.3. Általános alsó korlát a feladatra A négyzetbe pakoló algoritmusokhoz hasonlóan itt arra adok alsó becslést, hogy egy algoritmus a legrosszabb esetben hányszor annyi ládát használhat, mint az optimális oine pakolás. Mivel a hatékonysági arány az a szám függvénye, így az a értékét l függ en több becslést adok. Az el z ekhez hasonlóan olyan ládasorozatokat fogok konstruálni, amiknek az optimális oine elhelyezése n darab egyformán kitöltött ládában történik. Mindhárom esetben el ször egy darab ilyen oine ládában szerepl tárgyakat fogom megadni. Majd az 28
D D D B A D D C 3.7. ábra. Oine pakolás az alsó korláthoz 4/3 < a 3/2 esetén oine ládában szerepl összes tárgyra megadom, hogy csak olyanból maximum mennyi fér el egy ládában. Ez alapján meg lehet mondani, hogy az egyes tárgyakból n darab mennyi ládában fér el. Ebb l pedig kiszámítható, hogy az n darab oine láda tárgyait minimum mennyi ládába pakolja akármelyik online algoritmus. Ha 4/3 < a < 3/2, akkor minden oine ládában lesz egy a/2 + ɛ, egy 1/2 + ɛ egy a/3 + ɛ és öt darab a/7 + ɛ oldalú négyzet. Ezeket rendre A, B, C, D bet kkel jelölve az elrendezés leolvasható a 3.7 ábráról. A maradék részt is teljesen kitöltjük akármilyen méret kicsi téglalapokkal, a továbbiakban ezeknek a neve apró téglalapok lesz. Jelöljük r-rel, azt, hogy az apró téglalapok a láda területének hányadrészét foglalják el. Ekkor r a a2 /4 1/4 a 2 /9 5 a 2 /49. Az a/2+ɛ oldalú négyzetekb l 1 fér bele egy ládába, az 1/2+ɛ a oldalúból kett, a/3 + ɛ oldalúból négy. Az a/7 + ɛ oldalú négyzetek esetén esetszétválasztást kell csinálni aszerint, hogy a > 5/7, vagy nem. Els esetben 4 láda fér el egymás felett, így a ládában összesen 24, második esetben 5 láda fér el egymás fölött, így a ládában összesen 30 darab pakolható. Így n darab oine láda tartalmának elpakolásához legalább n + n/2 + n/4 + 5 n/24 + n r ládát használ, ha a > 5/7, és n + n/2 + n/4 + 5 n/30 + n r ládát, ha a 5/7. Ha ezek közül a másodikat tekintjük, akkor egy alsó becslést kapunk. Ez a minimumát a = 3/2-ben veszi fel, ahol 2417/1176 n > 2.05 n. Így R 4/3<a<3/2 > 2.05. Ha 3/2 < a < 2, akkor az oine ládákban van egy a/2 + ɛ, és egy a/3 + ɛ oldalú négyzet, és egy oszlopban annyi a/7 + ɛ oldalú négyzet, amennyi elfér egymás felett. Ezt a 3.8 ábra is illusztrálja, a négyzeteket rendre A, B, C bet kkel jelölve. A maradék részt szintén kitöltjük apró téglalapokkal. Ez esetben r a a2 /4 a 2 /9 a/6 a. Mivel a/3 + ɛ > 1/2, így az ilyen oldalú négyzetekb l csak kett fér el egy ládában, a többi tárgyra ez a szám megegyezik az eddigivel. Most n darab oine láda tartalmát legalább n + n/2 + n/6 + n r ládába pakolja minden online algoritmus. Ez a minimumát a = 2 esetén veszi fel, ahol 16/9 n > 1.77n. Így R 3/2<a<2 > 1.77. 29
C A C C C B 3.8. ábra. Oine pakolás az alsó korláthoz 3/2 < a 2 esetén Ha 2 < a < 3, akkor az oine láda tartalmazzon kett darab a/3 + ɛ oldalú négyzetet, és egy a/4 + ɛ oldalú négyzetet. A kimaradó részt szintén apró téglalapokkal töltjük ki. Az a/3 + ɛ oldalú négyzetekb l most kett fér el egy ládában, az a/4 + ɛ oldalúakból 3. Az apró téglalapoknak kimaradó hely ebben az esetben r = a 2 a2 /9 a 2 /16. Így n darab a ilyen oine láda tartalmát minimum 2 n/2 + n/3 + n r ládába pakolja bármelyik online algoritmus. Ennek minimuma a = 3-ban van, ahol 71/48 n > 1.47n. Ezért R2<a<3 > 1.47. 3.4. Fels korlát az algoritmusra El ször a 4/3 < a < 2 esetet nézzük. Legyen L elpakolni való kis téglalapok n elem sorozata. Jelölje h 3 azoknak a ládáknak a számát, amennyibe az algoritmus H3 típusú tárgyakat pakolna az L sorozatból; k 3 pedig azoknak a számát, amennyit K3 típusúak pakolására használna. Jelölje S az L sorozatban lév tárgyak összterületét, S h3 k 3 pedig a H3-on és K3-on kívüli tárgyak összterületét. Mivel az algoritmus a H3 és K3 típusú tárgyak kivételével a ládákat minimum 2/5 arányban kitölti, így az ezen kívüli elemeket maximum 2, 5 S h3 k 3 + O(1) ládába pakolja. Így összesen maximum k 3 + h 3 + 2, 5 S h3, k 3 + O(1) ládát használ. Az optimális online pakolásra igazak az alábbiak: minimum annyi ládát használ, amennyi a tárgyak összterülete minimum annyi ládát használ, amennyi H3-beli tárgy van a sorozatban, mivel ezekb l mindig 1 darab kerülhet az online algoritmus szerint is egy ládába, ezért ezek darabszáma legalább h 3 minimum h 3 + 2/3 (k 3 1/2 h 3 ) ládát használ. Mivel, ha K3 és H3 beli tárgyak is vannak, akkor ha az oine el ször a H3-beli elemeket rakodja egyesével ládákba, akkor minden H3-at már tartalmazó ládába még maximum egy darab K3-beli elemet még el lehet helyezni. Mivel az online minimum 2 darab K3-beli elemet rakott egy 30