Теоремы о временной и ёмкостной иерархиях — различия между версиями
DrozdovVA (обсуждение | вклад) м (Добавлено про нестрогое включение) |
Leugenea (обсуждение | вклад) м (Убрана очевидность) |
||
| Строка 9: | Строка 9: | ||
|statement=Пусть даны две конструируемые по памяти функции <tex>f</tex> и <tex>g</tex> такие, что <tex>\lim \limits_{n\rightarrow\infty} \frac{f(n)}{g(n)}=0</tex>, тогда <tex>DSPACE(f(n)) \varsubsetneq DSPACE(g(n))</tex>. | |statement=Пусть даны две конструируемые по памяти функции <tex>f</tex> и <tex>g</tex> такие, что <tex>\lim \limits_{n\rightarrow\infty} \frac{f(n)}{g(n)}=0</tex>, тогда <tex>DSPACE(f(n)) \varsubsetneq DSPACE(g(n))</tex>. | ||
|proof= | |proof= | ||
| − | + | Понятно, что <tex>DSPACE(f(n)) \subseteq DSPACE(g(n))</tex>, поскольку программа, ограниченная по памяти финкцией <tex>f</tex>, проходит ограничение <tex>g</tex>.<br /> | |
Используя диагональный метод, докажем, что включение строгое. Рассмотрим функцию <tex>h(n)=\sqrt{f(n)g(n)}</tex> и язык <tex>L=\{x|x(x)\Bigr|_{S\leq h(|x|)}\neq 1\}</tex>, где запись <tex>S\leq h(|x|)</tex> означает, что программа запускается с лимитом памяти <tex>h(|x|)</tex>. Иначе говоря, <tex>L</tex> — это язык программ, которые не допускают собственный код, используя памяти не более <tex>h(|x|)</tex>. Докажем, что <tex>L\in DSPACE(g(n))\setminus DSPACE(f(n))</tex>.<br/> | Используя диагональный метод, докажем, что включение строгое. Рассмотрим функцию <tex>h(n)=\sqrt{f(n)g(n)}</tex> и язык <tex>L=\{x|x(x)\Bigr|_{S\leq h(|x|)}\neq 1\}</tex>, где запись <tex>S\leq h(|x|)</tex> означает, что программа запускается с лимитом памяти <tex>h(|x|)</tex>. Иначе говоря, <tex>L</tex> — это язык программ, которые не допускают собственный код, используя памяти не более <tex>h(|x|)</tex>. Докажем, что <tex>L\in DSPACE(g(n))\setminus DSPACE(f(n))</tex>.<br/> | ||
Так как <tex>h(n)=o(g(n))</tex>, то очевидно, что <tex>L \in DSPACE(g(n))</tex>. Действительно, для проверки принадлежности программы <tex>x</tex> языку достаточно запустить её с лимитом памяти <tex>h(|x|)</tex> и проверить, что результат не равен 1. Тогда вся проверка будет выполнена с использованием не более <tex>g(|x|)</tex> памяти в силу конструируемости функций <tex>f</tex> и <tex>g</tex> и накладываемых ограничений на память.<br /> | Так как <tex>h(n)=o(g(n))</tex>, то очевидно, что <tex>L \in DSPACE(g(n))</tex>. Действительно, для проверки принадлежности программы <tex>x</tex> языку достаточно запустить её с лимитом памяти <tex>h(|x|)</tex> и проверить, что результат не равен 1. Тогда вся проверка будет выполнена с использованием не более <tex>g(|x|)</tex> памяти в силу конструируемости функций <tex>f</tex> и <tex>g</tex> и накладываемых ограничений на память.<br /> | ||
Версия 15:53, 7 мая 2012
| Определение: |
| Функция называется конструируемой по памяти, если можно вычислить по , используя не более памяти. |
| Теорема (о емкостной иерархии): |
Пусть даны две конструируемые по памяти функции и такие, что , тогда . |
| Доказательство: |
|
Понятно, что , поскольку программа, ограниченная по памяти финкцией , проходит ограничение . |
| Определение: |
| Функция называется конструируемой по времени, если можно вычислить по за время не более . |
| Теорема (о временной иерархии): |
Пусть даны две конструируемые по времени функции и такие, что , тогда . |
| Доказательство: |
| Доказательство аналогично доказательству теоремы о емкостной иерархии. |