Aller au contenu

Ep 33

▶ TĂ©lĂ©charger le sujet en pdf.

EXERCICE 1⚓

Dans cet exercice, un arbre binaire de caractĂšres est stockĂ© sous la forme d’un dictionnaire oĂč les clefs sont les caractĂšres des nƓuds de l’arbre et les valeurs, pour chaque clef, la liste des caractĂšres des fils gauche et droit du nƓud.

Par exemple, l’arbre :

image

est stocké dans

🐍 Script Python
    a = {'F':['B','G'], 'B':['A','D'], 'A':['',''], 'D':['C','E'], \
    'C':['',''], 'E':['',''], 'G':['','I'], 'I':['','H'], \
    'H':['','']}

Écrire une fonction rĂ©cursive taille prenant en paramĂštres un arbre binaire arbre sous la forme d’un dictionnaire et un caractĂšre lettre qui est la valeur du sommet de l’arbre, et qui renvoie la taille de l’arbre Ă  savoir le nombre total de nƓuds.

On observe que, par exemple, arbre[lettre][0], respectivement arbre[lettre][1], permet d’atteindre la clĂ© du sous-arbre gauche, respectivement droit, de l’arbre arbre de sommet lettre.

Exemple :

🐍 Script Python
    >>> taille(a, ’F’)
    9

RĂ©ponse

Complétez le code ci-dessous

###
# Mettre votre code icibksl-nlbksl-nl



Solution

###
a = {'F':['B','G'], 'B':['A','D'], 'A':['',''], 'D':['C','E'], 'C':['',''], 'E':['',''], 'G':['','I'], 'I':['','H'], 'H':['','']}bksl-nlbksl-nldef taille(arbre, lettre):bksl-nl filspy-undgauche = arbre[lettre][0]bksl-nl filspy-unddroit = arbre[lettre][1]bksl-nlbksl-nl if filspy-undgauche != '' and filspy-unddroit != '':bksl-nl return 1 + taille(arbre, filspy-undgauche) + taille(arbre, filspy-unddroit)bksl-nlbksl-nl if filspy-undgauche != '' and filspy-unddroit == '':bksl-nl return 1 + taille(arbre, filspy-undgauche)bksl-nlbksl-nl if filspy-undgauche == '' and filspy-unddroit != '':bksl-nl return 1 + taille(arbre, filspy-unddroit)bksl-nlbksl-nl else:bksl-nl return 1bksl-nlbksl-nl # Autre solutionbksl-nldef taille(arbre, lettre):bksl-nl if lettre == '':bksl-nl return 0bksl-nl return 1 + taille(arbre, arbre[lettre][0]) + taille(arbre, arbre[lettre][1])bksl-nlbksl-nl



EXERCICE 2⚓

On considÚre l'algorithme de tri de tableau suivant : à chaque étape, on parcourt le sous-tableau des éléments non rangés et on place le plus petit élément en premiÚre position de ce sous-tableau.

Exemple avec le tableau : t = [41, 55, 21, 18, 12, 6, 25]

  • Étape 1 : on parcourt tous les Ă©lĂ©ments du tableau, on permute le plus petit Ă©lĂ©ment avec le premier. Le tableau devient t = [6, 55, 21, 18, 12, 41, 25]

  • Étape 2 : on parcourt tous les Ă©lĂ©ments sauf le premier, on permute le plus petit Ă©lĂ©ment trouvĂ© avec le second. Le tableau devient : t = [6, 12, 21, 18, 55, 41, 25]

Et ainsi de suite.

La code de la fonction tri_selection qui implémente cet algorithme est donné ci-dessous.

Exemple :

🐍 Script Python
    >>> liste = [41, 55, 21, 18, 12, 6, 25]
    >>> tri_selection(liste)
    >>> liste
    [6, 12, 18, 21, 25, 41, 55]

On rappelle que l'instruction a, b = b, a Ă©change les contenus de a et de b.

RĂ©ponse

Complétez le code ci-dessous

###
def tripy-undselection(tab):bksl-nl N = len(tab)bksl-nl for k in range(...):bksl-nl imin = ...bksl-nl for i in range(... , N):bksl-nl if tab[i] < ... :bksl-nl imin = ibksl-nl ... , tab[imin] = tab[imin] , ...bksl-nlbksl-nl



Solution

###
def tripy-undselection(tab):bksl-nl N = len(tab)bksl-nl for k in range(N):bksl-nl imin = kbksl-nl for i in range(k+1, N):bksl-nl if tab[i] < tab[imin] :bksl-nl imin = ibksl-nl tab[k] , tab[imin] = tab[imin] , tab[k]bksl-nlbksl-nl