|
| ||||||||||||
| ||||||||||||
|
В начало
Теоретическое обоснование устойчивости методаНастоящий раздел посвящён анализу устойчивости предложенного метода маскировки. Предварительно дадим некоторые вспомогательные определения и теоремы. Пусть Определение 1. Пусть Определение 2. Взаимно-однозначная односторонняя функция Определение 3. p-приближённым алгоритмом решения оптимизационной задачи называется алгоритм, находящий решение не более чем в p раз хуже оптимального решения. Например рассмотрим задачу S минимизации некоторого функционала f. Пусть A - p -приближённый алгоритм нахождения решения задачи S. Пусть для некоторой реализации задачи оптимальное значение функционала равно X. Тогда алгоритм A найдёт решение задачи, при котором значение f равно Y, причём будет справедливо неравенство Определение 4. Пусть Теорема 1. Пусть 1. Покажем, что задача СУЩ находится в классе NP. Для этого построим булевскую формулу Если переменная существенна, то существует такой вектор 2. Покажем, что к задаче СУЩ полиномиально сводится задача ВЫП, которая является NP-полной. Пусть Определение 5. Пусть
Обозначим через φf формулу, реализующую функцию f. Пусть Ф - множество формул (потенциально бесконечное) такое, что если ζf - случайно и равновероятно выбранная формула из Ф, а f - функция, которую она реализует, то случайная величина Множество формул Ф называется семейством непрозрачных предикатов, если для любого полиномиального вероятностного алгоритма A: Ф - > {0,1} выполняются условия
Теорема 2. Если непрозрачные предикаты существуют, то P Доказательство. Пусть P = NP. Тогда существует полиномиальный алгоритм для решения задачи выполнимости, то есть существует алгоритм A, который для любой формулы ζf за полиномиальное проверит условие f Мы можем расширить понятие непрозрачного предиката, предположив, что область его определения может быть произвольной (например, множество всех целых чисел, представимых определённым количеством битов). Покажем, что непрозрачные предикаты могут быть реализованы и с использованием указателей, и с использованием массивов. Теорема 3. Если булевские непрозрачные предикаты существуют, то непрозрачные предикаты, построенные на указателях, существуют. Доказательство. Пусть f - булевский непрозрачный предикат. Пусть f:
struct s
{
struct s *neg;
struct s *min[2];
struct s *max[2];
};
Создадим в начале работы программы в динамической памяти ссылочную структуру, показанную на рис. 9. Здесь элемент, на который указывает Pfalse, соответствует логическому значению "ложь", а элемент, на который указывает Ptrue, соответствует логическому значению "истина". Рассмотрим каждую булевскую операцию и поставим ей в соответствие операцию над указателями в созданной структуре данных.
Рис. 9: Схема построения непрозрачного предиката из указателей Таким образом, каждому булевскому выражению u мы сопоставили выражение указательного типа e. Поскольку задача определения u Теорема 4. Если булевские непрозрачные предикаты существуют, то и непрозрачные предикаты, построенные над массивами, существуют. Доказательство. Пусть е - непрозрачный предикат над указателями, построенный, как показано в предыдущей теореме. Поставим ему в соответствие массив целого типа a из 10 элементов, заполненный следующим образом: int a[10] = { 5, 0, 0, 5, 0, 0, 0, 5, 5, 5 };Указательному значению Pfalse соответствует целое значение 0, а указательному значению Ptrue - целое значение 5. Тогда выражения непрозрачного предиката, построенного на указателях, заменяются на индексные выражения по следующим правилам:
Определение 6. Пусть f: Теорема 5. Пусть даны m, n, f: Доказательство. Доказательство принадлежности задачи к классу NP аналогично доказательству теоремы 1. Для доказательства NP-полноты заметим, что задача СУЩ является частным случаем данной задачи, если мы выберем I={1,...,n). Пусть V={v1,...,vk) - множество переменных замаскированной программы. Предположим, что базовый блок представляет собой вычисление булевской функции f: Данной оптимизационной задаче соответствует задача проверки свойств ЗАВ: дано множество булевских переменных V={v1,...,vk}, булевская функция f: Теорема 6. Задача ЗАВ NP-полна. Доказательство Принадлежность задачи классу NP следует из того, что для каждого i (1 Для доказательства NP-полноты покажем, как задача СУЩМНОЖ сводится к данной задаче. Пусть f - булевская функция f: Введём m-1 новую переменную z1,...,zm-1 следующим образом: каждое вхождение xk в формулу для вычисления f заменим выражением xk v z1 v...v zm-1, а выражение - на выражение Если переменная xk существенна для f, то переменные xk,z1,...,zm-1 окажутся существенными для f1 . Если переменная xk несущественная для f, то все переменные xk,z1,...,zm-1 несущественны для f1. С другой стороны, если хотя бы одна переменная из множества {xk,z1,...,zm-1} окажется несущественной в f1, то и все переменные этого множества будут несущественными. В таком случае пусть p=m-1 . Тогда, если задача ЗАВ для функции f1 , множества переменных I и значения p даёт ответ "да", отсюда следует, что все переменные xk,z1,...,zm-1 несущественны, а если ответ "нет", то все эти переменные существенны. Таким образом задача СУЩМНОЖ сводится к задаче ЗАВ, что показывает NP-полноту последней. Рассмотрим оптимизационную задачу ЗАВ. Она состоит в нахождении такого Win Теорема 7. Если P Доказательство. Пусть существует такое p>1 , что существует полиномиально-ограниченный алгоритм A, который находит множество существенных переменных WinA такое, что pA=|WinA| Рассмотрим следующую реализацию задачи СУЩ. Пусть f - булевская функция f: Пусть [x] - минимальное целое число, не меньшее x. Введём l=m*[p] новую переменную z1,...,zl следующим образом: каждое вхождение xk в формулу для вычисления f заменим на выражение xk v z1 v ... v zl , а выражение Обозначим через Win0 оптимальное решение оптимизационной задачи ЗАВ для формулы f, а через Win1 - оптимальное решение для формулы f1 . Обозначим WinA решение, найденное алгоритмом A для f1. Пусть xk - существенная переменная. Тогда Win0 таково, что 1+1 Пусть xk - несущественная переменная. Тогда Win0 таково, что 0 Заметим, что p*(m-1)< l+1 =m*[p]+1 . В зависимости от WinA, полученного полиномиальным p-приближённым алгоритмом A мы можем определить, является ли xk существенной переменной или нет. Следовательно, P=NP. Определение 7. Назовём "мёртвыми" все инструкции, которые относятся к вычислению несущественных переменных. Из доказанного выше немедленно следует, что задача выявления мёртвого кода в программе, состоящей из одного базового блока, NP-полна, и, более того, для любого p>1 не существует p-приближённого полиномиального алгоритма выявления мёртвого кода. Переменные произвольных целых типов могут рассматриваться как набор переменных булевского типа. Например, переменная типа int может рассматриваться как 32 булевские переменные, для доступа к которым используются битовые операции. В начало Дальше |
|
CITForum © 1997–2025