Кіріспе

Есептеу күрделілігі теориясында сандық алгоритм псевдополиномиалдық уақытта жұмыс істейді, егер оның жұмыс істеу уақыты кірістің сандық мәніне (кірістегі ең үлкен бүтін санға) полиномиалды түрде тәуелді болса, бірақ міндетті түрде кірістің ұзындығына (оны көрсетуге қажетті биттер санына) емес – бұл полиномиалдық уақыт алгоритмдеріне тән. Әдетте, кірістің сандық мәні кірістің ұзындығына экспоненциалды түрде өседі, сондықтан псевдополиномиалдық уақыт алгоритмі кірістің ұзындығына қатысты полиномиалдық уақытта жұмыс істемейді. Белгілі псевдополиномиалдық уақыт алгоритмі бар NP-толық мәселе әлсіз NP-толық деп аталады. Егер P = NP болмаса, онда ол псевдополиномиалдық уақыт алгоритмімен шешілмейтіні дәлелденсе, онда NP-толық мәселе күшті NP-толық деп аталады. НП-қаттылығының күшті/әлсіз түрлері де осыған ұқсас анықталады.

Бастылық сынағы

N санының жай екенін тексеру мәселесін қарастырайық, осы үшін n санына ешқандай сан толық бөлінбейтінін қарапайым тексеруге болады. Бұл тәсіл n-нің мәніне қатысты сызықтық емес, бірақ n-нің ұзындығына қатысты экспоненциалды (шамамен ). Мысалы, n санының ұзындығы 11 таңба болса да, 10 000 000 000-нан сәл кем санды тексеру үшін шамамен 100 000 бөлу операциясы қажет. Сонымен қатар, бұл алгоритмді тиімсіз ететін кіріс мәнін (мысалы, 300 таңбалы санды) оңай жазуға болады. Есептеу күрделілігі (кодталған) кіріс мәнінің ұзындығына қатысты қиындықты өлшейтіндіктен, бұл қарапайым алгоритм шынында экспоненциалды болып табылады. Дегенмен, ол псевдополиномиалдық уақытта жұмыс істейді. Бұл алгоритмді нақты полиномиалдық сандық алгоритммен салыстырайық – мысалы, екі 9 таңбалы санды қосу: екі 9 таңбалы санды қосу шамамен 9 қарапайым қадамды қажет етеді, ал жалпы алғанда алгоритм кіріс мәнінің ұзындығына қатысты шын мәнінде сызықтық болып табылады. Қосылатын нақты сандардың (миллиардтармен) мөлшерімен салыстырғанда, алгоритмді «псевдологарифмдік уақыт» деп атауға болады, бірақ мұндай термин қалыптасқан емес. Осылайша, 300 таңбалы сандарды қосу тиімсіз емес. Сол сияқты, ұзын бөлу операциясы квадраттық болып табылады: m таңбалы санды n таңбалы санға бөлу үшін қадам қажет (үлкен О белгісіне қараңыз). Жаилықты анықтау үшін, 2002 жылы ашылған, уақытта жұмыс істейтін басқа алгоритм бар екені анықталды.