39 lines
690 B
Markdown
39 lines
690 B
Markdown
# TD2
|
|
|
|
## Algorythme dichotomique en C
|
|
|
|
```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))$
|