Difference between revisions of "Tutorial:Advanced List Sorting"

From GeoGebra Manual
Jump to: navigation, search
m (Length instead Distance for a point)
Line 14: Line 14:
  
 
{{example|1=
 
{{example|1=
If want to sort a list of points such that their distance to the origin is increasing we have <math>X := \mathbb R^2</math> and <math>f((x,y)) := \sqrt{x^2 + y^2}</math>. In GeoGebra <math>f</math> for a point <code>A</code> would be <code>Distance[A]</code>, so the bold section in the algorithm would read <code>Distance[Element[list,i]]</code>.}}
+
If want to sort a list of points such that their distance to the origin is increasing we have <math>X := \mathbb R^2</math> and <math>f((x,y)) := \sqrt{x^2 + y^2}</math>. In GeoGebra <math>f</math> for a point <code>A</code> would be <code>Length[A]</code>, so the bold section in the algorithm would read <code>Length[Element[list,i]]</code>.}}
 
{{example|1=
 
{{example|1=
 
If want to sort a list of circles such that their radius is increasing the bold section in the algorithm would read <code>Radius[Element[list,i]]</code>.}}
 
If want to sort a list of circles such that their radius is increasing the bold section in the algorithm would read <code>Radius[Element[list,i]]</code>.}}
Line 24: Line 24:
 
[[Category:Advanced Tutorials]]
 
[[Category:Advanced Tutorials]]
 
[[es:Tutorial:Orden de Listas Avanzado]]
 
[[es:Tutorial:Orden de Listas Avanzado]]
 +
[[fr:Tutoriel:Tri pointu pour une liste]]

Revision as of 18:48, 11 April 2012

If you want to sort a list of objects in GeoGebra it is not unlikely that the kind of sorting you want is not possible with the Sort command. (If you just want to inverse the results you can use Sort[] together with Reverse[]).

But in case the kind of object is not supported by Sort[] or you want a completely different sorting criterion this tutorial may help you with your task. If you're having problem with the algorithm you can read the explanation and examples below.

Algorithm

  1. Let list be the list we want to sort.
  2. list_h = Sort[Sequence[(*number based upon Element[list, i]*, i), i, 1, Length[list]]]
    This corresponds to c in the explanation (the helper list). The bold section is called f in the explanation.
  3. list_s = Sequence[Element[list, y(Element[list_h, i])], i, 1, Length[list]]
    This is the sorted list.

Explanation

To clarify the situation let us try to formulate the task mathematically: Given a list (a_1, a_2, \ldots, a_n) \subset X and a mapping f: X \to \mathbb R we want to find a permutation \sigma \in S_n such that f(a_{\sigma(k)}) \leq f(a_{\sigma(l)}) \; \forall (k,l) \in \mathbb N^2: 1 \leq k \leq l \leq n. You can think of the permutation \sigma as a renumbering such that (a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)}) will be the sorted list.

So we first have to come up with a mapping f for the correct sorting, for example:

Example: If want to sort a list of points such that their distance to the origin is increasing we have X := \mathbb R^2 and f((x,y)) := \sqrt{x^2 + y^2}. In GeoGebra f for a point A would be Length[A], so the bold section in the algorithm would read Length[Element[list,i]].
Example: If want to sort a list of circles such that their radius is increasing the bold section in the algorithm would read Radius[Element[list,i]].
Example: A complete construction to sort a list of complex numbers by their argument can be found on GeoGebra: http://www.geogebra.org/material/show/id/7518

The trick to solve this problem in GeoGebra is to use the existing command to sort a list of points. Instead of thinking of points geometrically we think of those just as pairs of numbers. GeoGebra allows us to sort those points by their x-coordinates, so we create a list of points \tilde c = (\tilde c_1, \ldots, \tilde c_n) with \tilde c_k := (f(a_k), k) and sort this list. Let's call the sorted list c = (c_1, \ldots, c_n). This sorted list now allows us to construct \sigma, because y(c_{\sigma(k)}) = k. Using \sigma we can then construct the sorted version of our original list. es:Tutorial:Orden de Listas Avanzado fr:Tutoriel:Tri pointu pour une liste

© 2021 International GeoGebra Institute