AlgoritmusokA matroidos megközelítésből adódó módszerA matroid a következő: S a munkák halmaza, a súly a munkák értéke, I pedig S azon részhalmazaiból áll, amelyekre teljesül, hogy a bennük szereplő munkák teljesíthetők. Ekkor a matroidos mohó algoritmus egyetlen nyitott problémája az, hogyan tesztelhetjük, hogy munkák egy halmaza független-e.
Ehhez a következőket érdemes észrevenni: ha vesszük azokat a munkákat, amelyek határideje legfeljebb K, akkor ilyen munkából nem lehet K-nál több, hiszen 1-től K-ig csak K nap van, és minden munkához kell teljes nap. Ami érdekesebb, hogy ez a szükséges feltétel elégséges is: ha minden K-ra legfeljebb K olyan munka van, aminek határideje legfeljebb K, akkor a munkák elvégezhetők. Ennek bizonyítása lehet például a lusta ütemezés: egy munkáról mindig csak a határidő napján döntsünk (így persze visszamenőleg is be kell ütemeznünk feladatokat, vagyis magyarosan annyit mondhatunk: "meg lehetett volna csinálni..."). A döntés pillanatában biztos hogy az 1., 2., ..,K. napok közül legalább az egyik szabad, a feltétel miatt, oda beütemezhetjük az adott munkát.
Az előző módszer gyorsításaA függetlenség vizsgálatát helyettesíthetjük a következő ötlettel (ami egy mohó algoritmus a mohó algoritmuson belül): továbbra is a munkák ára szerinti csökkenő sorrendben haladunk. Amikor egy munkát be akarunk venni, akkor először a határideje napjára tesszük. Ha erre a napra már más munka van ütemezve, akkor keresünk egy korábbi időpontot. Ha minden korábbi nap is foglalt, akkor ezt a munkát nem választjuk be. Érezhető, hogy ez a módszer jó, hiszen csak akkor hagyunk ki egy K határidejű P árú munkát, ha az 1.,2., ..., K. napok mindegyikére van már munka ütemezve, ráadásul csupa P-nél nem olcsóbb munka. Döntés a határidők csökkenő sorrendje szerint KódokUray János (C++): uj_palyazat.pas |