Кіріспе

Комбинаторикадағы классикалық мәселе

Жинақ жапқышы мәселесі – комбинаторика, компьютерлік ғылым, операциялар зерттеулері және күрделілік теориясындағы классикалық сұрақ. {1, 2, ..., n} элементтер жиынтығы (әлем) және м қосалқы жиынтықтардың S жиыны берілген, олардың бірігісі әлемге тең. Жинақ жапқышы мәселесі – бұл әлемге тең болатын S-тің ең кіші қосалқы жиынтығын анықтау. Мысалы, әлем U = {1, 2, 3, 4, 5} және жиындар S = { {1, 2, 3}, {2, 4}, {3, 4}, {4, 5} } болсын. S-тің бірігісі U-ға тең. Дегенмен, барлық элементтерді тек екі жиынмен жабуға болады: { {1, 2, 3}, {4, 5} }, суретті қараңыз. Сондықтан, жинақ жапқышы мәселесінің шешімі 2-ге тең. Көбірек формальды түрде, әлем және оның қосалқы жиынтықтар отбасы берілген кезде, жинақ жапқышы – жиынтықтардың қосалқы тобы, олардың бірігісі әлемге тең болады.

Жинақ жапқышын шешу мәселесінде кіріс – жұп және бүтін сан; сұрақ – әлемді жабу үшін өлшемі немесе одан кем жинақ жапқышы бар ма? Жинақ жапқышын оңтайландыру мәселесінде кіріс – жұп , ал міндет – ең аз жиынтықты пайдаланатын жинақ жапқышын табу. Жинақ жабудың шешімдік нұсқасы NP-толық. Бұл 1972 жылы Карп көрсеткен 21 NP-толық проблеманың бірі. Жинақ жабудың оңтайландыру/іздеу нұсқасы NP-қиын. Бұл «оның зерттеуі бүкіл сала үшін негізгі техникалардың дамуына әкелген» мәселе.

Нұсқалар

Салмақты жиынтық жапқыш мәселесінде әр жиынтыққа оң салмақ беріледі (оның құнын көрсетеді), ал мақсат – ең аз салмақты жиынтық жапқышты табу. Әдеттегі (салмақталмаған) жиынтық жапқыш салмағы 1-ге тең барлық жиынтықтарға сәйкес келеді. Фракциялық жиынтық жапқыш мәселесінде жиынтықтың толық бөліктерін емес, жиынтықтардың бөлшек бөліктерін таңдауға рұқсат етіледі. Фракциялық жиынтық жапқыш – бұл әр жиынтыққа фракция (0-ден 1-ге дейінгі сан) тағайындау, яғни ғаламдағы әр элемент x үшін, x кіретін жиынтықтардың фракцияларының қосындысы кем дегенде 1-ге тең болуы керек. Мақсат – фракциялардың қосындысы ең аз болатын фракциялық жиынтық жапқышты табу. Ескеріңіз, (әдеттегі) жиынтық жапқыш – бұл барлық фракциялары 0 немесе 1 болатын фракциялық жиынтық жапқышқа тең; сондықтан ең кішкентай фракциялық жапқыштың мөлшері ең кішкентай жапқыштың мөлшеріне тең немесе одан кіші болуы мүмкін. Мысалы, 1=U = {1, 2, 3} ғаламын және 1=S = { {1, 2}, {2, 3}, {3, 1} } жиынтығын қарастырайық. Ең кішкентай жиынтық жапқыштың мөлшері 2-ге тең, мысалы 1={ {1, 2}, {2, 3} }. Бірақ әр жиынның 0,5 бөлігі алынған 1,5 мөлшерлі фракциялық жиынтық жапқыш бар.

Сызықтық бағдарламаны құру

Жинақтарды жабу мәселесі келесі бүтін сандық сызықтық бағдарлама (ILP) түрінде қойылған: minimize (жинақтар санын азайту) subject to for all (әлемнің әрбір элементін қамту) for all (әрбір жиын жиынтыққа кіреді немесе кірмейді) Жабу шектеуін ықшамдау үшін, инциденттік матрицасын анықтауға болады, онда әрбір қатар элементке, ал әрбір баған жиынға сәйкес келеді, және егер элемент e жиын s-де болса, әйтпесе . Содан кейін, жабу шектеуін былай жазуға болады: Салмақты жиынды жабу жоғарыда келтірілген бағдарламамен бірдей сипатталады, бірақ азайтылатын мақсатты функция - , мұнда жиынның салмағы болады. Бөлшекті жиынды жабу жоғарыда келтірілген бағдарламамен бірдей сипатталады, бірақ ол бүтін сан емес болуы мүмкін, сондықтан соңғы шектеу мынамен алмастырылады: Бұл сызықтық бағдарлама жабу мәселелері үшін LP-нің жалпы класына жатады, өйткені мақсатты функциядағы барлық коэффициенттер және шектеулердің екі жағы да теріс емес. ILP-нің толықтық аралығы ең көп (әлемнің мөлшері қайда). Оның бос етуі, шындығында, ең аз жиынды жабу мәселесі үшін факторлық жуықтау алгоритмін береді. Толық түсіндіру үшін кездейсоқ дөңгелектеу #setcover қараңыз.

Төмен жиіліктегі жүйелер

Егер әрбір элемент ең көп жиынтықта кездессе, онда LP-релаксацияны қолдану арқылы оптималдыққа жақын, белгілі бір дәрежеде жуық шешімді полиномиалдық уақытта табуға болады. Егер жоғарыда көрсетілген бүтін сандық сызықтық бағдарламадағы шектеу for all in арқылы ауыстырылса, онда ол (бүтін сан емес) сызықтық бағдарламаға айналады. Алгоритмді былай сипаттауға болады: Сызықтық бағдарламаларды шешудің полиномиалдық уақыт әдісін қолдана отырып, бағдарлама үшін оңтайлы шешім табыңыз. Шешімде сәйкес айнымалысы кем дегенде 1/ мәніне ие барлық жиындарды таңдаңыз.

Қарап тұрмаушылық нәтижелері

Әлемнің көлемін қарастырғанда, NP квазиполиномиалдық уақыт алгоритмдеріне ие болмаса, жиынтықтарды қамтуды полиномиалдық уақытта 1/2-ге дейін жуықтау мүмкін емес екенін көрсетті. Feige (1998) осы төменгі шекті сол болжамдар бойынша 7/8-ге дейін жақсартты, бұл ашкөз алгоритмнің қол жеткізген жуықтау қатынасына жақын мән. одан әрі, белгілі бір тұрақты үшін, PNP болжамы бойынша төменгі шек белгіледі. Жақында одан да жоғары мәнді ұқсас нәтиже дәлелденді, ал көрсетті, егер PNP болмаса, оны 1/2-ге дейін жуықтау мүмкін емес екенін дәлелдеу арқылы жиынтықтарды қамтудың ең жақсы жуықтау мүмкін еместігін көрсетті.

Салмақты жинақ жапқышы

Жоғарыда айтылған салмақталған жиынтық жабын үшін толық санды сызықтық бағдарламаны жеңілдету арқылы, факторлық жуықтау алу үшін кездейсоқ дөңгелектеуді қолдануға болады. Салмақталмаған жиынтық жабын салмақталған жағдайға бейімделуі мүмкін.