Tutorial:Orden de Listas Avanzado
Para ordenar una lista de objetos de un modo tal que no lo hiciera posible el Comando Ordena, pueden emplearse alternativas:
- para ordenar de modo descendiente en lugar de ascendiente, basta con incluir el Comando Invierte así, por ejemplo:
- Si el tipo de objeto no es compatible con Ordena o el criterio de orden fuera diferente, se puede apelar a alguna de las maniobras detalladas a continuación.
Algoritmo
- Se denomina
lista
la lista a ordenar. lista_h = Ordena[Secuencia[(*número basado en la lista Elemento[lista, i]*, i), i, 1, Longitud[lista]]]
Esto corresponde a c en la explicación (el listado de ayudas). La sección en negrita se denomina f en la explicación.lista_s = Secuencia[Elemento[lista, y(Elemento[lista_h, i])], i, 1, Longitud[lista]]
Esta es la lista ordenada.
Explicación
Para aclarar la situación se formula la tarea matemáticamente:
- Dada una lista (a_1, a_2, \ldots, a_n) \subset X y una aplicación f: X \to \mathbb R, se intenta encontrar una permutación \sigma \in S_n tal que f(a_{\sigma(k)}) \leq f(a_{\sigma(l)}) \; \forall (k,l) \in \mathbb N^2: 1 \leq k \leq l \leq n
Se puede pensar en la permutación \sigma como una renumeración tal que (a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)}) resulte la lista ordenada.
Así que primero es preciso llegar a una asignación de f para el ordenamiento correcto. Como en los siguientes casos:
A
sería Distancia[A]
, por lo que la sección en negrita en el algoritmo sería Distancia[Elemento[lista, i]]
.Radio[Elemento[lista, i]]
.La maniobra para resolver este problema en GeoGebra es utilizar el comando existente para ordenar una lista de puntos. En lugar de pensar en los puntos geométricamente, se los interpreta como pares de números. GeoGebra permite ordenar los puntos por sus abscisas para crear una lista de puntos \tilde c = (\tilde c_1, \ldots, \tilde c_n) con \tilde c_k := (f(a_k), k) y ordenar esta lista. Puede denominarse a la lista ordenada c = (c_1, \ldots, c_n)
Esta lista ordenada ahora nos permite construir \sigma. Porque y(c_{\sigma(k)}) = k. A partir de \sigma se puede construir la versión ordenada de la lista original.