690 B
690 B
TD2
Algorythme dichotomique en C
int f(int t[], int target, int len) {
int min = 0;
int max = len-1;
while (min < max) {
int i = (min+max)/2
int val = t[i];
if (target < val) {
max = i;
} else if (target > val) {
min = i;
} else {
min = i;
max = i;
}
}
return min;
}
Preuve de terminaison :
- variant :
\lfloor log_2(\frac{max-min}{2}) \rfloor
Preuve de correction :
-
invariant :
min \leq i_{target} \leq max
-
après la boucle :
min = max
donc
min \leq i_{target} \leq min
donc
i_{target} = min
Complexité : O(log_2(n))