sujet Test 2 : preuve et complexité

Auteur :
  • François Brucker

Ce test vous demande de créer des fonctions de recherche de caractères dans une chaine de caractères.

Rendu

Type de rendu

Rendu sur feuille

Éléments de notation

  1. Écriture sous la forme d'un pseudo-code correcte
  2. Preuves :
    • de finitude
    • d'exactitude
  3. Calcul de complexité

1. Présence

On considère la fonction suivante, de signature : def est_présent(chaine: str, caractère:str) -> bool.

Son code est le suivant :

def est_présent(chaine, caractère):
    return est_présent_rec(chaine, caractère, 0)


def est_présent_rec(chaine, caractère, indice):
    if indice > len(chaine) - 1:
        return False
    elif chaine[indice] == caractère:
        return True
    else:
        return est_présent_rec(chaine, caractère, indice + 1)
  • Est-ce un algorithme ?
  • Quel problème résout cette fonction ? Et pourquoi (donnez une démonstration par récurrence) ?
  • Quelle est sa complexité, et surtout pourquoi ?

2. Lettre dupliquée

Créer la fonction possède_caractère_dupliqué(chaine: str) -> bool qui rend :

  • True si la chaîne en paramètre, de longueur $n$, contient deux indices $0\leq i < j < n$ tels que $\text{chaine}[i] = \text{chaine}[j]$,
  • False sinon.

On vous demande également de :

  • Justifier l'exactitude de votre fonction
  • Donner (en justifiant) la complexité min et max de votre fonction

3. Bit dupliqué

On suppose que l'on applique la fonction de la question précédente à des chaines uniquement composées des caractères "0" et "1".

Quel est la complexité min et max de la fonction dans ce cas là ?