| | 1 | = Egyszerűsített kupacok = |
| | 2 | |
| | 3 | Kulcsmódosítás nélküli, egyszerűsített kupac adatszerkezetek implementálása és alkalmazása a Dijkstra-algoritmusban. |
| | 4 | |
| | 5 | == Háttér == |
| | 6 | |
| | 7 | Sok algoritmus épül prioritásos sorok használatára, köztük az egyik legalapvetőbb gráfalgoritmus, a Dijkstra-algoritmus is. A prioritásos sort általában valamilyen [http://en.wikipedia.org/wiki/Heap_%28data_structure%29 kupac adatszerkezettel] valósítjuk meg (pl. a klasszikus [http://en.wikipedia.org/wiki/Binary_heap bináris kupaccal]). Fontos kérdés, hogy az alapvető műveletek (elem beszúrása, minimális kulcsú elem kivétele) mellett van-e lehetőség arra, hogy egy, már a kupacban lévő elem kulcsát csökkentsük. A Dijkstra-algoritmusban erre szükségünk van, de a szokásos implementáció (pl. amit a LEMON-ban található kupac struktúrákban is alkalmazunk) helyett egy másik lehetőség, hogy az érintett elemet beszúrjuk újra a kupacba a módosított, kisebb kulccsal. Kivételkor a legkisebb (legjobb) kulcsértékkel rendelkező előfordulását fogjuk először megkapni, a többi felesleges előfordulását pedig később könnyen kiszűrhetjük ha nyilvántartjuk, hogy mely elemeket vettük már ki a kupacból. |
| | 8 | |
| | 9 | Ez a változat tulajdonképpen egy egyszerűsítést jelent, hiszen egyrészt kevesebb műveletet kell megvalósítanunk, másrészt pedig ezáltal elkerülhetjük, hogy a kupacban lévő elemekről tárolnunk kelljen az aktuális elhelyezkedésüket (a kulcscsökkentéshez erre szükségünk van, de a többi alapművelethez nincs). Így a beszúrás és törlés műveletek gyorsabbá válhatnak. |
| | 10 | |
| | 11 | Mivel a gyakorlatban előforduló útvonalkeresések esetén kulcscsökkentésre tipikusan viszonylag ritkán van szükség, az egyszerűsített kupacok hatékonyabbak lehetnek. Több tanulmány is született, amely ezt támasztja alá, pl. |
| | 12 | * [ftp://ftp.cs.utexas.edu/pub/techreports/honor_theses/cs-07-36-chen.pdf Mo Chen. Measuring and Improving the Performance of Cache-efficient Priority Queues in Dijkstra's Algorithm] |
| | 13 | * [ftp://ftp.cs.utexas.edu/pub/techreports/tr07-54.pdf Mo Chen et. al. Priority Queues and Dijkstra's Algorithm] |
| | 14 | |
| | 15 | |
| | 16 | == Feladat == |
| | 17 | |
| | 18 | A feladat néhány fontos kupac adatszerkezetből kulcscsökkentés nélküli változat implementálása, valamint a Dijkstra-algoritmusban mért hatékonyságuk alapos összehasonlító elemzése különböző gráfokon. Egy lehetséges folytatás további speciális kupac adatszerkezetek implementálása és összehasonlítása. |
| | 19 | |
| | 20 | A feladatkör BSc/MSc szakdolgozat és TDK alapjául is szolgálhat, akár több jelentkező számára is. |
| | 21 | |
| | 22 | '''Kapcsolódó ticketek:''' #381, #313. |
| | 23 | |
| | 24 | == Előfeltételek == |
| | 25 | |
| | 26 | - C++ programozási nyelv ismerete |
| | 27 | - alapvető gráfelméleti ismeretek |
| | 28 | - angol nyelvismeret |