Теорема Левина — различия между версиями
| Kirelagin (обсуждение | вклад)  (Байдаров всё внимательно читает и следит за тобой!) | м (rollbackEdits.php mass rollback) | ||
| (не показано 7 промежуточных версий 3 участников) | |||
| Строка 4: | Строка 4: | ||
| Для любого языка <tex>L \in \Sigma_1</tex> и соответствующего ему (из определения <tex>\Sigma_1</tex>) отношения <tex>R</tex> существует «оптимальная» (работающая «не сильно дольше», чем любая другая) программа <tex>p</tex>, сопоставляющая словам из <tex>L</tex> их сертификаты, то есть: | Для любого языка <tex>L \in \Sigma_1</tex> и соответствующего ему (из определения <tex>\Sigma_1</tex>) отношения <tex>R</tex> существует «оптимальная» (работающая «не сильно дольше», чем любая другая) программа <tex>p</tex>, сопоставляющая словам из <tex>L</tex> их сертификаты, то есть: | ||
| # <tex>x \in L \Leftrightarrow R(x, p(x)) = 1</tex>; | # <tex>x \in L \Leftrightarrow R(x, p(x)) = 1</tex>; | ||
| − | # для любой другой программы <tex>q</tex>, для которой верно <tex>x \in L \Leftrightarrow R(x, q(x)) = 1</tex>, найдутся такие константа <tex>c</tex> и полином <tex>r</tex>, что <tex> | + | # для любой другой программы <tex>q</tex>, для которой верно <tex>x \in L \Leftrightarrow R(x, q(x)) = 1</tex>, найдутся такие константа <tex>c</tex> и полином <tex>r</tex>, что для любого <tex>x</tex> выполняется: <tex>T(p, x) \le c \cdot T(q, x) + r(|x|)</tex>. | 
| |proof= | |proof= | ||
| Построим «оптимальную» программу <tex>p(x)</tex>. | Построим «оптимальную» программу <tex>p(x)</tex>. | ||
| − | Пронумеруем все программы <tex>\lbrace p_i \rbrace_{i=1}^\infty</tex>.  | + | Пронумеруем все программы <tex>\lbrace p_i \rbrace_{i=1}^\infty</tex>. Подадим им на вход слово <tex>x</tex> и будем исполнять по одной инструкции в следующем порядке: на шаге с номером <tex>j</tex> запустим программу <tex>p_k</tex>, где <tex>k</tex> таково, что <tex>j</tex> делится на <tex>2^{k-1}</tex> и не делится на <tex>2^{k}</tex>. Таким образом, программа <tex>p_k</tex> будет исполняться на каждом <tex>2^k</tex>-м шаге начиная с <tex>2^{k-1}</tex>-го. Следовательно, если <tex>p_k</tex> завершит работу за <tex>T(p_k, x)</tex> инструкций, то к этому времени нами будет сделано <tex>2^{k-1} + (T(P_k, x) - 1) \cdot 2^k</tex> шагов. | 
| − | Как только <tex>p_k</tex>, выдав некоторое значение, завершит работу,  | + | Как только <tex>p_k</tex>, выдав некоторое значение, завершит работу, будем на соответствующих шагах запускать проверку сертификата слова <tex>x</tex>, используя вывод <tex>p_k</tex> в качестве сертификата. Если результат проверки положителен, искомый сертификат найден, иначе — продолжим работу, ничего не делая на тех шагах, когда должна была исполняться <tex>p_k</tex>. | 
| − | Таким образом, если некоторая программа <tex> | + | Таким образом, если некоторая программа <tex>q = p_m</tex> генерирует верные сертификаты, то наша программа <tex>p</tex> завершит работу не более, чем за <tex>2^{m-1} + (T(p_m,x) + T(R, \langle x,p_m(x) \rangle) - 1) \cdot 2^m</tex> шагов. <tex>R \in P</tex> и <tex>|y| \le poly(|x|)</tex> из определения <tex>\Sigma_1</tex>, значит это равно <tex>2^{m-1} + (T(p_m,x) + poly(|x|)) \cdot 2^m = 2^m \cdot T(q,x) + poly(|x|)</tex>. | 
| }} | }} | ||
| == См. также == | == См. также == | ||
| *[[Класс P]] | *[[Класс P]] | ||
| − | *[[ | + | *[[Классы_NP_и_Σ₁]] | 
| [[Категория: Теория сложности]] | [[Категория: Теория сложности]] | ||
Текущая версия на 19:06, 4 сентября 2022
| Теорема (Левин): | 
| Для любого языка  и соответствующего ему (из определения ) отношения  существует «оптимальная» (работающая «не сильно дольше», чем любая другая) программа , сопоставляющая словам из  их сертификаты, то есть:
 
 | 
| Доказательство: | 
| Построим «оптимальную» программу . Пронумеруем все программы . Подадим им на вход слово и будем исполнять по одной инструкции в следующем порядке: на шаге с номером запустим программу , где таково, что делится на и не делится на . Таким образом, программа будет исполняться на каждом -м шаге начиная с -го. Следовательно, если завершит работу за инструкций, то к этому времени нами будет сделано шагов. Как только , выдав некоторое значение, завершит работу, будем на соответствующих шагах запускать проверку сертификата слова , используя вывод в качестве сертификата. Если результат проверки положителен, искомый сертификат найден, иначе — продолжим работу, ничего не делая на тех шагах, когда должна была исполняться .Таким образом, если некоторая программа генерирует верные сертификаты, то наша программа завершит работу не более, чем за шагов. и из определения , значит это равно . | 
