Skip to content
GitLab
Explorer
Connexion
S'inscrire
Navigation principale
Rechercher ou aller à…
Projet
S
Semaine10
Gestion
Activité
Membres
Code
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Déploiement
Releases
Registre de paquets
Opération
Modules Terraform
Analyse
Analyse des contributeurs
Données d'analyse du dépôt
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Show more breadcrumbs
ProgASD
2024-2025
AuditeursLibres
Semaine10
Validations
2f4af9fc
Valider
2f4af9fc
rédigé
il y a 5 jours
par
Thomas Lavergne
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
Fix from Nicolas
parent
b83bea28
Branches
master
Aucune requête de fusion associée trouvée
Modifications
3
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
3 fichiers modifiés
index.md
+2
-2
2 ajouts, 2 suppressions
index.md
rapide.md
+21
-16
21 ajouts, 16 suppressions
rapide.md
selection.md
+17
-13
17 ajouts, 13 suppressions
selection.md
avec
40 ajouts
et
31 suppressions
index.md
+
2
−
2
Voir le fichier @
2f4af9fc
...
...
@@ -14,8 +14,8 @@ kernelspec:
# TP 10 : Tri de listes chainées
Dans ce TP vous allez devoir utiliser les fonctions de manipulation de liste
chaînée que vous avez développées lors du TP précédent. Avant de commencer ce TP
Dans ce TP vous allez devoir utiliser les fonctions de manipulation de liste
s
chaînée
s
que vous avez développées lors du TP précédent. Avant de commencer ce TP
assurez-vous que vos fonctions pour les trois premiers exercices du TP 7
fonctionnent parfaitement.
...
...
This diff is collapsed.
Cliquez pour l'agrandir.
rapide.md
+
21
−
16
Voir le fichier @
2f4af9fc
...
...
@@ -17,37 +17,42 @@ kernelspec:
L'implémentation précédente du tri par sélection n'est pas optimale. En effet,
elle parcourt deux fois la liste $l$ à chaque itération, une fois pour chercher
le maximum et une fois pour le supprimer de la liste. Il est possible d'ajouter
une fonction de manipulation de liste effectuant ces deux opérations
une fonction de manipulation de liste
s
effectuant ces deux opérations
simultanément en mémorisant l'élément précédent celui contenant le maximum. Avec
cette nouvelle fonction il est ensuite possible d'implémenter le tri par
sélection de manière plus efficace.
*
Attention, comme vu en cours, cette modification rend l'algorithme plus
rapide mais ne change pas sa complexité qui reste quadratique. Cette version est
plus rapide d'un facteur constant.
*
:::{attention}
Comme vu en cours, cette modification rend l'algorithme plus rapide
mais ne change pas sa complexité qui reste quadratique. Cette version
n'est plus rapide que d'un facteur constant.
:::
1.
Commencez donc par implémenter une fonction qui recherche et supprime la
valeur maximale d'une liste et la renvoie :
1.
Commencez par définir une fonction utilisant l'optimisation
décrite ci-dessus pour rechercher et supprimer la valeur maximale
d'une liste, avant de la renvoyer :
```cpp
int supprimer_maximum(liste *l);
```
*Attention: cette fonction est relativement complexe à écrire. Testez-la
bien en profondeur, aussi bien sur des cas simples que complexes, avant de
passer à la suivante.*
:::{attention}
Cette fonction est relativement technique. Testez-la bien en
profondeur, aussi bien sur des cas simples que complexes, avant de
passer à la suivante.
:::
2.
R
éécriv
ez maintenant votre fonction de tri par sélection de
manière
plus efficace en utilisant cette nouvelle fonction de
manipulation de
liste.
2.
R
edéfiniss
ez maintenant votre fonction de tri par sélection de
manière
plus efficace en utilisant cette nouvelle fonction de
manipulation de
liste.
3.
Il existe un autre invariant que nous avons vu en cours pour le
tri par
sélection. Les éléments de la première liste doivent être
plus petits que
les
éléments de la seconde. Ajoute
r
la
vérification de cet invariant à
votre boucle.
3.
Il existe un autre invariant que nous avons vu en cours pour le
tri par
sélection. Les éléments de la première liste doivent être
inférieurs ou égaux aux
éléments de la seconde. Ajoute
z
la
vérification de cet invariant à
votre boucle.
This diff is collapsed.
Cliquez pour l'agrandir.
selection.md
+
17
−
13
Voir le fichier @
2f4af9fc
...
...
@@ -14,34 +14,38 @@ kernelspec:
# Exercice: Tri par sélection
Les fonctions de manipulation de liste chaînée que nous avons développées nous
Les fonctions de manipulation de liste
s
chaînée
s
que nous avons développées nous
permettent maintenant d'implémenter le tri par sélection sur les listes comme vu
en cours.
```
cpp
liste
*
tri_selection
(
liste
*
l
);
```
Les principales étapes du tri sont les suivantes :
Les principales étapes du tri d'une liste sont les suivantes :
-
Créer une nouvelle liste
`r`
qui va recevoir les éléments triés.
-
Tant que la liste d'origine
`l`
n'est pas vide faire
:
-
Tant que la liste d'origine
`l`
n'est pas vide faire
:
-
Chercher le maximum
`m`
de la liste
`l`
.
-
Supprimer la valeur
`m`
de la liste
`l`
.
-
Ajouter la valeur
`m`
en tête de la liste
`r`
.
-
Libérer la liste
`l`
-
Re
tourn
er la liste
`r`
-
Libérer la liste
`l`
.
-
Re
nvoy
er la liste
`r`
.
Afin de vérifier que notre implémentation est correcte, nous allons vérifier
deux des invariants de cet algorithme à la fin de chaque itération:
-
la somme des longueurs des deux listes est constante
;
deux des invariants de cet algorithme à la fin de chaque itération
:
-
la somme des longueurs des deux listes est constante;
-
la liste
`r`
est une liste triée.
1.
Écrire
une fonction
`est_triee`
qui prend en paramètre une liste et renvoie
1.
Définissez
une fonction
`est_triee`
qui prend en paramètre une liste et renvoie
un booléen indiquant si la liste est bien triée dans l'ordre croissant.
```cpp
bool est_triee(liste *l);
```
2.
Écrire
maintenant la fonction de tri par sélection sur les listes en
2.
Définissez
maintenant la fonction de tri par sélection sur les listes en
vérifiant bien que les invariants sont vérifiés à la fin de chaque
itération.
```cpp
liste *tri_selection(liste *l);
```
This diff is collapsed.
Cliquez pour l'agrandir.
Aperçu
0%
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter