Table des matières
TD5 : Tableaux statiques
Exercice 1
On considère un ensemble de k données stockés dans un tableau de données statique T de N cases (avec 0≤k ≤ N).
Remarques :
- Les cases du tableau sont numérotées de
0àN-1 - Les données sont de type quelconque mais chaque case ne peut contenir qu'une donnée
- Si
iest un indice de case,T[i]désigne le contenu de la case Nest fixé maiskvarie en fonction du nombre de données stockées
Question 1
Propriété 1 : les données sont stockés dans les k premières cases du tableau. Ainsi, les cases de 0 à k-1 sont occupées et l'indice k désigne la première case libre.
Ecrire un algorithme permettant d’insérer une nouvelle donnée t dans le tableau T en conservant la propriété 1. Quelle est sa complexité?
Propriété 2 : il n’y a pas de doublons dans le tableau, autrement dit ∀ i,j < k, si i ≠ j alors T[i] ≠ T[j].
Ecrire un algorithme permettant d’insérer une nouvelle donnée t dans le tableau T en conservant les propriétés 1 et 2. Quelle est sa complexité?
Propriété 3 : On suppose qu’il existe un ordre ≺ sur les données. ∀ i,j < k, si i < j alors T[i] ≺ T[j].
Écrire un algorithme permettant d’insérer une nouvelle donnée t dans le tableau T en conservant les propriétés 1, 2 et 3. Quelle est sa complexité?
Question 2
Un algorithme de recherche prend en argument une donnée t et retourne :
- Le numéro de la case contenant
tsitest présent dans le tableau -1sinon ("donnée absente")
Écrire un algorithme de recherche sachant que la propriétés 1 est respectée, un algorithme de recherche sachant que les propriétés 1 et 2 sont respectées, puis un algorithme de recherche sachant que les propriétés 1 et 2 et 3 sont respectées. Quelle est leur complexité?
Question 3
Un algorithme de suppression prend en argument une donnée t et :
- Supprime
tdu tableau sitest présent dans le tableau - Ne fait rien sinon
Écrire un algorithme de suppression conservant la propriétés 1, un algorithme de suppression conservant les propriétés 1 et 2, puis un algorithme de suppression conservant les propriétés 1 et 2 et 3. Quelle est leur complexité?
Exercice 2
On appelle liste une structure abstraite ordonnée telle que l'on puisse accéder de manière directe à l'élément i et à laquelle on puisse ajouter (et supprimer) autant d'éléments que l'on souhaite. Une caractéristique importante de cette structure est son nombre d'éléments.
Une implémentation des listes peut être effectuée comme suit:
- On commence par créer un tableau de taille
n= 1, le nombre initial d'éléments étantk= 0 - A chaque ajout d'élément:
- si
k < n,- ajouter l'élément à la position
k k←k + 1
- sinon :
- allouer un tableau à
2 * néléments etn←n * 2 - copier les
kpremiers éléments du tableau initial dans le nouveau tableau & supprimer le tableau initial. - ajouter l'élément à la position
k k←k + 1
Montrez que la complexité de l’ajout de k éléments à la fin d’une liste originellement vide est O(k).
Exercice 3 (Suppression de doublons)
La structure de données utilisée ici est la liste. On considérera que la création d’une liste vide, l’ajout d’un élément en fin de liste & la lecture d’un élément dans une liste se font en O(1) opérations.
- Donnez un algorithme permettant de résoudre le problème suivant :
- Données : Une liste
L& une valeurval. - Rendre : Une liste
L2, restriction deLaux valeurs différentes deval. - Quelle est sa complexité ?
- Utilisez la question précédente pour écrire un algorithme résolvant le problème suivant :
- Données : Une liste
L. - Rendre : Une liste
L2ne contenant qu’une seule occurrence de chaque valeur de L & en conservant le même ordre. - Quelle est sa complexité ?
- Même question que précédemment, mais on considère que la liste
Len entrée est triée. Donnez un algorithme en O(n) pour résoudre ce problème, oùnest le nombre d’ ́éléments deL. - Si l’ordre des éléments de
L2n’est pas important, proposez une meilleure solution à la question du point 2.
Exercice 4
On considère comme dans l'exercice 1 un tableau statique de données T de taille N. A la différence de l'exercice 1,
- Il est possible d'écrire plusieurs données dans une case de tableau :
- chaque case de
Tpeut contenir entre0etndonnées 0≤k[i]≤nest le nombre d'éléments contenus dans la casei0≤K≤Nest le nombre de cases effectivement occupées (la valeur de K peut varier au cours du temps).
- En vous inspirant de l'exercice 2, montrez qu'il est possible d'insérer une donnée
tdans une caseiquelconque en temps constant - Si les données sont triées (∀
i,j<K, sii<jalors∀ t ∈ T[i],∀ s ∈ T[j],t ≺ s), montrez qu'il est possible d'insérer une donnée dans le tableau en O(log K).