Diferencia entre revisiones de «Tutorial:Orden de Listas Avanzado»
(try) |
m (Revertidos los cambios de LailaTov (disc.) a la última edición de LilianaSaid) |
||
Línea 1: | Línea 1: | ||
− | {{ | + | {{tutorial|title=Diversos Ordenamientos de Listas}} |
{{Interfaz|Tutoriales}} | {{Interfaz|Tutoriales}} | ||
Para ordenar una lista de objetos de un modo tal que no lo hiciera posible el [[Comando Ordena]], pueden emplearse alternativas: | Para ordenar una lista de objetos de un modo tal que no lo hiciera posible el [[Comando Ordena]], pueden emplearse alternativas: |
Revisión del 21:46 12 ago 2020
Plantilla:Interfaz Para ordenar una lista de objetos de un modo tal que no lo hiciera posible el Comando Ordena, pueden emplearse alternativas:
- se precisa el comando Invierte para el modo descendiente en lugar del ascendente. Como en:
- objetos de tipo no compatible con Ordena o criterios diferentes de orden pueden requerir 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:
Si se desea ordenar una lista de puntos tal que su distancia al origen sea creciente, se tiene que X := \mathbb R^2 y f((x,y)) := \sqrt{x^2 + y^2} En GeoGebra , f de un punto
A
sería Longitud[A]
, por lo que la sección en negrita en el algoritmo sería Longitud(Elemento(lista, i))
Si se desea ordenar una lista de círculos por orden creciente de radios, la sección en negrita en el algoritmo sería
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.