Rilevanza di elementi non unici in una collezione

matteoc14
Salve a tutti,
scrivo in 'Generale' perchè non so dove collocare questo problema.

Volevo chiedere se qualcuno ha idea di come sia possibile identificare gli elementi (non unici) 'importanti' in una collezione,

Per capirci, mettiamo di avere una collezione di parole che si ripetono. Inizio a contarle e noto ad esempo che 'gatto' ha 50 occorrenze, 'cane' 20 occorrenze, 'lupo' 40, etc etc. Quindi la parola più rilevante è gatto, seguita da lupo, poi cane, etc.

Il mio obiettivo è estrarre dalla collezione la parola più 'importante' (quella con più occorrenze) assieme a quelle che le sono 'abbastanza vicino' (cioè se le occorrenze sono 120, 110, 30, 20, 5, ... a me potrebbero interessare solo 120 e 110. Se sono 50, 40, 25, 3, 2, ... a me potrebberro interessare solo 50,40 e 25 - per dire).
Purtroppo non ho idea di come modellare il concetto di 'abbastanza vicino'.

Sapreste aiutarmi?

Grazie,
Matteo

Risposte
Raptorista1
Detta così, la domanda è molto mal posta, perché la risposta è ovvia ed è "contale".

Devi dire di più sul problema, ad esempio che strumenti hai a disposizione: devi usare un pc? Puoi scrivere un programma?

matteoc14
Sì, sto scrivendo un programma.
Le parole so contarle quindi non è un problema, per esempio, ricavare dalla collezione le 5 parole con più occorrenze.

il punto è che su 5 parole puoi avere occorrenze di tipo

100 98 80 80 76

ma anche

100 98 23 20 11

Il secondo caso per me non è desiderabile, perchè 'ad occhio' si vedere che le parole 3,4,5 sono troppo lontane da 1,2 per avere un grado di importanza simile nella collezione.

Il problema è avere un concetto per modellare questo 'ad occhio'

Raptorista1
Puoi usare uno scarto relativo: ad esempio, se la parola che compare più volte è \(P_{max}\) ed ha \(N_{max}\) occorrenze, puoi vedere se una parola \(P_x\) con \(N_x\) occorrenze è "abbastanza vicina" [nel senso da te inteso] guardando la grandezza
\[
\delta_{x} = \frac{N_{max} - N_x}{N_{max}}.
\]
Si vede subito che \(0 \le \delta_{x} \le 1\), ed in particolare puoi fissare una tolleranza \(tol\) [che può essere ad esempio \(0.05 = 5\%\)] in modo da discriminare le parole \(P_x\) che ti interessano in base al fatto che la loro \(\delta_x\) sia maggiore o minore di \(tol\).

[xdom="Raptorista"]By the way, non è questa la sezione giusta del forum, per cui sposto in "Informatica".
Fa' attenzione la prossima volta![/xdom]

matteoc14
ti ringrazio per la risposta.
non ho postato in informatica perchè il problema non lo ritengo di programmazione, sono interessato alla matematica che c'è dietro. Riportarla in un programma, quello non è un problema.

C'è un modo per calcolare la tolleranza rispetto all'istanza del problema piuttosto che dargli un valore a caso?

Raptorista1
Non sono sicuro di aver capito la domanda: vuoi una cosa del tipo \(tol = tol(N_{max}\)?
In tal caso, basta prendere la tolleranza di prima e moltiplicare a destra e sinistra per \(N_{max}\), ma ottieni una cosa equivalente alla precendente [hai sempre lo stesso parametro da impostare].

Se la domanda non è questa, allora spiegati meglio.

matteoc14
intedo dire: perchè proprio 0.5%?
potrebbe essere un valore buono come non esserlo. Sarebbe invece interessante che questa soglia venisse generata a partire dai dati del problema P, quindi avere una funzione tol(P) che calcoli la soglia (ad esempio) in base al numero di parole totale nella collezione o al numero di parole distinte. (Questa è solo un'idea, tol(P) potrebbe anche essere inflenzata come dici tu da Nmax)

Raptorista1
Sì, quello puoi farlo benissimo.
La scelta dipende però dalle tue necessità specifiche, non posso suggerirtela io se non dici di più su quello che vuoi ottenere.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.