Rechercher l'étage et le plafond d'un nombre X à partir d'un tableau déjà trié. par exemple
a[] = {3, 7, 9, 10, 15}
- si X=2, étage = N/A, plafond = 3
- si X=3, étage = 3, plafond = 3
- si X=4, étage = 3, plafond = 7
- si X=16, étage = 15, plafond = N/A
Je pense que la plupart d'entre nous connaissent la solution, c'est-à-dire, nous pouvons trouver l'étage/le plafond par recherche binaire modifiée. Mais le problème avec la recherche binaire modifiée est que nous devons prendre en compte de nombreuses conditions limites. Mais j'ai découvert que le même algorithme de recherche binaire fonctionne mais pour l'étage, il suffit d'écrire if low > high return low
et pour le plafond if low > high return high
. Et si l'étage retourne -1 alors afficher N/A et si le plafond retourne une valeur qui est supérieure à l'index du tableau alors afficher N/A.
Algorithme pour l'étage :
int floorSearch(int a[], int low, int high, int x)
{
if(low > high){
return low;
}
int mid = (low+high)/2;
if(a[mid]>x){
return floorSearch(a, low, mid-1, x);
}
else if(a[mid]
``
et pour le plafond :
int ceilSearch(int a[], int low, int high, int x)
{
if(low > high){
return high;
}
int mid = (low+high)/2;
if(a[mid]>x){
return ceilSearch(a, low, mid-1, x);
}
else if(a[mid]
`
c'est très simple, n'est-ce pas? J'ai vérifié pour de nombreuses entrées et cela fonctionne mais j'ai échoué à prouver la justesse de l'algorithme. Est-ce que quelqu'un peut essayer de prouver la justesse ou vous pouvez également donner une entrée d'exemple pour laquelle cet algorithme échouera. Merci.
` ``