• Aucun résultat trouvé

Distances entre motsVous devez implémenter en Java les distances et similarités vues en TD :

N/A
N/A
Protected

Academic year: 2022

Partager "Distances entre motsVous devez implémenter en Java les distances et similarités vues en TD :"

Copied!
3
0
0

Texte intégral

(1)

Module Info31 – L2 Sciences & Techniques Université de Bourgogne Dominique Michelucci

TP6 – distances entre mots

Distances entre mots

Vous devez implémenter en Java les distances et similarités vues en TD :

distance de Hamming entre deux mots de même longueur,

distance de Levenshtein entre deux mots de longueurs quelconques,

similarité de Jaro entre deux mots de longueurs quelconques,

alignement de séquences génomiques par l'algorithme de Needleman et Wunsh et modification par l'algorithme de Smith et Waterman

Vous disposez :

des algorithmes de Needleman-Wunsh et de Smith-Waterman en annexe A de ce document ;

des méthodes sur les chaînes de caractères en Java, à l'adresse :

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html dont

charAt(n) qui récupère le ne caractère d'une chaîne (numérotation à partir de 0)

length() qui renvoie la longeur de la chaîne

du résultat de plusieurs alignements dans le fichier needlemanWunsh.res que vous devez afficher en utilisant l'instruction Linux cat pour voir l'affichage en couleur.

ANNEXE A - algorithmes de Needleman-Wunsh et de Smith-Waterman

Vous devez ajouter à la classe pourMots une méthode needlemanWunsh ayant comme paramètres les deux séquences à aligner (sous forme de variables String) : motLig et motCol.

Modifiez votre méthode main() pour exécuter la méthode needlemanWunsh sur les deux séquences passées en paramètre à votre programme.

L'algorithme détaillé est donné ci-dessous.

NeedlemanWunsh ( motLig, motCol )

// les deux paramètres sont les sequences dont il faut extraire la séquence commune

// le résultat est la matrice de score

//--- initialisations

Sw ← 0 // pénalité de suppression

// pour les séquences

ajouter un espace en début de motLig ajouter un espace en début de motCol

lgLig ← longueur de motLig-1 // on ne compte pas l'espace initial

lgCol ← longueur de motCol-1

// caractères de motLig entre les indices 1 et lgLig

// caractères de motCol entre les indices 1 et lgLig

// matrice des scores SC

// tout à 0 sur ligne 0 et colonne à 0

pour lig entre les indices 0 et lgLig faire SC[lig][0] ← 0

TP1-1-

(2)

Module Info31 – L2 Sciences & Techniques Université de Bourgogne Dominique Michelucci

fpour

pour col entre les indices 0 et lgCol faire SC[0][col] ← 0

fpour

// à partir de ligne 1 et colonne 1

// on met tout à 0 sauf pour les caractères en "matching"(initialisation à 1 des cases jaunes)

pour lig entre les indices 1 et lgLig

faire pour col entre les indices 1 et lgCol

faire si lige caractère de motLig == cole caractère de motCol alors SC[lig][col] ← 1

sinon SC[lig][col] ← 0 fsi

fpour fpour

//--- calcul ligne par ligne de la matrice des scores SC

pour lig entre les indices 1 et lgLig

faire pour col entre les indices 1 et lgCol

faire // recherche du maxi des trois calculs possibles

max ← SC[lig-1][col-1] // diagonale

si SC[lig][col]==1 alors max++

fsi

si max < SC[lig-1][col] // au dessus

alors max ← SC[lig-1][col]+Sw fsi

si max < SC[lig][col-1] // à gauche

alors max ← SC[lig][col-1]+Sw fsi

SC[lig][col] ← max fpour

fpour résultat SC

Faites une copie de votre méthode needlemanWunsh sous le nom SmithWaterman et modifiez le calcul du maximum :

Pour un exemple détaillé, voir :

http://biit.cs.ut.ee/~vilo/edu/2002-03/Tekstialgoritmid_I/Loengud/Loeng3_Edit_Distance/bcorum_copy/seq_align4.htm

TP1-2-

//--- calcul ligne par ligne de la matrice des scores SC pour lig entre les indices 1 et lgLig

faire pour col entre les indices 1 et lgCol

faire // recherche du maxi des trois calculs possibles max ← SC[lig-1][col-1] // diagonale si SC[lig][col]==1

alors max++

fsi

si max < SC[lig-1][col] // au dessus alors max ← SC[lig-1][col]+Sw fsi

si max < SC[lig][col-1] // à gauche alors max ← SC[lig][col-1]+Sw fsi

SC[lig][col] ← max fpour

fpour

Modifiez cette partie du calcul

(3)

Module Info31 – L2 Sciences & Techniques Université de Bourgogne Dominique Michelucci

ANNEXE B – liste et pile

Vous disposez de programmes d'implémentation des listes et piles dans le répertoire ListePile. Une classe item décrit les éléments à stocker dans la liste ou la pile. Vous travaillez avec des listes d'item ou des piles d'item. Les méthodes disponibles sont :

- sur les listes :

- les opérations standards : lVide, estVide, ajoutTete, tete, queue,

- la concaténation (concat), l'affichage (afficheListe) ainsi que deux méthodes d'initialisation de listes -pour les listes d'entiers uniquement- par des valeurs séquentielles (creerListeSeq) ou par les paramètres du programme(creerListeParam)

- sur les piles :

- les opérations standards : pVide, estVide, empiler, sommet, depiler,

- deux méthodes d'initialisation de piles -pour les piles d'entiers uniquement- par des valeurs séquentielles (creerPileSeq) ou par les paramètres du programme(creerPileParam).

Compilation :

javac item.java javac liste.java javac pile.java

Exécution (les paramètres servent à initialiser une liste ou une pile) : java liste 78 45 12 89 56 23

java pile 78 45 12 89 56 23

Vous trouverez une présentation détaillée des listes en orienté-objet à l'adresse :

http://deptinfo.cnam.fr/Enseignement/CycleA/APA/nfa032/docs/cours-listes.pdf

TP1-3-

Références

Documents relatifs

Écrire une fonction maxmin(L) qui renvoie le maximum, le minimum et les positions du minimum et du maximum des éléments de la liste de flottants L. Indication : on pourra utiliser

Figure 11 – ´ Eclairement sur l’´ecran, dans le cas d’une fente simple, et de deux fentes d’Young de mˆeme largeur que la fente simple.. En abscisse : la position sur

Q1 : Trouver toutes les configurations possibles de 4 points distincts du plan tels que l’ensemble des distances entre deux points quelconques a exactement deux éléments.. Q2 :

Q1 : Trouver toutes les configurations possibles de 4 points distincts du plan tels que l’ensemble des distances entre deux points quelconques a exactement deux éléments.. Q2 :

En consid´erant que la liste la plus simple est la liste vide (not´ee [ ]), qui ne contient aucun ´el´ement, on peut donner une d´efinition r´ecursive aux listes

• Nous avons vu que l'API Java fournit la classe brute ArrayList , que l'on doit en principe paramétrer par une classe d'objets. Cela permet de fixer une fois pour toutes le

2) Le serpent qui se mord la queue.... A l'exécution, faire évaluer comptegene en prenant comme liste argument la fonction comptegene elle même : vous saurez ainsi combien vous

entre individus ou entre variables est conditionné par la nature des observa- tions ; ce choix peut se faire à partir d’un catalogue de distances bien con-.. nu