Tutorial:Ordinare gli elementi di una lista

Da GeoGebra Manual.

A volte il comando Ordina non è sufficiente per ottenere alcune opzioni avanzate di ordinamento degli oggetti presenti in una lista. (Per ritornare alla situazione iniziale, dopo un ordinamento, basta utilizzare il comando Ordina[] assieme al comando Inverti[]).

Quando il tipo di oggetti contenuti nella lista non è supportato dal comando Ordina[] o si desidera utilizzare un criterio di ordinamento completamente diverso da quello implementato, è possibile seguire il procedimento e gli esempi descritti di seguito.

Algoritmo

  1. Sialista la lista da ordinare.
  2. lista_h = Ordina[Successione[(*numero basato su Elemento[lista, i]*, i), i, 1, Lunghezza[lista]]]
    Ciò corrisponde a c nella Spiegazione. La parte di testo in grassetto si riferisce a f nella Spiegazione.
  3. lista_s = Successione[Elemento[lista, y(Elemento[lista_h, i])], i, 1, Lunghezza[lista]]
    Ecco la lista ordinata.

Spiegazione

Riformuliano in termini matematici la questione: data una lista (a_1, a_2, \ldots, a_n) \subset X e un'applicazione f: X → ℝ si vuole determinare una permutazione \sigma \in S_n tale che f(a_{\sigma(k)}) \leq f(a_{\sigma(l)}) \; \forall (k,l) \in ℕ^2: 1 \leq k \leq l \leq n. Si può pensare alla permutazione \sigma come a una rinumerazione, tale che (a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)}) sarà la lista ordinata.

È innanzitutto necessario determinare un'applicazione f che ci consenta di ottenere un ordinamento corretto:

Esempio: Per ordinare una lista di punti in modo tale che la loro distanza dall'origine sia crescente, avremo X := ℝ^2 e f((x,y)) := \sqrt{x^2 + y^2}. In GeoGebra f per un punto A è Lunghezza[A], e quindi la parte in grassetto dell'algoritmo diventa in questo caso Lunghezza[Elemento[lista, i]].
Esempio: Per ordinare una lista di circonferenze secondo il raggio decrescente, la parte in grassetto dell'algoritmo sarà Raggio[Elemento[lista,i]].
Esempio: Sulla Piattaforma dei materiali di GeoGebra è disponibile una costruzione completa sull'ordinamento di numeri complessi secondo i rispettivi argomenti

Il trucco per risolvere questo problema in GeoGebra è quello di utilizzare il comando predefinito per ordinare una lista di punti. Invece di pensare a un punto in termini geometrici, conviene pensare ad esso come a una coppia di numeri. GeoGebra allora consente l'ordinamento delle coppie rispetto all'ascissa, in modo da ottenere una lista di punti \tilde c = (\tilde c_1, \ldots, \tilde c_n) con \tilde c_k := (f(a_k), k) da ordinare. Sia c = (c_1, \ldots, c_n) la lista ordinata. Questa ci consente di costruire \sigma, perchè y(c_{\sigma(k)}) = k. Utilizzando \sigma è quindi possibile costruire la versione ordinata della lista originale.

E per i nomi ?

Supponiamo di avere costruito cinque punti: A, B, C, D ed E e di volere ordinare tali punti secondo un certo criterio. Utilizzando lista = {A, B, C, D, E} l'algoritmo precedentemente illustrato restituisce una lista ordinata secondo le coordinate dei punti, non secondo i rispettivi nomi. Per ordinare i punti secondo i nomi è quindi necessario modificare il precedente algoritmo:

  1. Sia lista_n la lista contenente i nomi degli oggetti da ordinare.
    Ad esempio: lista_n = {"nome1", "nome2",...}. Non dimenticarsi le virgolette: in questo modo il riferimento sarà ai nomi degli oggetti e non al valore degli stessi!
  2. Definiamo la lista da utilizzare nell'algoritmo: lista=Successione[Oggetto[Elemento[lista_n, k]], k, 1, Lunghezza[lista_n]].
    .
  3. Per ottenere la lista dei nomi ordinati, basta ora utilizzare il comando: lista_{ns} = Successione[Elemento[lista_n, y(Elemento[lista_h, i])], i, 1, Lunghezza[lista]]
    .
Esempio: Il terzo esempio relativo a come modificare l'algoritmo originale per visualizzare i nomi degli oggetti è disponibile qui

en:Tutorial:Advanced List Sorting es:Tutorial:Orden de Listas Avanzado fr:Tutoriel:Tri pointu pour une liste de:Anleitungen:Listen von beliebigen Elementen sortieren

© 2021 International GeoGebra Institute