Bioinformàtica - 2on trimestre curs 2006/2007 - UPFAlfabets, paraules i llenguatges.
Introducció als algorismes
Sovint podem representar característiques biològiques funcionals o estructurals mitjançant el que es coneix com a patrons. Podeu trobar una molt bona descripció de la utilització dels patrons per l'anàlisi de seqüències biològiques en les següents transparencies fetes a la Universitat de Skövde a Suecia.
La construcció de patrons es pot fer mitjançant el que es coneix com
expressions regulars que es un formalisme matemàtic del qual els tres
conceptes principals que heu d'entendre són:
De l'introducció als algorismes els conceptes més importants que heu
d'entendre són:
alfabet: conjunt finit d'elements no buit
paraula: seqüència finita de símbols
d'un alfabet, per exemple:
paraula buida: paraula que no té cap símbol,
la denotarem amb la lletra grega .
concatenació de paraules: donades dues paraules
i
,
denotarà la concatenació de
i
que correspon a
longitut d'una paraula: nombre de símbols
revessat d'una paraula: invertim l'ordre dels símbols
palíndrom: es una paraula tal que
.
potència d'una paraula:
per exemple per una paraula ,
subparaula: és subparaula de
si
llenguatge: conjunt de paraules sobre un alfabet, com ara
concatenació de llenguatges: donat dos llenguatges
la seva concatenació és
potència d'un llenguatge:
,
clausura positiva d'un llenguatge:
estrella de Kleene d'un llenguatge:
llenguatge universal: el denotarem per i
correspon al conjunt de totes les paraules que es poden formar a partir
d'un alfabet
, es a dir:
Un reconeixedor de llenguatges és un dispositiu que ens diu si una
paraula donada
en la representació gràfica anterior, el conjunt d'estats és
s'anomena expressió regular sobre
les expressions regulars s'utilitzen a la biologia per al reconeixement de
patrons de consens.
acció: és un aconteixement que té lloc en un
periode de temps finit i produeix un resultat ben definit i previst.
constants: són valors explícits que no varien
en el curs d'execució de l'algorisme. També es coneixen com a
literals. Per exemple:
el conjunt d'operadors aritmètics en el llenguatge
Perl és el següent:
les expressions regulars són un tipus (no aritmètic) d'expressió.
quin valor imprimirà l'algorisme anterior ?
què imprimirà l'algorisme anterior, ''parell'' o ''senar'' ?
què fa l'algorisme anterior ?
vector: és un tipus de variable que pot emmagatzemar
més d'un valor i que permet l'accés indexat dels seus valors. També
es coneix sovint com a taula o array. Per exemple:
emmagatzema a un vector que es diu ''v'' els valors de l'u al cinc, i la
darrera instrucció imprimeix el primer valor del vector, es a dir un
1. Teniu en compte que els valors d'un vector van indexats des de la
posició 0 fins a la n-1, per un vector amb n valors.
al programa anterior fem anar una composició alternativa amb una
condició formada per una sola comparació alfanumèrica
($v[$i] eq 'T'). Si volguéssim contar el nombre de
dinucleòtids TT necessitariem construir una expressió
lògica formada per dues comparacions i un operador lògic de
conjunció. Els operadors lògics en Perl són:
on cond, cond1 i cond2 fan referencia a condicions
com ara:
el programa que ens contaria els dinucleòtids TT podria ser aquest:
.
llavors
.
Reconeixedors de llenguatges
pertany, o no a un determinat llenguatge
.
exemples de reconeixedors de llenguatges són:
un autòmat finit determinista (AFD/DFA) és un vector
de 5 elements:
és un conjunt d'estats.
és un alfabet de símbols.
és una funció de transició
que donat un estat i un símbol ens retorna un nou estat.
estat inicial.
estat final.
anomenem una configuració de l'autòmat al parell
on
es un estat i
és una paraula.
es diu que una paraula es acceptada, o reconeguda, per
si
a partir de la configuració
arribem a la configuració
.
els AFD's reconeixen els anomenats llenguatges regulars. Per
exmple, construïm un AFD que reconegui el llenguatge
regular format per les paraules sobre l'alfabet
que
tenen una única
. Necessitem 3 estats
on l'estat
inicial
i l'estat final
. La funció de transició
seria la següent:
a
b
0
0
1
1
1
2
2
2
2
una forma més intuitiva de representar l'AFD es mitjançant un
graf com el següent:
is els representem dins un cercle. Les fletxes entre els
cercles representen les transicions entre estats. Cada fletxa te un o
més símbols associats que corresponen als símbols que porten
a la transició d'estat corresponent. D'aquesta forma podem representar
gràficament la funció de transició
. L'estat inicial està
indicat amb una fletxa que l'apunta i que no surt de cap altre estat, en
aquest cas doncs
. L'estat final es representa amb un doble cercle,
en aquest cas doncs
.
per tal de veure si la paraula seria reconeguda per l'AFD
anterior començarem per la configuració inicial
, i
hem de veure si arribem a la configuració final
, de la
següent forma:
per lo tant, la paraula és reconeguda per l'AFD. Ara fem
el mateix per la paraula
:
per lo tant, la paraula no és reconeguda per l'AFD.
Expressions Regulars
a tota expressió que satisfà
la definició recursiva següent:
són expressions regulars.
és una expressió regular,
.
i
són expressions regulars, aleshores
i
són expressions regulars.
és una expressió regular, aleshores
es una expressió
regular.
llenguatge associat a una expressió regular: és el
llenguatge definit com
.
exemple:
, llavors
són expressions regulars.
quin és el llenguatge associat a l'expressió regular ?
quin és el llenguatge associat a l'expressió regular ?
el llenguatge associat a una expressió regular és un llenguatge
regular i per tant el podem reconeixer amb un AFD.
Introducció als algorismes
Noció d'Algorisme
el fet de que una acció duri un temps finit vol dir que es pot trobar
l'instant del temps en què comença i l'instant del temps en què
acaba.
informació: per tal de poder entendre el resultat
de l'algorisme, és necessari que durant el temps entre l'instant en
què comença l'algorisme i l'instant en què acaba, poguéssim
observar o obtenir informació sobre el que està passant.
estat: el conjunt d'informació observat en un
instant de temps donat (entre el principi i el final) s'anomena ''estat''.
algorisme: un algorisme és una seqüència
d'accions que ens porta d'un estat inicial a un estat final en el qual
obtenim el resultat.
la construcció d'un algorisme consisteix en descobrir quines accions elementals cal
organitzar en el temps i, també, consisteix en
escollir la forma d'organitzar-les
per tal d'obtenir el resultat.
això requereix:
un programa és la implementació d'un algorisme en
un llenguatge de programació determinat (per exemple el Perl).
Estructures algorísmiques bàsiques
1, 2, 10, 3.1416, ''hola''
variables: una variable és un nom associat a un
espai a la memòria de l'ordinador on s'emmagatzema una constant o be
una estructura de dades.
considerarem dues classes de variables: les variables singulars
i les variables plurals.
les variables que anomenarem singulars seran aquelles que estan
associades a un únic valor, mentre que les variables que anomenarem
plurals seran aquelles que estan associades a dos o mes valors.
ens podem referir a una variable escrivint simplement el seu nom, com ara
x, v o i. No obstant, sovint utilitzarem la notació del llenguatge Perl
que distingeix explícitament el caràcter singular o plural d'una variable,
de la següent forma:
direm que a una variable li assignem un valor quan
especifiquem quin valor volem que prengui la variable. Exemples
d'assignacions són:
$a = 2
$a = 2 + 1
$a = $a + 1
expressions: anomenarem expressió a l'especificació
sintàcticament correcta d'una o més operacions sobre un conjunt de
variables, constants i funcions. Exemples d'expressions són:
1 + 1
$a + 2
3 * log($a)
($a + $b) * 2
Operador
Exemple
Resultat
Suma
$a + $b
suma de a i b
Resta
$a - $b
resta de a menys b
Multiplicació
$a * $b
producte de a i b
Divisió (quocient)
$a / $b
divisió de a per b
Divisió (residu, mòdul)
$a % $b
residu de dividir a per b
la composició seqüencial:
$a = 2;
$b = $a;
$b = $b + $a * 4;
print $b;
operadors de comparació:
Comparació
Numèrica
Alfabètica
Igual
==
eq
No igual
!=
ne
Més petit que
<
lt
Més gran que
>
gt
Més petit o igual que
<=
le
Més gran o igual que
>=
ge
la composició alternativa (o condicional):
$a = 4;
$b = 7;
$c = (a * b) + 1;
if ($a % 2 == 0) {
print "parell\n";
}
else {
print "senar\n";
}
la composició iterativa:
$i = 0;
$s = 0;
while ($i < 10) {
$i = $i + 1;
$s = $s + $i;
}
print $s;
Disseny d'algorismes iteratius
@v = (1,2,3,4,5);
print $v[0];
els algorismes iteratius consisteixen principalment d'un esquema
algorísmic en el que una o més accions poden executar-se
repetidament sense have d'especificar-les mes d'un cop. Per exemple,
utilitzarem un algorisme iteratiu per sumar els valors d'un vector:
@v = (1,2,3,4,5);
$i = 0;
$s = 0;
while ($i < 5) {
$s = $s + $v[$i];
$i = $i + 1;
}
print $s;
suposem que al vector ''v'' tenim una seqüència d'ADN i volem
contar quants nucleòtids T hi ha en aquesta seqüència.
Això es pot resoldre de la següent forma:
@v=('A','T','T','G','C','C','T','A');
$i=0;
$n=0;
while ($i < 8) {
if ($v[$i] eq 'T') {
$n = $n + 1;
}
$i = $i + 1;
}
print "hi han ",$n," nucleotids T\n";
Operador
Significat
cond1 && cond2
conjunció cond1 i cond2
cond1 || cond2
disjunció cond1 o cond2
!cond
negació no cond
$a == 2
$v[$i] eq 'b'
$x != 3.5
$j >= 10
$v[0] ne ' '
etc..
@v=('A','T','T','G','C','C','T','A');
$i=1;
$n=0;
while ($i < 8) {
if ($v[$i] eq 'T' && $v[$i-1] eq 'T') {
$n = $n + 1;
}
$i = $i + 1;
}
print "hi han ",$n," dinucleotids TT\n";