feladatok algoritmusok

Jó napot kívánok. A gólya egyetemi oktató egyetemi olvasni az éves ráta algoritmusok. Minden előadás után egy műhely, melyben elemezni algoritmikus feladatokat. Műhelyeket kiscsoportos. Ez félévben előadás, és vezet a gyakorlatban a csoportban.

Ma szeretném megosztani veletek két probléma ezekkel a szemináriumokon.

Probléma 1. A vonal adott n szegmenseket, akkor ki kell választania a maximális méret részhalmaza diszjunkt.

Probléma 2. köríveinek n (vonalak), akkor ki kell választani a maximális méret diszjunkt részhalmaza.

Az első feladat - az egyik példája a „mohó”. Az oldatot megtekinthető az alábbiakban. Röviden, azt feltételezzük, osztályozási döntést az O (rendezési + n). Itt kérem egyfajta időt válogatás a tömb hossza n. Mellesleg, a fajta - adott esetben nlogn (például vödör rendezés, radix sort, a bemeneti adatokat egy korlátozott tartományban).

A második probléma van egy megoldás a szép valószínűségi O (rendezési + n). Annak ellenére, hogy a hasonlóság, hogy az első, a második feladat a homlokon kapzsiság nem lehet megoldani. Vagy inkább nem tudom, személyesen mohó megoldás, ha az olvasók jön fel, és megosztani, én szívesen hallani. És így könnyebb volt úgy gondolja, én csak leírtam egy pár ötletet a nem teljesítő, a legtöbb pop-up, hogy megoldja ezt a problémát, amikor megpróbálja:

  • Legyen egy kör egy pont nem vonatkozik olyan szegmenst, akkor egy kört lehet vágni ezen a ponton, és kap a feladat, amely közvetlenül, már tudjuk, hogyan kell megoldani!
    Igen. De ezeket a pontokat nem lehet. Továbbá, minden egyes pontot a kör kerületén bevonhatjuk 2, 10, vagy akár Θ (n) szegmensek
  • Vágjuk a kör egy ponton borított minimális szegmensek száma!
    Ez nem működik. Képzeljünk el három partíció 10 szegmensek a kerület mentén. Összesen 30 db. A két ilyen „partíciók” szegmensek kissé átfedik egymást. Meg kell kitalálni a harmadik partíciók és válassza ki a vágási pontot végétől egy ilyen 10 szegmens.
  • Előnyös, hogy válaszul a legrövidebb intervallumot!
    Nem. Még az egyenes vonalon már nem igaz: (0,49) (50.100) (48.51)
  • Nyereséges dobja a különböző leghosszabb időtartam, ameddig valaki keresztezi!
    Nem. Lásd az előző példában.
  • És így tovább.
    Sok nem-teljesítő ötletek megállítsuk a már hangoztatott.

problémák megoldása

1. megoldás.
Mindegyik szegmens i a bal végét L [i] és a jobb vége R [i]. Rendezés a szegmensek emelkedő sorrendben R [i]. Ily módon fogjuk rendezni a szegmensben. A következő szegmens kerül majd a választ, ha ez nagyobb, mint a felső határt a bal jobb oldali határait már felvett szegmensben.

2. megoldás.
Figyelmeztetem, a döntés hosszú és sokkal nehezebb előzőt. Másrészt alapvetően összetett gondolatok nincs itt, úgyhogy mindent meg lehet érteni, anélkül, hogy az alapképzés.

Kezdjük azzal, hogy egy sor ív a kör. Legyen egy kört - végtelenített szegmens [0..M), és ívek (szegmensek) vannak beállítva páronként kerületileg L [i] .. R [i]. Ha R [i] Az alapötlet az oldat - megtalálják azt a pontot, ahol meg lehet vágni egy kört. Inkább, mint ez: válasszon egy szegmens i, amelyhez végrehajt. Ha egy szegmens i van rögzítve, a kör lehet vágni, például a ponton R [i].

Bemutatjuk az összes objektum egy kört, hogy megoldja a problémát nem túl kényelmes. Ezért a technika „megduplázása a kör”, lépni a sorban.
1. Ha egy bizonyos szegmens R [i] 2. Minden olyan szegmens L [i] .. R [i] megduplázza generáljuk L [i] + M..R [i] + M

Most van 2n szegmenseket a sorban, és vágott egy kört egy pont x hosszának felel meg az ebben a sorban [x..x + M), ahol a 0 <= x

2. megoldás O (rendezési + n 2). Szűrjük, ha a szegmensek a jobb oldali végén, akkor iterációt n lehetséges vágási pontjaira R [i], megoldása az egyes feladatokra O (n), valamint a feladatot 1.

2. megoldás O (rendezési + NK). ahol k - a méret a készlet, a válasz a problémára. Hagyja válogatás.
És azonnal válogatás után használatra két pointert és O (n) minden egyes szegmens i megszámoltuk következő szegmens következő [i], hogy mi lenne, hogy a mi aviditású (kapzsiság: L [következő [i]]> R [i], az ilyen Következő [i] = min).

Most nézzük, hogy egy érdekes megfigyelés: Attól függően, hogy a méret a vágott ponthalmazok általunk kapott eltér az optimális legfeljebb 1 Azaz, ha vágják az első pont, és a mérete a k kapott egy csomó, ez elegendő ahhoz, hogy megtalálják a készlet K-1 méretű, és ez ez biztosan optimális.

Megoldás: hajtogat az első szakasz, akkor k-2 lépés előre a következő linkek, ha a távolság a jobb és a bal szélső pontja legfeljebb M találtunk k-1 nem metsző ívek.

Oldatos O (rendezési + n)
Vegyünk egy véletlen időpontban i = random [0..n-1]. Az egyes I O (k) próbálja a = következő [i], a fenti kódot.
Mert ha a válasz a k-1 szegmens létezik, ez elég volt ahhoz, hogy bekerüljön néhány ilyen k-1, akkor annak a valószínűsége, hogy a kísérlet nem jutottunk, amikor megy a végtelenségig. Megjegyezzük, hogy ha a = Θ (1), az előző algoritmus O (nk) teljesen elrendezve. Ie kaptunk egy randomizált algoritmus, melynek futási ideje O (sort + n). Ahhoz, hogy jobb hiba e -T. ahhoz, hogy ne próbálja meg. és pontok, a művelet rendre, hogy O (rendezési + Tn).

Ez nem mindig elég egy bizonyos téma kész feladatok, hogy dolgozzon ki rendszeresen újakra. Mi csak nézte egy vicces hatást: végy egy klasszikus egyszerű feladat válogatás, cserélje ki a „közvetlen” és a „kör”, akkor egy komplex probléma az eljárás két-mutatók és valószínűségi ötlet. Sok érdekes tanulási feladatok és kitalált. By the way, próbálja megoldani a másik két probléma:
Probléma 3. Tekintettel n szegmensek a sorban válassza ki a maximális mérete részhalmaza szegmensek, mint hogy minden ponton fedi legfeljebb k-szor (ez már csak megoldható k = 1).
4. feladat adott n ívek (szegmensek) egy körön ... és ugyanazt a feladatot.

Még több problémát

Kapcsolódó cikkek