Académique Documents
Professionnel Documents
Culture Documents
Remarque : jusqu'en 2018, les conventions du langage algorithmique étaient un peu différentes
– les tableaux sont dynamiques (la taille n'est pas forcément fixée à la déclaration) et l'opération redim
permet de fixer la taille d'un tableau.
– les tableaux et enregistrements sont supposés être toujours passés par référence, les autres
paramètres par valeur.
1- Écrire une fonction qui prend en entrée deux tableaux de caractères représentant deux mots et
renvoie vrai si ces mots sont anagrammes l'un de l'autre et faux sinon.
2- Calculer la complexité au pire de la fonction précédente en expliquant quel est le pire cas et en
expliquant les calculs.
1- Écrire une fonction qui prend en entrée deux tableaux de caractères représentant deux mots et
renvoie vrai si ces mots sont anagrammes l'un de l'autre et faux sinon.
2- Calculer la complexité en temps au pire de la fonction précédente en expliquant quel est le pire cas et
en expliquant les calculs.
Pour placer la plus grande crêpe en dessous de la pile, on glisse la pelle sous la crêpe la plus grande et
on retourne la pile des crêpes qui se trouvent au dessus de la pelle, ce qui place la crêpe la plus grande tout en
haut de la pile. Puis on glisse la pelle sous la crêpe la plus basse et on retourne toute la pile de crêpes, ce qui
place la crêpe la plus grande tout en bas de la pile. Pour trier toute la pile, il suffit de recommencer l'opération
sur le reste de la pile.
Dans cet exercice, le tas de crêpes est représenté par un tableau d'entiers (les entiers peuvent être vus
comme les diamètres des crêpes).
1- Écrire une fonction qui prend en paramètres un tableau d'entiers t et deux entiers i et j, et inverse
l'ordre des éléments dont les indices sont compris entre i et j inclus. Par exemple, appeler la fonction avec t =
[1,3,4,2,7,3], i = 1 et j = 4 conduira à t = [1,7,2,4,3,3]. On peut supposer que i et j sont compris entre 0 et la
longueur de t moins un et que i < j.
2- Écrire une fonction qui prend en paramètres un tableau d'entiers t et un entier i et renvoie l'indice du
plus grand élément parmi ceux d'indices inférieurs ou égal à i.
3- Écrire une fonction qui prend en paramètre un tableau d'entiers t et le trie par la méthode du tri
breton.
4-Donner, en justifiant vos calculs, les complexités des deux premières fonctions, puis celle de la
fonction de tri (on pourra se limiter à la complexité au pire).
4- Élimination des doublons (60 mn)
On veut éliminer les doublons dans des tableaux de caractères.
1- Écrire une fonction qui prend en paramètre un tableau de caractères t, un caractère c et un entier i
supposé compris entre 0 et la longueur du tableau-1, et renvoie vrai si le caractère c apparait dans le tableau t
dans une case d'indice compris entre 0 et i inclus.
2- Écrire une fonction qui prend en paramètre un tableau de caractères t pouvant contenir des doublons
et renvoie un tableau de caractères contenant les mêmes caractères que le premier, mais sans doublon. On
peut utiliser la méthode suivante :
- parcourir une première fois le tableau t pour compter le nombre de caractères différents qu'il contient
(la fonction du 1 peut être utile).
- créer un deuxième tableau t2 de taille égale au nombre de caractères différents contenus dans t.
- parcourir t et remplir t2 avec les caractères contenus dans t, mais sans doublon.
3- Calculer la complexité en temps au pire de la fonction précédente en expliquant quel est le pire cas et
en expliquant les calculs.
2- Indiquer quel est le pire cas d'exécution de cet algorithme du point de vue du temps d'exécution.
Donner, en justifiant les calculs, la complexité temporelle au pire de cet algorithme.
2- Indiquer quel est le pire cas d'exécution de l'algorithme du point de vue du temps d'exécution. Justifier
la complexité temporelle logarithmique au pire de cet algorithme.
2- Indiquer quel est le paramètre de complexité de cette fonction, et calculer la complexité temporelle de
cette fonction.
Donner le paramètre de complexité de la fonction, indiquez le cas échéant s'il existe des cas au mieux et
au pire et calculez la complexité de la fonction (dans les cas au mieux et au pire s'ils existent, dans le cas
général sinon).
Le principe pour traduire en chiffres arabes un nombre écrit en chiffres romains est le suivant : si le
premier chiffre du nombre romain a une valeur inférieure au deuxième, alors on le soustrait de la valeur de tout
le reste, sinon on l'additionne à la valeur de tout le reste.
1- Écrire une fonction qui prend en paramètre un tableau de caractères représentant un nombre écrit en
chiffres romains et retourne sa valeur entière.
2- Indiquer le paramètre de complexité de la fonction récursive. Indiquer s'il existe des cas au mieux ou
au pire, et calculer la complexité de la fonction dans le cas au pire s'il existe, dans le cas général sinon.
2- Donnez le paramètre de complexité de la fonction racine. Indiquez le cas échéant s'il existe des cas
au mieux et au pire et calculez la complexité de la fonction (dans le cas au pire s'il existe, dans le cas général
sinon).
1- Écrire une fonction qui prend en entrée un mot, sous forme d'un tableau de caractères, et qui affiche
le nombre d'occurences de chaque lettre dans le mot (le type caractère est doté de l'opération + qui permet de
passer au caractère suivant. Par exemple 'a'+1 donne 'b', 'b'+1 donne 'c', etc.).
2- Indiquer le paramètre de complexité de la fonction. Indiquez s'il existe des cas au mieux ou au pire, et
calculez la complexité de la fonction dans le cas au pire s'il existe, dans le cas général sinon.
1- Écrire une fonction qui prend en paramètres deux tableaux de caractères et renvoie vrai ou faux selon
que le premier est ou non le début du deuxième, c'est-à-dire si le contenu du deuxième est identique au contenu
du premier, mais avec des cases supplémentaires à la fin. Par exemple, l'appel de la fonction sur les tableaux
['c','h','a','t'] et ['c','h','a','t','o','n'] renvoie vrai, et son appel sur les tableaux ['c','h','a','t'] et ['c','h','a','p','i','t','r','e']
renvoie faux.
2- Écrire une fonction qui prend en paramètres deux tableaux de caractères et renvoie l'indice à partir
duquel on trouve les éléments du premier tableau, tels quel, dans le deuxième tableau. La fonction renvoie -1 si
le contenu du premier tableau n'apparaît pas dans le deuxième. Par exemple, l'appel de la fonction sur les
tableaux ['c','h','a','t'] et ['a','c','h','a','t','-','v','e','n','t','e'] renvoie 1, son appel sur les tableaux ['c','h','a','t'] et
['q','u','e','l','b','e','a','u','c','h','a','t'] renvoie 8, et son appel sur les tableaux ['c','h','a','t'] et ['c','h','o','c','o','l','a','t']
renvoie -1.
3- Écrire une fonction qui prend en paramètres deux tableaux de caractères et renvoie -1 si le deuxième
représente un mot plus petit, au sens lexicographique, que le premier, 0 si les 2 tableaux représentent le même
mot, et 1 si le premier représente un mot plus petit, au sens lexicographique, que le deuxième (l'ordre
lexicographique est l'ordre du dictionnaire). Par exemple, l'appel de cette fonction sur les tableaux ['c','h','a','t'] et
['c','h','i','e','n'] renvoie 1, et l'appel de cette fonction sur les tableaux ['c','h','i','e','n'] et ['c','h','a','t'] renvoie -1. On
suppose que les opérateurs <, ≤, > et ≥ existent sur les caractères.
1- Anagramme sans doublon - CORRECTION
Le cas au pire pour la fonction anagramme est celui où les deux mots sont
anagrammes l'un de l'autre (et donc de même taille) car dès qu'on trouve un
caractère de t1 qui n'est pas dans t2, la boucle tantque s'arrête. Dans ce cas au
pire, si on appelle n la taille des deux tableaux, la complexité de anagramme sera
c + n*O(n) où O(n) est le coût de l'exécution de la fonction appartient et c une
constante. On a donc une complexité en O(n²).
Le cas au pire pour la fonction occurences est celui où toutes les cases du
tableau contiennent le caractère cherché (l'incrémentation de result a alors lieu à
chaque tour de boucle). Dans ce cas, si on appelle n la taille du tableau,
l'exécution de la fonction demande n tours de boucles et la complexité de la
fonction est donc de la forme n*a + b = O(n) avec a et b des constantes.
Le cas au pire pour la fonction anagramme est celui où les deux mots sont
anagrammes l'un de l'autre (et donc de même taille) car dès qu'on trouve un
caractère de t1 qui n'a pas le même nombre d'occurences dans t2, la boucle tantque
s'arrête. Dans ce cas au pire, si on appelle n la taille des deux tableaux, la
complexité de anagramme sera de la forme c + n*2*O(n) = O(n²) (où c est une
constante et O(n) est le coût de l'exécution de la fonction occurences).
Le cas au pire est celui où les éléments sont tous différents, ce qui oblige
à exécuter les deux boucles pour toutes les valeurs possibles de i et j. En effet,
si deux éléments d'indices a et b sont identiques dans le tableau, le test tab[a] =
tab[b] sera vrai et l'instruction b <- faux mettra fin à l'exécution de la fonction
avant que i atteigne la valeur tab.length-2.
6- Supérieurs - CORRECTION