K-КНФ-алгоритмы на основе поиска с возвратом: различия между версиями

Перейти к навигации Перейти к поиску
м
Строка 22: Строка 22:




Функция Modify(КНФ-формула <math>G(x_1, x_2, ..., x_n) \;</math>, перестановка <math>\pi \;</math> = ({1, 2, ..., n}, присваивание y) <math>\to</math> (присваивание u)
Функция '''Modify'''(КНФ-формула <math>G(x_1, x_2, ..., x_n) \;</math>, перестановка <math>\pi \;</math> = ({1, 2, ..., n}, присваивание y) <math>\to</math> (присваивание u)


   <math>G_0 = G</math>.
   <math>G_0 = G</math>.
Строка 31: Строка 31:
         '''then''' <math>u_{\pi(i)} = 0</math>
         '''then''' <math>u_{\pi(i)} = 0</math>
       '''else''' <math>u_{\pi(i)} = y_{\pi(i)}</math>
       '''else''' <math>u_{\pi(i)} = y_{\pi(i)}</math>
Gi = G;_i Ujr(i)=Kjr(i)
      <math>G_i = G_{i - 1} \lceil_{x_{\pi (i)} = u_{\pi (i)}} \;</math>
end /* end for loop */ return U;
  '''end''' /* конец цикла for */  
  '''return''' u;




Алгоритм Search получается в результате выполнения алгоритма Modify(G,7r,y) на нескольких парах (ж,у), где ж – случайная перестановка, а y – случайное присваивание.
Алгоритм '''Search''' получается в результате выполнения алгоритма '''Modify'''<math>(G, \pi, y) \;</math> на нескольких парах <math>(\pi, y) \;</math>, где <math>\pi \;</math> – случайная перестановка, а y – случайное присваивание.




Search(КНФ-формула F, целое число I) повторить I раз
'''Search'''(КНФ-формула F, целое число I)
 
  '''repeat''' I раз
ж = равномерно распределенная случайная перестановка 1, : : , n у = равномерно распределенный случайный вектор 2 {0, 1}n и = Modify(F, ж,у)\ if при u формула F выполнима
      <math>\pi</math> = равномерно распределенная случайная перестановка 1, ..., n
then output(u); exit; end/* end repeat loop */ output('Unsatisfiable');
      у = равномерно распределенный случайный вектор <math>\in \{ 0, 1 \}^n \;</math>
      u = '''Modify'''<math>(F, \pi, у)</math>;
      '''if''' при u формула F выполнима
        '''then''' output(u); '''exit''';
      '''end''' /* конец цикла repeat */
  output("Невыполнимо");




4511

правок

Навигация