La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Biologia Computazionale Giulio Pavesi

Presentazioni simili


Presentazione sul tema: "Biologia Computazionale Giulio Pavesi"— Transcript della presentazione:

1 Biologia Computazionale Giulio Pavesi

2 Biologia Computazionale? Computational Biology, sometimes referred to as bioinformatics, is the science of using biological data to develop algorithms and relations among various biological systems. Prior to the advent of computational biology, biologists were unable to have access to large amounts of data. Researchers were able to develop analytical methods for interpreting biological information, but were unable to share them quickly among colleagues (Wikipedia)

3 Biologia Computazionale? Bioinformatics: Research, development, or application of computational tools and approaches for expanding the use of biological, medical, behavioral or health data, including those to acquire, store, organize, analyze, or visualize such data. Computational Biology: The development and application of data-analytical and theoretical methods, mathematical modeling and computational simulation techniques to the study of biological, behavioral, and social systems.

4 Programmare? Algoritmo: sequenza di operazioni che a partire da un insieme di dati iniziali (input) produce un insieme di dati finali (output) Algoritmo: sequenza di operazioni che a partire da un insieme di dati iniziali (input) produce un insieme di dati finali (output) Un algoritmo “ descrive ” il procedimento per risolvere un problema, e può essere scritto in linguaggio “ naturale ” o con apposite rappresentazioni ( “ pseudocodici ”, diagrammi di flusso) ma NON dipende da linguaggi di programmazione Un algoritmo “ descrive ” il procedimento per risolvere un problema, e può essere scritto in linguaggio “ naturale ” o con apposite rappresentazioni ( “ pseudocodici ”, diagrammi di flusso) ma NON dipende da linguaggi di programmazione Programmazione: implementazione di uno o più algoritmi in un dato linguaggio di programmazione  descrivo le operazioni con comandi che possono essere eseguiti da un computer Programmazione: implementazione di uno o più algoritmi in un dato linguaggio di programmazione  descrivo le operazioni con comandi che possono essere eseguiti da un computer

5 Il primo algoritmo della storia "If some one say: "You divide ten into two parts: multiply the one by itself; it will be equal to the other taken eighty-one times." Computation: You say, ten less thing, multiplied by itself, is a hundred plus a square less twenty things, and this is equal to eighty-one things. Separate the twenty things from a hundred and a square, and add them to eighty-one. It will then be a hundred plus a square, which is equal to a hundred and one roots. Halve the roots; the moiety is fifty and a half. Multiply this by itself, it is two thousand five hundred and fifty and a quarter. Subtract from this one hundred; the remainder i s two thousand four hundred and fifty and a quarter. Extract the root from this; it is forty-nine and a half. Subtract this from the moiety of the roots, which is fifty and a half. There remains one, and this is one of the two parts.” [Risolveva: (10-x) 2 =81x]

6

7 Programmi ed algoritmi Quando si vuole risolvere un problema utilizzando un computer è necessario prima “ disegnare ” un algoritmo per la soluzione Quando si vuole risolvere un problema utilizzando un computer è necessario prima “ disegnare ” un algoritmo per la soluzione L ’ algoritmo deve essere indipendente dalla successiva implementazione (codifica) in un linguaggio di programmazione L ’ algoritmo deve essere indipendente dalla successiva implementazione (codifica) in un linguaggio di programmazione L ’ algoritmo descrive un procedimento che, partendo da dati di input (l ’ istanza del problema), esegue un insieme di istruzioni o operazioni, in un ordine stabilito, che al termine produce come risultato (output) la soluzione del problema L ’ algoritmo descrive un procedimento che, partendo da dati di input (l ’ istanza del problema), esegue un insieme di istruzioni o operazioni, in un ordine stabilito, che al termine produce come risultato (output) la soluzione del problema

8 Programmi ed algoritmi I passi (istruzioni) dell ’ algoritmo devono essere I passi (istruzioni) dell ’ algoritmo devono essere Finiti (l ’ algoritmo deve terminare) Finiti (l ’ algoritmo deve terminare) Non ambigui Non ambigui Terminare e produrre un output corretto per ogni istanza del problema Terminare e produrre un output corretto per ogni istanza del problema Ad esempio, una ricetta *non* è un algoritmo se scrive “ aggiungere un pizzico di sale ” ; lo è se scrive “ aggiungere 0,5 g di sale ” Ad esempio, una ricetta *non* è un algoritmo se scrive “ aggiungere un pizzico di sale ” ; lo è se scrive “ aggiungere 0,5 g di sale ” Ad esempio, dato il problema “ Dati a, b, c risolvere l ’ equazione di secondo grado con coefficienti a,b,c ” deve prevedere tutti i casi diversi che si possono presentare per i valori di a,b,c (equazione impossibile, di primo grado, etc.) Ad esempio, dato il problema “ Dati a, b, c risolvere l ’ equazione di secondo grado con coefficienti a,b,c ” deve prevedere tutti i casi diversi che si possono presentare per i valori di a,b,c (equazione impossibile, di primo grado, etc.)

9 Programmi ed algoritmi Per molti problemi (quelli più difficili!) possono esistere più metodi di soluzione e quindi più algoritmi Per molti problemi (quelli più difficili!) possono esistere più metodi di soluzione e quindi più algoritmi L ’ algoritmo migliore è quello più “ efficiente ”, ovvero quello che implementato richiede meno risorse di calcolo (tempo, spazio su memoria o su disco) per produrre una soluzione esatta L ’ algoritmo migliore è quello più “ efficiente ”, ovvero quello che implementato richiede meno risorse di calcolo (tempo, spazio su memoria o su disco) per produrre una soluzione esatta La “ teoria degli algoritmi ” si occupa di stimare - indipendentemente dall ’ implementazione - il numero di operazioni “ atomiche ” o elementari e lo spazio richiesti da un algoritmo, in modo da decidere a priori quale possa essere la soluzione migliore La “ teoria degli algoritmi ” si occupa di stimare - indipendentemente dall ’ implementazione - il numero di operazioni “ atomiche ” o elementari e lo spazio richiesti da un algoritmo, in modo da decidere a priori quale possa essere la soluzione migliore

10 Programmi ed algoritmi Un algoritmo può essere descritto in vari modi, purché rispetti le condizioni precedenti Un algoritmo può essere descritto in vari modi, purché rispetti le condizioni precedenti Ad esempio, si possono usare: Ad esempio, si possono usare: Linguaggio naturale Linguaggio naturale Diagramma di flusso Diagramma di flusso “ Pseudocodice ” “ Pseudocodice ” Il linguaggio naturale si presta a semplici algoritmi, ma già algoritmi per problemi “ semplici ” come l ’ equazione di secondo grado diventano di difficile “ lettura ” se descritti così Il linguaggio naturale si presta a semplici algoritmi, ma già algoritmi per problemi “ semplici ” come l ’ equazione di secondo grado diventano di difficile “ lettura ” se descritti così “ Se a è uguale a zero, allora è un equazione di primo grado, la cui soluzione, se b e c sono diversi da zero è data da meno uno per b diviso per c, altrimenti.... ”

11 Diagramma di flusso Un “ diagramma di flusso ” descrive il “ flusso di calcolo ” di un algoritmo Un “ diagramma di flusso ” descrive il “ flusso di calcolo ” di un algoritmo E ’ suddiviso in blocchi: in ciascun blocco l ’ algoritmo compie un ’ operazione E ’ suddiviso in blocchi: in ciascun blocco l ’ algoritmo compie un ’ operazione Archi orientati (frecce) collegano un blocco all ’ altro, indicando la sequenza delle operazioni da compiere Archi orientati (frecce) collegano un blocco all ’ altro, indicando la sequenza delle operazioni da compiere Alcuni blocchi sono “ condizionali ” (o di “ selezione ”, di solito a forma di rombo), ovvero il blocco (istruzione) successivo dipenderà dalla condizione descritta dal blocco stesso: a seconda del fatto che la condizione sia soddisfatta o meno, saranno possibili due scelte per il passo successivo (e quindi ci saranno due archi uscenti) Alcuni blocchi sono “ condizionali ” (o di “ selezione ”, di solito a forma di rombo), ovvero il blocco (istruzione) successivo dipenderà dalla condizione descritta dal blocco stesso: a seconda del fatto che la condizione sia soddisfatta o meno, saranno possibili due scelte per il passo successivo (e quindi ci saranno due archi uscenti)

12 Delta = b 2 -4ac Delta < 0? Scrivi “ l ’ equazione non ha soluzioni reali ” x1=(-b+Delta)/2a x2=(-b-Delta)/2a Scrivi “ L ’ equazione ha soluzioni x1 e x2 ” Delta = 0? x=-b/2a Scrivi “ L ’ equazione ha due soluzioni coincidenti = x ” VERO FALSO

13 “ Pseudocodice ” “ Simula ” uno “ pseudo ” linguaggio di programmazione, e descrive l ’ algoritmo utilizzando le “ pseudo-istruzioni ” del linguaggio di programmazione “ Simula ” uno “ pseudo ” linguaggio di programmazione, e descrive l ’ algoritmo utilizzando le “ pseudo-istruzioni ” del linguaggio di programmazione Lo pseudocodice deve comunque essere indipendente dal linguaggio in cui si scriverà il programma Lo pseudocodice deve comunque essere indipendente dal linguaggio in cui si scriverà il programma Deve quindi contenere un insieme “ minimale ” di istruzioni che ci aspettiamo essere comuni a tutti i linguaggi (vedi dispense) Deve quindi contenere un insieme “ minimale ” di istruzioni che ci aspettiamo essere comuni a tutti i linguaggi (vedi dispense)

14 Lo “ pseudolinguaggio ” Possiamo assumere che il linguaggio di programmazione che usiamo conterrà operazioni: Possiamo assumere che il linguaggio di programmazione che usiamo conterrà operazioni: Leggi/Scrivi (input/output) Leggi/Scrivi (input/output) Operazioni (e funzioni) matematiche Operazioni (e funzioni) matematiche Assegnamento: assegnare un valore a una variabile Assegnamento: assegnare un valore a una variabile Selezione: SE(condizione)...ALLORA...ALTRIMENTI Selezione: SE(condizione)...ALLORA...ALTRIMENTI Iterazione: ESEGUIFINCHE ’ (condizione) - esegue finché la condizione è vera Iterazione: ESEGUIFINCHE ’ (condizione) - esegue finché la condizione è vera Iterazione: PEROGNI elemento IN collezione Iterazione: PEROGNI elemento IN collezione

15 “ Iterazioni ” E ’ possibile fare ripetere all ’ algoritmo lo stesso insieme di operazioni un qualsiasi numero n di volte, senza bisogno di scriverle esplicitamente n volte E ’ possibile fare ripetere all ’ algoritmo lo stesso insieme di operazioni un qualsiasi numero n di volte, senza bisogno di scriverle esplicitamente n volte n può n può essere un numero prefissato essere un numero prefissato una variabile il cui valore può variare durante l ’ esecuzione dell ’ algoritmo una variabile il cui valore può variare durante l ’ esecuzione dell ’ algoritmo dipendere dal fatto che una condizione venga soddisfatta o meno (ovvero, le istruzioni vengono ripetute finché la condizione è soddisfatta) dipendere dal fatto che una condizione venga soddisfatta o meno (ovvero, le istruzioni vengono ripetute finché la condizione è soddisfatta)

16 Esempio: calcola 2 n Leggi n contatore = 0 potenza = 1 ESEGUIFINCHE ’ (contatore < n) potenza = potenza * 2 contatore = contatore + 1 FINE ESEGUIFINCHE ’ Scrivi “ Due alla ” n “ è uguale a ” potenza

17 “ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali Le variabili possono essere di tipo diverso, a seconda dei dati che trattiamo, ad esempio Le variabili possono essere di tipo diverso, a seconda dei dati che trattiamo, ad esempio Numeri interi Numeri interi Numeri reali Numeri reali Matrici Matrici Parole costruite su un alfabeto Parole costruite su un alfabeto Vettori Vettori Anche in questo caso dobbiamo prevedere un insieme “ minimale ” di tipi di variabili su cui lavorare con lo pseudocodice Anche in questo caso dobbiamo prevedere un insieme “ minimale ” di tipi di variabili su cui lavorare con lo pseudocodice

18 Variabili I tipi di variabili disponibili e le relative operazioni dipendono dal linguaggio di programmazione I tipi di variabili disponibili e le relative operazioni dipendono dal linguaggio di programmazione Possiamo considerare “ universali ” due tipi di variabile: Possiamo considerare “ universali ” due tipi di variabile: Variabile “ numero ” Variabile “ numero ” Variabile “ carattere ” Variabile “ carattere ” Inoltre, possiamo prevedere la possibilità di gestire Inoltre, possiamo prevedere la possibilità di gestire Vettori o matrici di numeri Vettori o matrici di numeri Sequenze di caratteri (o “ stringhe ” ) Sequenze di caratteri (o “ stringhe ” )

19 Variabili La parola “ ciao ” è composta da quattro caratteri La parola “ ciao ” è composta da quattro caratteri In un computer è rappresentata come un array (o vettore) di quattro elementi carattere (detto stringa) In un computer è rappresentata come un array (o vettore) di quattro elementi carattere (detto stringa) Quindi, se abbiamo una variabile di tipo stringa il cui valore è “ ciao ” (senza virgolette!) potremmo anche accedere a uno qualsiasi dei caratteri della parola Quindi, se abbiamo una variabile di tipo stringa il cui valore è “ ciao ” (senza virgolette!) potremmo anche accedere a uno qualsiasi dei caratteri della parola

20 Variabile Una variabile è definita da un tipo (numero, carattere, etc.) e da un nome Una variabile è definita da un tipo (numero, carattere, etc.) e da un nome In un programma non si può (abbastanza logicamente) assegnare lo stesso nome a variabili diverse In un programma non si può (abbastanza logicamente) assegnare lo stesso nome a variabili diverse Tutte le operazioni (assegnazione, confronto, etc.) devono essere effettuate su variabili dello stesso tipo Tutte le operazioni (assegnazione, confronto, etc.) devono essere effettuate su variabili dello stesso tipo In perl le variabili (qualsiasi sia il loro tipo) sono precedute dal simbolo $, mentre i vettori dal In perl le variabili (qualsiasi sia il loro tipo) sono precedute dal simbolo $, mentre i vettori dal

21 Variabili Mentre, intuitivamente, quando progettiamo un algoritmo una variabile può essere di qualsiasi tipo e/o assumere qualsiasi valore, nei linguaggi di programmazione ogni variabile ha un TIPO ben definito Mentre, intuitivamente, quando progettiamo un algoritmo una variabile può essere di qualsiasi tipo e/o assumere qualsiasi valore, nei linguaggi di programmazione ogni variabile ha un TIPO ben definito Il tipo della variabile definisce l ’ insieme di valori che la variabile può assumere: Il tipo della variabile definisce l ’ insieme di valori che la variabile può assumere: Booleano: vero/falso Booleano: vero/falso Intero: un numero intero Intero: un numero intero “ Floating point ” : un numero con virgola (razionale!) “ Floating point ” : un numero con virgola (razionale!) Carattere: uno dei 255 caratteri definiti dalla tabella ASCII associata al computer che state usando Carattere: uno dei 255 caratteri definiti dalla tabella ASCII associata al computer che state usando

22 Codifica ASCII dei caratteri

23 Variabili e tipi Linguaggi TIPIZZATI: quando si usa una variabile in un programma è necessario definire esplicitamente (la prima volta che la si usa) che tipo è associato ad essa, ad esempio: Linguaggi TIPIZZATI: quando si usa una variabile in un programma è necessario definire esplicitamente (la prima volta che la si usa) che tipo è associato ad essa, ad esempio: int x = 10 int x = 10 char c = ‘ a ’ char c = ‘ a ’ Linguaggi non tipizzati: quanto sopra non è necessario. E ’ l ’ interprete del linguaggio che cerca di “ indovinare ” di che tipo di variabile si tratta sulla base dei valori associati ad essa (utile, ma pericoloso per chi programma!) Linguaggi non tipizzati: quanto sopra non è necessario. E ’ l ’ interprete del linguaggio che cerca di “ indovinare ” di che tipo di variabile si tratta sulla base dei valori associati ad essa (utile, ma pericoloso per chi programma!)

24 Variabili e tipi In ogni caso, per qualsiasi di linguaggio di programmazione usiate, dovete abituarvi a pensare di fare fare assegnamenti/confronti/etc soltanto tra variabili dello stesso tipo ed è quindi necessario che, indipendentemente dal linguaggio, abbiate sempre chiaro quale tipo è associato a ciascuna variabile In ogni caso, per qualsiasi di linguaggio di programmazione usiate, dovete abituarvi a pensare di fare fare assegnamenti/confronti/etc soltanto tra variabili dello stesso tipo ed è quindi necessario che, indipendentemente dal linguaggio, abbiate sempre chiaro quale tipo è associato a ciascuna variabile

25 Tipi di dati “ derivati ” Abbiamo accennato all ’ istruzione “ per ogni ” Abbiamo accennato all ’ istruzione “ per ogni ” PER OGNI elemento IN collezione_di_elementi ESEGUI... Come è possibile definire una “ collezione ” di elementi? Come è possibile definire una “ collezione ” di elementi? Il metodo più utilizzato è quello della “ sequenza ” (o “ array ”, vedi dispense pagine 20/21) Il metodo più utilizzato è quello della “ sequenza ” (o “ array ”, vedi dispense pagine 20/21)

26 Gli “array” L’array (ovvero, insieme ordinato di variabili) è molto utile per una grande quantità di applicazioni diverse, ed è supportato virtualmente da tutti i linguaggi di programmazione (per lo meno, da quelli che interessano a noi). L’array (ovvero, insieme ordinato di variabili) è molto utile per una grande quantità di applicazioni diverse, ed è supportato virtualmente da tutti i linguaggi di programmazione (per lo meno, da quelli che interessano a noi). Un paio di note: finora abbiamo definito gli elementi dell’array come, ad esempio c i ovvero con il “pedice” che si usa in matematica Un paio di note: finora abbiamo definito gli elementi dell’array come, ad esempio c i ovvero con il “pedice” che si usa in matematica Poiché i programmi si scrivono in “formato testo”, senza la possibilità di inserire indici o pedici, la notazione più comune mette il numero dell’elemento tra parentesi quadre, quindi Poiché i programmi si scrivono in “formato testo”, senza la possibilità di inserire indici o pedici, la notazione più comune mette il numero dell’elemento tra parentesi quadre, quindi c i si scrive c[i] – ovvero l’i-esimo elemento dell’array c c i si scrive c[i] – ovvero l’i-esimo elemento dell’array c Seconda nota: in informatica si conta a partire da zero!!!! Quindi, in un array chiamato c di n elementi, gli elementi saranno c[0] c[1] c[2] … c[n-1], ovvero gli indici invece di andare da 1 a n andranno da 0 a n-1!! Seconda nota: in informatica si conta a partire da zero!!!! Quindi, in un array chiamato c di n elementi, gli elementi saranno c[0] c[1] c[2] … c[n-1], ovvero gli indici invece di andare da 1 a n andranno da 0 a n-1!!

27 Array e sequenze In bioinformatica è comune scrivere programmi di analisi di sequenza In bioinformatica è comune scrivere programmi di analisi di sequenza La sequenza è rappresentata come una “stringa”, ovvero (nella nostra testa mentre programmiamo) come un array di caratteri La sequenza è rappresentata come una “stringa”, ovvero (nella nostra testa mentre programmiamo) come un array di caratteri La sequenza S = “ACGTAG” potrà essere rappresentata come un array di 6 elementi: La sequenza S = “ACGTAG” potrà essere rappresentata come un array di 6 elementi: S[0] = ‘A’ S[1]=‘C’ S[2] = ‘G’ e S[0] = ‘A’ S[1]=‘C’ S[2] = ‘G’ e …e così via…

28 Array e genomi Un cromosoma viene quindi solitamente rappresentato come un enorme array di milioni di caratteri, in cui il carattere in posizione i corrisponderà all’i- esimo paio di basi sul cromosoma (o meglio, all’ (i+1)-esimo paio di basi, se il primo ha posizione 0 nell’array) Un cromosoma viene quindi solitamente rappresentato come un enorme array di milioni di caratteri, in cui il carattere in posizione i corrisponderà all’i- esimo paio di basi sul cromosoma (o meglio, all’ (i+1)-esimo paio di basi, se il primo ha posizione 0 nell’array)

29 Array e sequenze Esercizio 1: data una sequenza, verificare se contiene un codone di start Esercizio 1: data una sequenza, verificare se contiene un codone di start Esercizio 2: data una sequenza, verificare quanti codoni di start contiene, e il frame di lettura di ognuno Esercizio 2: data una sequenza, verificare quanti codoni di start contiene, e il frame di lettura di ognuno Esercizio 3: data una sequenza, per ogni codone di start trovato verificare se esiste un codone di stop “in frame” rispetto ad esso Esercizio 3: data una sequenza, per ogni codone di start trovato verificare se esiste un codone di stop “in frame” rispetto ad esso

30 Trovare il codone di start La sequenza da analizzare è memorizzata in un array che si chiama “sequenza” La sequenza da analizzare è memorizzata in un array che si chiama “sequenza” A priori non sappiamo da quanti nucleotidi sarà composta A priori non sappiamo da quanti nucleotidi sarà composta Vediamo, carattere per carattere, se ci sono 3 elementi dell’array consecutivi che corrispondono ad ‘A’, ‘C’, ‘G’ Vediamo, carattere per carattere, se ci sono 3 elementi dell’array consecutivi che corrispondono ad ‘A’, ‘C’, ‘G’ Trovato un codone di start, possiamo a questo punto calcolare il frame di lettura a partire dalla posizione in cui lo abbiamo trovato Trovato un codone di start, possiamo a questo punto calcolare il frame di lettura a partire dalla posizione in cui lo abbiamo trovato Trovato un codone di start, possiamo verificare se a valle di esso c’è un codone di stop nello stesso frame di lettura Trovato un codone di start, possiamo verificare se a valle di esso c’è un codone di stop nello stesso frame di lettura


Scaricare ppt "Biologia Computazionale Giulio Pavesi"

Presentazioni simili


Annunci Google