On s'intéresse à la complexité temporelle de la fonction
is_palindrome qui a pour objectif de déterminer sila séquence d'éléments d'un tableau (implémenté par le type de base list en python) est un palindrome.
Pour rappel, une séquence forme un palindrome si la séquence est la même qu'on la lise de gauche à droite ou de droite à gauche.
Donc, les tableaux (par exemple, contenant des entiers) \([5, 6, 6, 5]\) et \([8, 9, 10, 9, 8]\) sont des palindromes, alors que le tableau \([1, 1, 3]\) n'en est pas un.
Le code python de cette fonction est présenté ci-dessous:
def is_palindrome(tab):
"""
pre: 'tab' est une list (type de base de python)
post: renvoie True si la séquence d'éléments du tableau 'tab' forment un palindrome, False sinon
"""
if len(tab) <= 1:
return True
if tab[0] == tab[len(tab)-1]:
return is_palindrome(tab[1:len(tab)-1])
return False
Note importante : l'appel récursif dans cette implémentation prend comme argument un sous-tableau qui correspond au tableau
tab, passé en paramètre, mais sans son premier et son dernier élément. Ce sous-tableau tab[1:len(tab)-1] est obtenu par l'opération de slicing en python qui produit une nouvelle list à partir d'un indice de départ et un indice de fin de la list originale.Si \(n\) désigne la taille du tableau
tab (en réalité, une list python, avec \(n=\)len(tab)) passé en paramètre, l'obtention de ce sous-tableau par cette opération de slicing a une complexité temporelle en \(\Theta(n)\). Cette propriété doit vous servir dans l'écriture correcte des équations de récurrence pour analyser la complexité temporelle globale de cet algorithme récursif.Note 2 : bien que l'algorithme ci-dessus est correct quelque soit la taille du tableau, nous faisons l'hypothèse simplificatrice, pour toutes les sous-questions qui suivent, que \(n=\)
len(tab) est pair.
INGInious