SAT求解器中search函数的实参是求解发生冲突的限量值。luby函数可以作为序列生成器,序列元素反映一定规律,这样可以使得重启按照指定冲突序列有计划的进行。
先看一下luby函数:
/*
Finite subsequences of the Luby-sequence:
0: 1
1: 1 1 2
2: 1 1 2 1 1 2 4
3: 1 1 2 1 1 2 4 1 1 2 1 1 2 4 8
...
*/
static double luby(double y, int x){
// Find the finite subsequence that contains index 'x', and the
// size of that subsequence:
int size, seq;
for (size = 1, seq = 0; size < x+1; seq++, size = 2*size+1);
while (size-1 != x){
size = (size-1)>>1;
seq--;
x = x % size;
}
return pow(y, seq);
}
编写如下主函数调用luby函数,程序代码及运行结果如下:

1 #include <cstdlib> 2 #include <iostream> 3 #include <cmath> 4 5 using namespace std; 6 static double luby(double y, int x){ 7 8 // Find the finite subsequence that contains index 'x', and the 9 // size of that subsequence: 10 int size, seq; 11 for (size = 1, seq = 0; size < x+1; seq++, size = 2*size+1); 12 13 while (size-1 != x){ 14 size = (size-1)>>1; 15 seq--; 16 x = x % size; 17 } 18 19 return pow(y, seq); 20 } 21 22 int main() 23 { 24 int y1 = 10; 25 int x1 = 0; 26 double result = 0; 27 while(x1 < 20){ 28 result = luby(y1,x1); 29 printf("luby(%-3d,%-2d) = %10.4f\n", y1, x1, result); 30 x1++; 31 } 32 system("color f1"); 33 system("PAUSE"); 34 return 0; 35 }
浙公网安备 33010602011771号