Add recherche séquencielle et dichotomique

This commit is contained in:
flyingscorpio@arch-desktop 2021-09-17 16:19:37 +02:00
parent cd77f04cdd
commit b7d11663d0
2 changed files with 70 additions and 0 deletions

View file

@ -0,0 +1,29 @@
Algorithme : Cherche un entier x dans un tableau T de n entiers
Début
// Selon le principe de la recherche séquentielle
Fonction RechSeq(x : int, T : tableau, n : int) : bool
Si n = 0
Retourner(Faux)
Sinon si x = T[n - 1]
Retourner(Vrai)
Sinon
Retourner(RechSeq(x, T, n - 1))
FinSi
FinFonction
// Selon le principe de la recherche dichotomique
Fonction RechDic(x : int, T : tableau, n : int) : bool
Trier(T)
milieu = n / 2
Si Longueur(T) = 0
Retourner(Faux)
Sinon si x = T[milieu]
Retourner(Vrai)
Sinon si x < T[milieu]
Retourner(RechDic(x, T[0 : milieu], milieu))
Sinon
Retourner(RechDic(x, T[milieu : n], n - milieu))
FinSi
FinFonction
Fin

View file

@ -0,0 +1,41 @@
#!/usr/bin/env python
"""Cherche un entier x dans un tableau T de n entiers"""
def main() -> None:
x = 5
T = [5, 6, 3, 1, 2, 7, 9, 10]
n = len(T)
print(RechSeq(x, T, n))
print(RechDic(x, T, n))
def RechSeq(x : int, T : list[int], n : int) -> bool:
"""Selon le principe de la recherche séquentielle"""
if n == 0:
return False
elif x == T[n - 1]:
return True
else:
return RechSeq(x, T, n - 1)
def RechDic(x : int, T : list[int], n : int) -> bool:
"""Selon le principe de la recherche dichotomique"""
T.sort()
milieu = n // 2
if len(T) == 0:
return False
elif x == T[milieu]:
return True
elif x < T[milieu]:
return RechDic(x, T[:milieu], milieu)
else:
return RechDic(x, T[milieu:], n - milieu)
if __name__ == "__main__":
main()