Diferencia entre revisiones de «Tutorial:Orden de Listas Avanzado»
Línea 45: | Línea 45: | ||
}} | }} | ||
+ | [[de:Anleitungen:Listen von beliebigen Elementen sortieren]] | ||
[[en:Tutorial:Advanced List Sorting]] | [[en:Tutorial:Advanced List Sorting]] | ||
[[fr:Tutoriel:Tri pointu pour une liste]] | [[fr:Tutoriel:Tri pointu pour une liste]] | ||
[[Category:Tutoriales Avanzados]] | [[Category:Tutoriales Avanzados]] |
Revisión del 18:09 11 jul 2012
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 Longitud[A]
, por lo que la sección en negrita en el algoritmo sería Longitud[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.
¿Orden en los Nombres?
Si cinco puntos se denominan A
, B
, C
, D
y E
se van a ordenar acorde a cierto criterio. Usando lista = {A,B,C,D,E}
el algoritmo previo puede emplearse para ordenarlos según sus coordenadas. Respecto de sus nombres, vale señalar que en ocasiones son significativos en el contexto de la construcción y, por lo tanto, para quienes se propongan interpretarla. El algoritmo, levemente diferente al ya explicado, que opera sobre esos nombres sería:
- Sea
lista_n
la de los nombres de los objetos a ordenas.
Por ejemplo:lista_n = {"A", "B","C","D","E"}
. Es preciso no omitir las comillas dado que se trata del orden de los nombres de los objetos y no de los propios objetos. - Definiendo
listado=Secuencia[Objeto[Elemento[lista_n, k]], k, 1, Longitud[lista_n]]
.
Esto crea la lista de objetos a ordenar basándonos en la lista de los nombres. list_h = Ordena[Secuencia[(*número basado en Elemento[listado, i]*, i), i, 1, Longitud[listado]]]
Esta sería la segunda etapa del algoritmo original.lista_{ns} = Secuencia[Elemento[lista_n, y(Elemento[lista_h, i])], i, 1, Longitud[listado]]
Esto resulta así un listado ordenado de los nombres de los objetos, como{"B", "A", "E", "F", "D"}
. Si en cambio se prefiriera la lista de los valores ordenados de los objetos, basta con emplearlista_s
como en algoritmo explicado en sección previa.
de:Anleitungen:Listen von beliebigen Elementen sortieren en:Tutorial:Advanced List Sorting fr:Tutoriel:Tri pointu pour une liste