Problém s půjčováním lyží - Ski rental problem

v počítačová věda, problém s půjčováním lyží je název pojmenovaný pro třídu problémů, ve kterých je na výběr mezi pokračováním v platbě opakujících se nákladů nebo platbou jednorázových nákladů, které eliminují nebo snižují opakující se náklady.

Problém

Mnoho online problémy mít dílčí problém zvaný problém s nájmem / nákupem. Musíme se rozhodnout, zda zůstat v aktuálním stavu a zaplatit určitou částku nákladů za jednotku času, nebo přejít do jiného státu a zaplatit nějaké pevné velké náklady bez dalších plateb.[1] Půjčovna lyží[2][3] je jedním z příkladů, kdy pronájem / koupě představuje celý problém. Jeho základní verze je:

Osoba se chystá lyžovat neznámý počet dní. Pronájem lyží stojí 1 $ na den a nákup lyží stojí 10 $. Každý den se musí člověk rozhodnout, zda si bude i nadále půjčovat lyže na jeden den nebo si koupí pár lyží. Pokud daná osoba předem ví, kolik dní bude lyžovat, může se rozhodnout pro své minimální náklady. Pokud bude lyžovat déle než 10 dní, bude levnější koupit lyže, ale pokud bude lyžovat méně než 10 dní, bude levnější si půjčit. Co by měla, když předem neví, kolik dní se bude lyžovat?[Citace je zapotřebí ]

Formálně lze problém nastavit následujícím způsobem. Existuje několik dní d (neznámé), že osoba bude lyžovat. Cílem je najít algoritmus, který minimalizuje poměr mezi tím, co člověk zaplatí pomocí algoritmu (který neví d) a co by daná osoba optimálně zaplatila, kdyby to věděla d dopředu. Problém je obecně analyzován v nejhorším případě, kdy je algoritmus pevný a poté se podíváme na výkonnost algoritmu v nejhorším případě přes všechny možné d. Zejména neexistují žádné předpoklady týkající se distribuce d (a je to snadno vidět, se znalostí distribuce d, upřednostňovala by se jiná analýza i jiná řešení).[Citace je zapotřebí ]

Algoritmus zvratu

Algoritmus rentability dává člověku pokyn, aby si pronajal na 9 dní a koupil si lyže 10. den ráno, pokud ještě lyžuje.[4] Pokud musíte během prvních 9 dnů přestat lyžovat, stojí to stejně jako to, co byste zaplatili, kdyby jste věděli, kolik dní se lyžuje. Pokud člověk musí přestat lyžovat po 10. dni, jeho cena je 19 USD, což je o 90% více, než kolik by člověk zaplatil, kdyby věděl počet dní, kdy by mohl lyžovat předem. Toto je nejhorší případ pro algoritmus rentability.

Algoritmus zvratu je znám jako nejlepší deterministický algoritmus pro tento problém.

Rovnoměrné

Osoba může hodit mincí. Pokud to přijde, koupí lyže osmý den; jinak si koupí lyže 10. den. Toto je příklad a randomizovaný algoritmus. Očekávané náklady jsou nejvýše o 80% vyšší, než kolik by daná osoba zaplatila, kdyby věděla, kolik dní bude lyžovat, bez ohledu na to, kolik dní lyžuje. Zejména pokud osoba lyžuje po dobu 10 dnů, její očekávaná cena je 1/2 [7 +10] + 1/2 [9 + 10] = 18 dolarů, pouze 80% přebytek místo 90%.

Randomizovaný algoritmus lze chápat jako složení různých algoritmů, z nichž každý se vyskytuje s danou pravděpodobností. Definujeme očekávaný konkurenční poměr na dané instanci i jako:

, kde je daný konkurenční poměr například i .

V důsledku toho je konkurenční poměr randomizovaného algoritmu dán nejhorší hodnotou ve všech uvedených případech. V případě půjčení lyží na převrácení mincí si povšimněte, že randomizovaný algoritmus má 2 možné větve: Pokud se mince objeví na hlavě, nakupujeme 8. den, jinak nakupujeme 10. den. a , resp. , pro . , , a , pro .

Proto je konkurenční poměr náhodného algoritmu převrácení mincí půjčovny lyží 1,8.

Nejlepší randomizovaný algoritmus proti zapomnětlivý protivník je vybrat si náhodně nějaký den podle následujícího rozdělení p, pronajmout si i-1 dny a koupit si lyže ráno, i když ještě jsou na lyžích. Karlin a kol.[2] nejprve představil tento algoritmus s distribucíkde nákup lyží stojí $ a pronájem stojí $ 1. Jeho očekávaná cena je maximálně e / (e-1) 1,58násobek částky, kterou by člověk zaplatil, kdyby věděl, kolik dní by se lyžovalo. Žádný randomizovaný algoritmus nemůže být lepší.

Aplikace

  • Snoopy ukládání do mezipaměti:[2] několik mezipamětí sdílí stejný paměťový prostor, který je rozdělen na bloky. Když mezipaměť zapisuje do bloku, mezipaměti, které sdílejí blok, stráví aktualizací 1 cyklus sběrnice. Tyto mezipaměti mohou zneplatnit blok, aby se zabránilo nákladům na aktualizaci. Existuje ale pokuta p cyklů sběrnice za zneplatnění bloku z mezipaměti, která k němu krátce poté potřebuje přístup. Můžeme rozdělit sekvence požadavku na zápis pro několik mezipamětí na sekvence požadavků pro dvě mezipaměti. Jedna mezipaměť provádí sekvenci operací zápisu do bloku. Druhá mezipaměť se musí rozhodnout, zda se má aktualizovat zaplacením 1 sběrnicového cyklu za operaci, nebo zneplatnit blok zaplacením p sběrnicových cyklů pro budoucí žádost o čtení sama. Dva mezipaměti, jeden blok snoopy ukládání do mezipaměti problém je jen problém s půjčováním lyží.
  • Potvrzení TCP:[5] Proud paketů dorazí na místo určení a vyžaduje protokol TCP, aby byl potvrzen při příjezdu. Můžeme však použít jeden potvrzovací paket k současnému potvrzení několika nevyřízených paketů, čímž se sníží režie potvrzení. Na druhou stranu, přílišné zpoždění potvrzení může narušit mechanismy kontroly přetížení TCP, a proto bychom neměli dovolit, aby se latence mezi časem příjezdu paketu a časem, kdy je potvrzení odesláno, příliš zvýšila. Karlin a kol.[6] popsal jednoparametrovou rodinu vstupů, která se nazývá základní vstupy, a ukázal, že když je omezen na tyto základní vstupy, problém s potvrzením TCP se chová stejně jako problém s půjčováním lyží.
  • Celkové plánování času dokončení:[1] Chceme naplánovat úlohy s pevnou dobou zpracování na m identických strojích. Doba zpracování úlohy j je strj. Každá úloha se stane známou plánovači v době jejího vydání rj. Cílem je minimalizovat součet časů dokončení u všech úloh. Zjednodušeným problémem je jeden jediný stroj s následujícím vstupem: v čase 0 přijde úloha s časem zpracování 1; k úlohy s dobou zpracování 0 dorazí v neznámém čase. Musíme si vybrat čas zahájení pro první práci. Čekání způsobí cenu 1 za časovou jednotku, ale zahájení první úlohy před pozdějšími k úlohami může v nejhorším případě způsobit další náklady k. Na tento zjednodušený problém lze pohlížet jako na průběžnou verzi problému s půjčováním lyží.
  • Refaktoring versus práce se špatným designem: Při vývoji softwaru si inženýři musí vybrat mezi třením a rizikem chyb při práci s příliš složitým designem a snížením složitosti designu před provedením změny. Zvláštní náklady na každou změnu se starým designem jsou náklady na „pronájem“, náklady na refaktoring jsou náklady na „nákup“. „Kolikrát člověk pracuje se špatným designem, než jej vyčistí?“ je problém s půjčováním lyží.

Viz také

Reference

  1. ^ A b Steven S. Seiden. Hádací hra a randomizované online algoritmy. Výroční ACM symposium o teorii práce na počítači, 2000. http://portal.acm.org/citation.cfm?id=335385
  2. ^ A b C A. R. Karlin, M. S. Manasse, L. A. McGeoch a S. Owicki. Konkurenční randomizované algoritmy pro nejednotné problémy. In Proceedings of the First Annual ACM-SIAM Symposium on Discrete Algorithms, San Francisco, CA, 22 鈥 ledna 1990, str. 301-309. Také v Algorithmica, 11 (6): 542-571, 1994. http://courses.csail.mit.edu/6.895/fall03/handouts/papers/karlin.pdf
  3. ^ Claire Mathieu. Brown University. Poznámka k přednášce: http://www.cs.brown.edu/~claire/Talks/skirental.pdf
  4. ^ A. R. Karlin, M. Manasse, L. Rudolph a D. Sleator. Konkurenční snoopy ukládání do mezipaměti. Algorithmica, 3 (1): 79-119, 1988
  5. ^ D. R. Dooly, S. A. Goldman a S. D. Scott. Zpoždění dynamického potvrzení TCP: teorie a praxe. Ve sborníku z třicátého výročního sympozia ACM o teorii výpočtů (STOC), Dallas, TX, str. 389-398, 1998.
  6. ^ Anna R. Karlin a Claire Kenyon a Dana Randall. Dynamické potvrzení TCP a další příběhy o e / (e-1). Třicáté třetí výroční sympozium ACM o teorii práce na počítači (STOC), 2001. Algorithmica. http://www.cs.brown.edu/people/claire/Publis/ACKpaper.ps