Кіріспе

Жинақтарды жинақтау – есептеу күрделілігі теориясы мен комбинаторикадағы классикалық NP-толық проблемасы және Карптың 21 NP-толық проблемасының бірі. Егер бізде S шекті жиыны және S-тің кіші жиындарының тізімі болса, жинақтарды жинақтау мәселесі тізімдегі кейбір k кіші жиынның жұптық ажыратылмауын сұрайды (яғни, олардың ешқайсысы ортақ элементке ие емес). Формальды түрде, ғалам мен кіші жиындардың отбасы берілгенде, жинақтау – бұл барлық кіші жиындары жұптық ажыратылған жиынтардың кіші отбасы. Жинақтаудың өлшемі – бұл жинақтағы жиынтардың саны. Жинақтарды жинақтау шешім мәселесінде кіріс – жұп және бүтін сан; сұрақ – қаптаманың өлшемі кеміндегісінен көп пе? Жинақтарды жинақтауды оңтайландыру мәселесінде кіріс – бұл жұп , ал міндет – ең көп жиынды пайдаланатын жинақтауды табу. Мәселе анық NP класында, өйткені берілген кіші жиындардың жұптық ажыратылмауын полиномдық уақытта оңай тексеруге болады. Мәселенің оңтайландыру нұсқасы, максималды жинақтарды жинақтау, тізімдегі жұптық ажыратылған жиынтардың максималды санын табуды талап етеді. Бұл – бүтін сандық сызықтық бағдарлама ретінде табиғи түрде құрастырылатын максималдау мәселесі, және ол жинақтау мәселелері класына жатады.

Бүкіл сандар сызықтық бағдарламасын құру

Максималды жиынтықты жинақтау мәселесі келесі бүтін санды сызықтық бағдарлама ретінде қойылуы мүмкін. maximize (қосалқы жиынтықтардың жалпы санын барынша арттыру) subject to for all (таңдалған жиынтықтар өзара келіспеуі керек) for all (әрбір жиынтық жиынтықты жинақтауға кіреді немесе кірмейді).

Күрделілігі

Жинақтарды жинақтау мәселесі тек NP-толық ғана емес, сонымен қатар оның оңтайландырылған нұсқасы (жалпы ең үлкен жиынтықты жинақтау мәселесі) ең үлкен клика мәселесінен кем емес қиындықпен шамалануға болатыны дәлелденді; атап айтқанда, оны кез келген тұрақты коэффициент ішінде шамалану мүмкін емес. Салмақты нұсқасы да шамалануға болады.

Өлшемі шектелген орама жиынтығы

Мәселенің оңайырақ шешілетін нұсқасы бар. Кез келген k≥3 оң бүтін саны үшін, k жиынтықты жинақтау мәселесі – әрбір жиынның құрамында ең көп дегенде k элемент болатын жиынтықты жинақтау мәселесінің бір түрі. k=1 болғанда, мәселе тривиальды. k=2 болғанда, мәселе полиномиалдық уақытта шешілетін максималды сәйкестікті табуға эквивалентті. Кез келген k≥3 үшін мәселе NP-қиын, себебі ол 3 өлшемді сәйкестендіруден де жалпылама. Дегенмен, тұрақты факторлы жуықтау алгоритмдері бар: Циган кез келген ε>0 үшін (k+1+ε)/3 жуықтауын қамтамасыз ететін алгоритм ұсынды. Орындалу уақыты жиындар мен элементтер санына қатысты полиномиалды, бірақ 1/ε-ға қатысты қос экспоненциалды. Фюрер мен Ю бірдей жуықтауға жететін, бірақ орындалу уақыты 1/ε-ға қатысты бір экспоненциалды алгоритм ұсынды.

Сызықты таңбалар

Басқа, шешуге оңай нұсқада, егер бірде-бір элемент d-ден көп жиынтықта кездеспесе, жауап d еселік қателікпен жуықтастырылуы мүмкін. Бұл салмақты нұсқа үшін де сәйкес келеді.

Ерекше жағдайлар

Графикті сәйкестендіру – бұл барлық жиынтықтардың мөлшері 2-ге тең болатын жиынтықтарды жинақтаудың ерекше жағдайы (жиынтықтар қабырғаларға сәйкес келеді). Осы ерекше жағдайда, ең үлкен мөлшердегі сәйкестікті полиномиалдық уақытта табуға болады. 3 өлшемді сәйкестендіру – бұл барлық жиынтықтардың мөлшері 3-ке тең болатын ерекше жағдай, және сонымен қатар элементтер 3 түске бөлінеді, әрі әр жиынтықта әр түстің бір ғана элементі болады. Бұл ерекше жағдай әлі де NP-қиын, бірақ жалпы жағдайға қарағанда тұрақты коэффициент бойынша жақындату алгоритмдері жақсырақ.

Басқа да байланысты мәселелер

Жинақтарды жабу мәселесінде бізге ғаламның кіші жиындықтарының жиыны беріледі, ал мақсат – осы жиындықтардың барлық элементтерін қамтитын t жиындықты таңдап алуға болатынын анықтау. Оптимизациялық нұсқасы мұндай жиындықтардың ең аз санын табады. Максималды жиынтық жинақтаудың барлық мүмкін элементтерді қамтуы міндетті емес. Дәл жабу мәселесінде ғаламның әрбір элементі дәл бір кіші жиындықта болуы керек. Мұндай дәл жабуды табу – NP-толық проблема, тіпті барлық жиындықтардың мөлшері 3 болатын ерекше жағдайда да (бұл ерекше жағдай нақты 3 жабу немесе X3C деп аталады). Дегенмен, егер біз S-тің әрбір элементі үшін жеке жиындық жасап, оларды тізімге қоссақ, нәтижедегі мәселе жиынтық жинақтауға шамамен жақын болады. Karp бастапқыда клика проблемасынан азайту арқылы жиынтық жинақтаудың NP-толық екенін көрсетті.