Différences entre versions de « Tutoriel:Tri pointu pour une liste »

De GeoGebra Manual
Aller à : navigation, rechercher
(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>Distance[A]</code>, ainsi la '''*section  en gras*''' dans l'algorithme peut être lue comme <code>Distance[Elément[liste,i]]</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

  1. Soit liste la liste que nous voulons trier.
  2. 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.
  3. 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 :

Exemple: Si nous voulons ordonner une liste de points suivant les valeurs croissantes de leur distance à l'origine, nous avons X := \mathbb R^2 et f((x,y)) := \sqrt{x^2 + y^2}. Dans GeoGebra, f pour un point A peut être Longueur[A], ainsi la *section en gras* dans l'algorithme peut être lue comme Longueur[Elément[liste,i]].
Exemple: 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 Rayon[Elément[liste,i]].
Exemple: Une construction complète pour trier une liste de nombres complexes en fonction de leur argument peut être trouvée sur GeoGebra.

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

© 2024 International GeoGebra Institute