Différences entre versions de « Tutoriel:Tri pointu pour une liste »
(Page créée avec « Si vous désirez trier une liste d'objets GeoGebra, il n'est pas improbable que la manière de trier que vous désirez ne soit pas possible avec la commande [[Commande Trie... ») |
|||
Ligne 14 : | Ligne 14 : | ||
{{example|1= | {{example|1= | ||
− | Si nous voulons ordonner une liste de points suivant les valeurs croissantes de leur distance à l'origine, nous avons <math>X := \mathbb R^2</math> et <math>f((x,y)) := \sqrt{x^2 + y^2}</math>. Dans GeoGebra, <math>f</math> pour un point <code>A</code> peut être <code> | + | Si nous voulons ordonner une liste de points suivant les valeurs croissantes de leur distance à l'origine, nous avons <math>X := \mathbb R^2</math> et <math>f((x,y)) := \sqrt{x^2 + y^2}</math>. Dans GeoGebra, <math>f</math> pour un point <code>A</code> peut être <code>Longueur[A]</code>, ainsi la '''*section en gras*''' dans l'algorithme peut être lue comme <code>Longueur[Elément[liste,i]]</code>.}} |
{{example|1= | {{example|1= | ||
Si nous voulons ordonner une liste de cercles suivant les valeurs croissantes de leur rayon, la '''*section en gras*''' dans l'algorithme peut être lue comme <code>Rayon[Elément[liste,i]]</code>.}} | Si nous voulons ordonner une liste de cercles suivant les valeurs croissantes de leur rayon, la '''*section en gras*''' dans l'algorithme peut être lue comme <code>Rayon[Elément[liste,i]]</code>.}} |
Version du 11 avril 2012 à 18:45
Si vous désirez trier une liste d'objets GeoGebra, il n'est pas improbable que la manière de trier que vous désirez ne soit pas possible avec la commande Trier.
(Si vous désirez simplement inverser le résultat, vous pouvez utiliser Trier[]
en association avec la commande Retourner[]).
Mais dans le cas où le type d'objet n'est pas traité par Trier[]
ou que vous désirez un critère de tri complétement différent, cette page peut vous aider dans votre recherche. Si vous avez des difficultés à comprendre l'algorithme, vous pouvez trouver ensuite l'explication et des exemples.
Algorithme
- Soit
liste
la liste que nous voulons trier. liste_a = Trier[Séquence[(
*nombre basé sur Elément[liste, i]*, i), i, 1, Longueur[liste]]]
Elle correspond à c dans l'explication (la liste d'aide). La *section en gras* est appelée f dans l'explication.liste_t = Séquence[Elément[liste, y(Elément[liste_a, i])], i, 1, Longueur[liste]]
C'est la liste triée.
Explication
Pour clarifier la situation, essayons de formuler la demande mathématiquement : Soit une liste (a_1, a_2, \ldots, a_n) \subset X et une application f: X \to \mathbb R, nous voulons trouver une permutation \sigma \in S_n telle que f(a_{\sigma(k)}) \leq f(a_{\sigma(l)}) \; \forall (k,l) \in \mathbb N^2: 1 \leq k \leq l \leq n. Vous pouvez interpréter la permutation \sigma comme une renumérotation telle que (a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)})soit la liste triée.
Ainsi nous devons d'abord établir une application f en adéquation avec notre tri, par exemple :
A
peut être Longueur[A]
, ainsi la *section en gras* dans l'algorithme peut être lue comme Longueur[Elément[liste,i]]
.Rayon[Elément[liste,i]]
.L'astuce pour résoudre ce problème avec GeoGebra est d'utiliser la commande existant pour trier une liste de point.
Au lieu de considérer géométriquement un point, nous le considérons simplement comme un couple de nombres.
GeoGebra nous permet de trier ces points par leur abscisse, ainsi nous créons une liste de points \tilde c = (\tilde c_1, \ldots, \tilde c_n) avec \tilde c_k := (f(a_k), k) et trions cette liste. Appelons cette liste triée c = (c_1, \ldots, c_n). Elle nous permet maintenant de construire \sigma, parce que y(c_{\sigma(k)}) = k. En utilisant \sigma nous pouvons ensuite construire la version triée de notre liste originale.
en:Tutorial:Advanced_List_Sorting
es:Tutorial:Orden de Listas Avanzado