La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Biologia Computazionale - Algoritmi. Programmi ed algoritmi Quando si vuole risolvere un problema utilizzando un computer è necessario prima disegnare.

Presentazioni simili


Presentazione sul tema: "Biologia Computazionale - Algoritmi. Programmi ed algoritmi Quando si vuole risolvere un problema utilizzando un computer è necessario prima disegnare."— Transcript della presentazione:

1 Biologia Computazionale - Algoritmi

2 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 Lalgoritmo deve essere indipendente dalla successiva implementazione (codifica) in un linguaggio di programmazione Lalgoritmo deve essere indipendente dalla successiva implementazione (codifica) in un linguaggio di programmazione Lalgoritmo descrive un procedimento che, partendo da dati di input (listanza del problema), esegue un insieme di istruzioni o operazioni, in un ordine stabilito, che al termine produce come risultato (output) la soluzione del problema Lalgoritmo descrive un procedimento che, partendo da dati di input (listanza del problema), esegue un insieme di istruzioni o operazioni, in un ordine stabilito, che al termine produce come risultato (output) la soluzione del problema

3 Programmi ed algoritmi I passi (istruzioni) dellalgoritmo devono essere I passi (istruzioni) dellalgoritmo devono essere Finiti (lalgoritmo deve terminare) Finiti (lalgoritmo 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 lequazione 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 lequazione 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.)

4 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 Lalgoritmo 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 Lalgoritmo 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 dallimplementazione - 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 dallimplementazione - 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

5 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 lequazione 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 lequazione 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....

6 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 lalgoritmo compie unoperazione E suddiviso in blocchi: in ciascun blocco lalgoritmo compie unoperazione Archi orientati (frecce) collegano un blocco allaltro, indicando la sequenza delle operazioni da compiere Archi orientati (frecce) collegano un blocco allaltro, 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)

7 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

8 Pseudocodice Simula uno pseudo linguaggio di programmazione, e descrive lalgoritmo utilizzando le pseudo-istruzioni del linguaggio di programmazione Simula uno pseudo linguaggio di programmazione, e descrive lalgoritmo 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)

9 Iterazioni E possibile fare ripetere allalgoritmo lo stesso insieme di operazioni un qualsiasi numero n di volte, senza bisogno di scriverle esplicitamente n volte E possibile fare ripetere allalgoritmo 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 lesecuzione dellalgoritmo una variabile il cui valore può variare durante lesecuzione dellalgoritmo 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)

10 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

11 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

12 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)

13 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

14 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

15 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

16 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 linsieme di valori che la variabile può assumere: Il tipo della variabile definisce linsieme 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

17 Codifica ASCII dei caratteri

18 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 linterprete 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 linterprete 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!)

19 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

20 Tipi di dati derivati Abbiamo accennato allistruzione per ogni Abbiamo accennato allistruzione 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)

21 Stringhe Una stringa (ovvero una sequenza di caratteri) è un tipo dato un po particolare Una stringa (ovvero una sequenza di caratteri) è un tipo dato un po particolare In alcuni linguaggi (es. C) è semplicemente vista come un array di caratteri In alcuni linguaggi (es. C) è semplicemente vista come un array di caratteri In altri (es. Perl) è invece un tipo dati a se stante, con alcune operazioni comode già predefinite In altri (es. Perl) è invece un tipo dati a se stante, con alcune operazioni comode già predefinite

22 Stringhe Ad esempio, in un linguaggio che contiene il tipo stringa, possiamo avere come operazioni associate: Ad esempio, in un linguaggio che contiene il tipo stringa, possiamo avere come operazioni associate: Date due stringhe s,t eq: (s eq t) equal, è vero se s è uguale a t, falso altrimenti ne: (s ne t) not equal, linverso di eq. : concatenazione, s.t è dato da una nuova stringa composta dai caratteri di s seguiti dai caratteri di t

23 Concatenazione di stringhe s = Ciao s = Ciao t = come va? t = come va? u = s.t (concatenazione) u = s.t (concatenazione) Quale sarà il valore di u? Quale sarà il valore di u? u = Ciaocome va? (non cera uno spazio alla fine di s!) u = Ciaocome va? (non cera uno spazio alla fine di s!)

24 Sottostringhe Data una stringa di n caratteri s, una sottostringa t di s è a sua volta una stringa, composta da caratteri consecutivi di s Data una stringa di n caratteri s, una sottostringa t di s è a sua volta una stringa, composta da caratteri consecutivi di ss[i]s[i+1]s[i+2]...s[j] Dove i >= 0 (ricordatevi che il primo elemento di una sequenza ha indice zero!), i =i Dove i >= 0 (ricordatevi che il primo elemento di una sequenza ha indice zero!), i =i

25 Sottostringhe Quindi, se la stringa $s è Ciao come va?: Quindi, se la stringa $s è Ciao come va?: Ciao Ciao come come me v me v (uno spazio singolo) (uno spazio singolo) ? sono tutte sottostringhe di $s Il comando sottostringa($s,i,j) restituisce la sottostringa di lunghezza j che inizia in posizione i Il comando sottostringa($s,i,j) restituisce la sottostringa di lunghezza j che inizia in posizione i Quindi, nellesempio sopra, ($s,0,4) restituirà Ciao Quindi, nellesempio sopra, ($s,0,4) restituirà Ciao Quindi se $t = ($s,0,4) $t sarà la stringa Ciao Quindi se $t = ($s,0,4) $t sarà la stringa Ciao

26 Iterazioni su array Se abbiamo un array di n elementi, possiamo farli scorrere tutti utilizzando un ciclo PEROGNI, come avevamo visto prima Se abbiamo un array di n elementi, possiamo farli scorrere tutti utilizzando un ciclo PEROGNI, come avevamo visto prima Si sfrutta il fatto che gli elementi dellarray sono indicizzati e quindi accessibili tramite il numero che rappresenta la loro posizione allinterno dellarray Si sfrutta il fatto che gli elementi dellarray sono indicizzati e quindi accessibili tramite il numero che rappresenta la loro posizione allinterno dellarray

27 Iterazioni su array $s = Ciao PER OGNI $i IN (0..3) scrivi $s[$i]; FINE PER OGNI Loutput sarà Loutput saràCiao Nota: un valore per una variabile carattere viene solitamente tra apici (), mentre per una stringa è tra virgolette () Nota: un valore per una variabile carattere viene solitamente tra apici (), mentre per una stringa è tra virgolette () $carattere = a $carattere = a $stringa = stringa $stringa = stringa

28 Esercizio Dati Avete come input una sequenza di DNA (di lunghezza qualsiasi) Avete come input una sequenza di DNA (di lunghezza qualsiasi) Leggi permette di leggere la sequenza di input e di memorizzarla in un array di caratteri Leggi permette di leggere la sequenza di input e di memorizzarla in un array di caratteri lunghezza(array) è un comando che permette di stabilire da quanti elementi è costituito un array lunghezza(array) è un comando che permette di stabilire da quanti elementi è costituito un array Scrivete un algoritmo che determini se e dove allinterno della sequenza sono contenuti codoni di start (ATG) Scrivete un algoritmo che determini se e dove allinterno della sequenza sono contenuti codoni di start (ATG) Trattate la sequenza di DNA come se fosse un array di caratteri Trattate la sequenza di DNA come se fosse un array di caratteri

29 Esercizio (esempio) Dato come input Dato come inputACGACAATGACGACGT Loutput sarà Loutput sarà Codone di start in posizione: 7 Dato come input Dato come inputATGACATTATGCAT Loutput sarà Loutput sarà Codone di start in posizione: 1 Codone di start in posizione: 9 (notate che mentre in informatica si conta a partire da zero, in biologia una sequenza è numerata a partire da uno!)

30 Esercizio (complicato!) Riuscite a scrivere in quale frame di lettura si trova ciascun codone di start trovato? Riuscite a scrivere in quale frame di lettura si trova ciascun codone di start trovato? Riuscite anche a trovare se una sequenza contiene codoni di stop (qualsiasi tra TAA, TGA o TAG)? Riuscite anche a trovare se una sequenza contiene codoni di stop (qualsiasi tra TAA, TGA o TAG)? Riuscite a fare lavorare il vostro script anche sul filamento inverso? Riuscite a fare lavorare il vostro script anche sul filamento inverso? Riuscite a stabilire se, dato un codone di start ATG, esiste a valle un codone di stop in frame? Riuscite a stabilire se, dato un codone di start ATG, esiste a valle un codone di stop in frame?


Scaricare ppt "Biologia Computazionale - Algoritmi. Programmi ed algoritmi Quando si vuole risolvere un problema utilizzando un computer è necessario prima disegnare."

Presentazioni simili


Annunci Google