Giovanni Bricconi

My site on WordPress.com

Archive for September 2012

Risposte quiz sequenze di eventi casuali

leave a comment »

Ciao,

Il problema di trovare una picola sequenza particolare in più lunghe sequenze di eventi casuali di una certa lunghezza mi è venuto in mente qualche anno fa. Volevo farmi un’idea di quanto le parole di un testo sono anomale rispetto a sequenze di caratteri casuali: le parole appaiono spesso identiche nel testo mentre sequenze casuali (errori di battitura) sono molto rare. Allora per semplificare ho fatto l’ipotesi che le lettere dell’alfabeto avessero ciascuna una propria probabilità di apparire, e non fossero dipendenti tra loro (volevo semplificare al massimo).

Dopo un po’ di tempo ho scoperto che il problema era decisamente più difficile di quanto mi aspettassi; dopo molto tempo sono riuscito a risolverlo però in modo ricorsivo e piuttosto macchinoso. Ho deciso di provare a diffondere il problema per vedere se la mia soluzione è corretta e se qualcuno riesce a trovare una soluzione più furba che non richieda la ricorsione. Penso che per una particolare sequenza si possano comunque ottenere delle soluzioni in forma chiusa usando la “trasformata z”, ma non ho più avuto voglia di approfondire il problema.

Nei documenti dove spiego quello che ho trovato indico la piccola sequenza da cercare con il simbolo ρ mentre uso s per indicare la sequenza più lunga in cui cercare.

Ho definito diversi problemi, quello più chiaro da spiegare è la ricerca di esatamente i apparizioni di ρ nelle stringhe lunghe x caratteri: Ai(x). Dal quale si può anche facilmente ricavare la probabilità che ρ appaia al più i volte (Ni(x))

Per tornare alle soluzioni del problema che ho inviato: la sequenza abc semplifica molto il problema, le sequenze abcab o aaa sono molto più problematiche perchè si prestano a essere composte sovrapponendole: aaa si può comporre in aaaaaaaa e abcab in abcabcabcab. Con queste complicazioni trovare soluzioni con il calcolo combinatorio mi è stato impossibile.

Per trovare le soluzioni sono passato da questa idea: posso avere  i apparizioni in x caratteri se esattamente a x caratteri ho l’iesima apparizione oppure se prima avevo già i apparizioni e non estraggo la i+1 esima proprio in x.

Per tener conto delle sovrapposizioni possibili ho dovuto introdurre dei coefficienti che dipendono dalla forma della ρ che si sta cercando. Qui la soluzione si trova considerando che se ρ si può comporre allora un suo pezzettino di testa si deve ripetere. Fatta questa considerazione bisogna introdurre un nuovo problema ausiliario, la probabilità di avere Ai(x) che non terminano proprio con quel pezzettino.

Per venire all’ultima domanda del quiz, se si vanno a cercare la o una delle sequenza ρ più probabile (ripetizione del carattere più probabile) e la o una delle più improbabili si possono costruire due funzioni che indicano la probabilità minima e massima che si presentino quelle apparizioni al variare di x.

Per chi avesse ancora la pazienza di giocare con il problema propongo la lettura di questo articolo

 

 

 

 

Written by Giovanni

September 27, 2012 at 6:54 pm

Posted in Varie

Quiz sequenze di eventi casuali

leave a comment »

Supponi di avere una variabile casuale X da cui, ad ogni estrazione, si possono ottenere solo i valori a,b,c con probabilità Pa=0,5 Pb=0,3 e Pc=0,2. Supponi inoltre che ogni estrazione sia indipendente dalla successiva.

Ora prova ad estrarre una sequenza di 10 eventi da questa variabile casuale, potresti per esempio ottenere abbaabcacb; in questa sequenza è presente la sottosequenza abc.

Qual’è la probabilità di non trovare mai la sequenza abc in tutte le possibili estrazioni di 10 eventi? [Ai(x) = {probabilità che la sequenza appaia i volte in estrazioni di lunghezza x} A0(10) = 0,773392] e di trovarla una volta? [A1(10) = 0,213324]

Come cambiano la probabilità passando da 10 a 11 o 12 estrazioni? [A0(11)=0,748630 A0(12)=0,724661; A1(11)=0,233010 A1(12)=0,251217]

Che cosa cambia se invece di abc si cerca  aaa oppure abcab?

[per aaa]

x A0(x) A1(x)
10 0,94765056 0,04272947
11 0,94146527 0,04749001
12 0,93532035 0,05218658

[per abcab]

x A0(x) A1(x)
10 0,97456522 0,02494956
11 0,97043247 0,02890066
12 0,96631838 0,03281444

Esistono un limite minimo e uno massimo alla probabilità di trovare una sola volta una sequenza di tre eventi in sequenze di x elementi?

Written by Giovanni

September 19, 2012 at 6:13 pm

Posted in matematica

Tips Netezza

leave a comment »

Netezza è un potente quanto sconosciuto database per datawharehouse, ora acquisito da IBM e bastato su postrgresql con cui condivide molti comandi e funzioni sql.

Per accedervi si può usare Eclipse e il driver jdbc, però con alcuni impicci, tra i quali non poter vedere i sorgenti delle viste.

Per risolvere il problema

SELECT definition FROM _v_view WHERE viewname=’NOME_VISTA’

 

Written by Giovanni

September 19, 2012 at 3:30 pm

Posted in Varie

UnxUtils

leave a comment »

Magagna del giorno: convincere uno script perl linux a girare sotto windows.

Per fortuna lo script è semplice e fa al massimo qualche chiamata a tool standard unix, che per fortuna sono facilissimi da trovare per windows, ricompilati senza dover installare cygwin.

enjoy UnxUtils

 

Written by Giovanni

September 19, 2012 at 3:19 pm

Posted in Varie

EHCache

leave a comment »

Di quando in quando capita di voler utilizzare una cache per conservare il risultato delle elaborazioni, per conservarle sino a che qualche evento non scatta: per esempio nuovi dati disponibili, una modifica su un file o semplicemente se è trascorso molto tempo da quando i dati sono stati elaborati.

Più di dieci anni fa mi ero scritto una cache con un numero limitato di entry, che scartava gli elementi più vecchi. Mi ha servito degnamente per anni ed anni, questa volta invece di continuare a riciclarla ho deciso di fare un giro su google per vedere quali mirabolanti framework java sono usciti in questi anni.

Una delle prime pagine che si trovano è una directory di cache java purtroppo molte delle quali sono morte e defunte o no hanno più nulla da aggiungere da diversi anche, come la vecchia oscache di cui avevo sentito parlare tanto tempo fa.

Una carina che ho trovato si chiama EHCache, parte delle funzionalità sono gratuite (quelle che servono normalmente) mentre altre richiedono una licenza. Visto che a me serve poco più che limitare lo spazio in memoria per i dati ho deciso di provarla.

basta scaricare i jar e metterli nel progetto, copiare il file di configurazione ehcache.xml nella radice dei sorgenti e fare qualche minima modifica – spegnere il supporto per la cache distribuita terracotta che è molto oltre le mie necessità. Per fare questo basta commentare tutte i tag <terracotta/> che si trovano nelle cache di esempio.

Poi nelle classi java bastano un paio di linee di codice

CacheManager cacheManager;
Ehcache cache;

cacheManager = CacheManager.newInstance();
cache = cacheManager.getEhcache(“sampleCache2”);

per inizializzare (solo la prima volta) la chache, e poi per inserivi i dati

cache.put(new Element(chiave,oggettoDaSalvare));

invece per leggere

Element cacheElement = cache.get(chiave);

if (cacheElement!=null) {
            logger.finest(“cache hit”);
            return (MyValueObject) cacheElement.getObjectValue();
        }

 

Niente di più complicato di cosi!

http://ehcache.org/

Written by Giovanni

September 17, 2012 at 4:18 pm

Posted in Varie

shell e mouse

leave a comment »

stufo di usare ctrl+a e le freccine per modificare i comandi shell quando sbagli a scrivere? usare il mouse per spostare il cursore un sogno?

ho deciso di dare una chance alla zhs dopo aver trovato questo script http://stchaz.free.fr/mouse.zsh

vediamo un po’ come va, funziona perfettamente usando iTerm2 come terminale

Written by Giovanni

September 11, 2012 at 1:05 pm

Posted in Varie

foglio di calcolo – verifiche sequenze di eventi

leave a comment »

Allego in questo post il foglio di calcolo che contiene i risultati esposti nell’articolo sequenze di eventi casuali

Ecco il file

verifiche

Written by Giovanni

September 10, 2012 at 8:46 pm

Posted in Varie

python e le stringhe

leave a comment »

Purtroppo mi tocca lavorare con molti vecchi programmi scritti in Python 2.x, non che python sia un cattivo linguaggio di per se ma ha un paio di cose che proprio non riesco a digerire:

  1. nei parametri dei metodi e delle funzioni non è possibile specificare il tipo della variabile. Io uso eclipse con pydev, se sto scrivendo un pezzo di codice in cui dichiaro le variabili ottengo i suggerimenti e questo è molto utile quando non si conoscono bene le api. Invece quando i parametri ti vengono passati non c’è modo di saperne il tipo e quindi addio suggerimenti, con conseguenti ricerche estenuanti o errori a run time
  2. le stringhe creano un sacco di bug, cioè non esiste un tipo stringa generico ma in python 2.x esistono il tipo string ed il tipo unicode. se si prova a stampare una stringa con caratteri accentati unicode su un file (come lo stdout…) si ottiene un eccezzione. Quindi se non ti ricordi di mettere almeno qualche carattere accentato qua e la nei tuoi test ti ritrovi a ottenere un programma che si pianta appena un utente italiano prova a usarlo.

Oggi come al solito ho dovuto perdere mezz’ora per testare bene che cosa succede con i caratteri accentati, per fortuna ho trovato questo utilie pezzo di codice

-def safe_unicode(obj, *args):
–    “”” return the unicode representation of obj
–        from http://code.activestate.com/recipes/466341-guaranteed-conversion-to-unicode-or-byte-string/ “””
–    try:
–        return unicode(obj, *args)
–    except UnicodeDecodeError:
–        # obj is byte string
–        ascii_text = str(obj).encode(‘string_escape’)
–        return unicode(ascii_text)

Ora converto tutte le stringhe che ho in ingresso in unicode e poi alla fine quando devo mandare le mail converto tutto in utf8.
Leggendo http://docs.python.org/py3k/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit ho scoperto che il python 3 ha finalmente messo fine a questa situazione e tutte le stringhe sono diventate unicode. Motivo in più per fare il porting del vecchio codice, appena avrò finito di aggiornare solr alla nuova versione ci proverò.

Written by Giovanni

September 10, 2012 at 10:13 am

Posted in Varie

Introduzione: la probabilità di sequenze di eventi casuali

with 2 comments

Questo documento descrive in modo più semplice, e corredato da esempi, quanto ho descritto nel mio post precedente “la probabilità di sequenze di eventi casuali”. Quindi consiglio vivamente a chi fosse interessato di leggere prima questa l’introduzione e poi eventualmente l’altro.

Consideriamo un insieme di eventi casuali indipendenti xi: \xi=\{a,b,c,\dots\} ognuno con una probabilità di realizzarsi nota P_{a},P_{b},\dots

Compiendo diverse estrazioni casuali possiamo costruire delle sequenze di eventi s
, per esempio a,a,c,d,b,z,… Volendo fare un esempio concreto si può pensare alla roulette: in questo caso gli eventi possibili sono i numeri da zero a 36, \xi=\{0,1,2,\dots,36\}
e una sequenza di eventi possibile è {0,14,7,21,21,35}. Nel caso della roulette la probabilità di ogni singolo evento P_{i}
è uguale a quella di qualsiasi altro, cioè P_{0}=\dots=P_{36}=\frac{1}{37}

Fissato x, numero di estrazioni che si compiono, un problema semplice che ci si può porre è: qual’è la probabilità che un evento a=4 appaia almeno una volta in una sequenza di x estrazioni? La soluzione è, nel caso della roulette, 1-\left(1-\nicefrac{1}{37}\right)^{x}, cioè 1 meno la probabilità che ad ogni singola estrazione non esca il 4.

Non ho mai trovato un documento che spiegasse come calcolare la probabilità di trovare, in una sequenza casuale, una specifica coppia o una terna consecutiva di eventi; ho quindi deciso di affrontare questo problema e questo documento raccoglie in forma divulgativa i risultai che ho ottenuto. La dimostrazione di quanto trovato è svolta in un documento separato in modo da non appesantire troppo la lettura.

In questo documento mostrerò, ad esempio, come calcolare la probabilità che una sequenza di nostro interesse \rho
, come \rho= {7, 21}, appaia esattamente una, due o i volte all’interno di estrazioni lunghe x elementi. Il problema in effetti diventa complesso solo quando si ha a che fare con sequenze che possono essere parzialmente sovrapposte su se stesse, come \rho=\{a,b,a\}

WordPress non è proprio l’ideale per pubblicare questo tipo di contenuto, quindi il resto dell’articolo è in questo file Divulgativo

Written by Giovanni

September 9, 2012 at 10:03 am

Posted in matematica

La probabilità di sequenze di eventi casuali

with one comment

Data una sorgente di eventi casuali tra loro indipendenti – anche se non equiprobabili – ed una particolare sequenza di eventi di interesse, qual’e la probabilita che essa si presenti nessuna, una, n volte in un certo numero di estrazioni consecutive?

Vorrei postare l’articolo come pagina web, ma avendolo scritto tempo fa in latex sto ancora cercando di capire come fare a convertirlo e caricarlo in wordpress decentemente.

Per adesso eccolo in formato pdf: La probabilità di sequenze di eventi casuali

 

 

Written by Giovanni

September 9, 2012 at 9:41 am

Posted in matematica