+ longue Sequence commune à 2 sequences [Algo] - Algo - Programmation
Marsh Posté le 25-05-2003 à 11:20:06
je regarde l'alog, mais niveau implémentation, y a du boulot!
Marsh Posté le 25-05-2003 à 11:25:51
++Taz a écrit : je regarde l'alog, mais niveau implémentation, y a du boulot! |
je sais. LA c'est l'étape : "ca marche".
ensuite, je pase à l'étape : "çai bô" et "çai rapide"
Marsh Posté le 25-05-2003 à 11:30:51
putain, sur google, y a plein de resultat avec ton algo en m*, mais des fois est evoqué un algo en temps pseudo linéaire
Marsh Posté le 25-05-2003 à 11:44:40
J'ai trouvé une page qui pourrait peut-être t'intéressé :
http://www.crpgl.lu/cortina/Details/LCS.html
Je n'ai pas apercu de calcul complexité, mais ca semble balayer pas mal de type de solutions !
@+
Marsh Posté le 25-05-2003 à 12:23:25
http://www.csse.monash.edu.au/~llo [...] 6.IPL.html
meme algo, à un truc pres, qui donne un bon boost apparemment
Marsh Posté le 25-05-2003 à 13:55:03
++Taz a écrit : http://www.csse.monash.edu.au/~llo [...] 6.IPL.html |
merci bien, je sens que je v passer un bon bout de temps là-dessus le comprendre. De la m^me maniere qu'il a fallut qq heures pour comprendre mon algo qui s'implémente en qq misérables lignes de code
Marsh Posté le 25-05-2003 à 14:48:34
bon la j'ai compris ou était l'astuce, masi j'ai pas encore compris pourquoi effectivement ca marchait
Citation : |
je comprend que la c genial, mais je comprend pas pkoi
par la suite, y'a encore 2-3 optimsation que je dois comprendre, mé c pas facile
Marsh Posté le 25-05-2003 à 14:52:28
ben comme toutes les optimsiations aggressives, c'est cahud...
quand t'auras besoin de conseil d'implémentation, n'hesite pas
Marsh Posté le 25-05-2003 à 15:19:55
bon, la g compris ce qu'il faillait faire, mais je demande que le taré qui a mis au point cette technique soit interné en maison de repos.
sinon, nivo implémentation, je vois pas ce que tu me reproches ? ( sans doute as-tu raison mais je suis aveugle)
Marsh Posté le 25-05-2003 à 15:38:49
y'a juste son point 2.3 ke je capte pas, pour prendre une LCS il suffit de lire la dernière ligne, et pourtant lui il fait une technique super compliquée...
Marsh Posté le 25-05-2003 à 23:50:16
doit y avoir un moyen d'améliorer les choses si les chaines sont pas de meme longueur
Marsh Posté le 26-05-2003 à 00:09:07
pour ce qui est de de trouver une PLSC, il suffit de "lire" une dernieres ligne ou colonne
Marsh Posté le 26-05-2003 à 00:33:34
en tout cas je sais pas si tu as vu, mais avec seulement les 2 dernières lignes, on fait tout le boulot sans problèmes
Marsh Posté le 26-05-2003 à 00:49:27
hey, mais j'ai bien l'impression que l'algo foire dis-donc?
Marsh Posté le 26-05-2003 à 04:47:09
farib a écrit : |
Non, la complexite restera de l'ordre m*n.
Marsh Posté le 26-05-2003 à 08:25:01
++Taz a écrit : hey, mais j'ai bien l'impression que l'algo foire dis-donc? |
lekel ?
Marsh Posté le 26-05-2003 à 08:26:17
++Taz a écrit : en tout cas je sais pas si tu as vu, mais avec seulement les 2 dernières lignes, on fait tout le boulot sans problèmes |
vivi, puis qu'elles indiquent les lettres a prendre dans l'autre chaine pour former la PLSC
Marsh Posté le 26-05-2003 à 12:26:23
++Taz a écrit : ben regarde ton exemple |
bah il est coherent.
Marsh Posté le 26-05-2003 à 12:28:27
abcdefghijkl abbcdfghj
abcdfghj n'est pas dans abcdefghijkl
abcdfghj n'est pas dans abbcdfghj
c'est pas ce que j'appelle etre en "commun"
Marsh Posté le 26-05-2003 à 12:45:19
++Taz a écrit : abcdefghijkl abbcdfghj |
tu ne connais pas le probleme
en fait ce probleme de plsc c'est la plus longue sous chaine obtenue en supprimant si necessaires de elements de la chaine 1 ou 2, c'est pour cela que ca devient interessant, avec ta definition c trivial
( application : diff, en considerant qu'une ligne de code est un symbole )
Marsh Posté le 26-05-2003 à 12:51:27
avec ma definition c'est pas trivial, mais la tienne je la comprends pas, on dirait l'interesction d'ensemble
Marsh Posté le 26-05-2003 à 19:31:02
++Taz a écrit : avec ma definition c'est pas trivial, mais la tienne je la comprends pas, on dirait l'interesction d'ensemble |
avec ta définition ca se fait de maniere quasi-linéraire
moi c'est la plus longue sous chaine commune en supprimant des élements
application : tu veux comparer deux chaines d'adn, une originale et une mutée. la mutée, elle aura des segments insérés, supprimes, ou remplacés. masi grace a l'algo tu retrouve la plsu longue chaien commune.
Marsh Posté le 27-05-2003 à 00:03:32
farib a écrit : |
Et la je pense qu'il n'y a plus de probleme de "definition".
Marsh Posté le 27-05-2003 à 00:36:44
le probleme c'est qu'on l'appelle plsc
Marsh Posté le 27-05-2003 à 00:43:37
Ce qui est qualifie de sous chaine ici est en fait la plus longue chaine commune possible avec gaps:
En reprenant ton exemple:
abbcdfghj |
Marsh Posté le 27-05-2003 à 07:16:11
__avec__ des gaps... la notion de chaine/sequence en prends un coup... mais si ça te satisfait
Marsh Posté le 27-05-2003 à 11:59:09
Sans gaps, on ne s'en sort pas dans les sequences biologiques. Par contre cette maniere de faire n'est absolument pas interressante pour trouver des alignements biologiquement satisfaisants.
Marsh Posté le 25-05-2003 à 11:07:33
pour faire cet algo je procede en construisant un tableau qui donne les longueurs des plus longues sous chaines communes des sous-chaines
, determinees par les indices du tableau, puis en lisant la derniere ligne il est facile de reconstituer la plus longue sous
chaine. Je suis ptet pas super clair mais sans doute ceux qui connaissent cet algorithme me comprendront
$ ./plsc.exe abcdefghijkl abbcdfghj
horizontalement : abbcdfghj
verticalement : abcdefghijkl
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1
0 1 2 2 2 2 2 2 2 2
0 1 2 2 3 3 3 3 3 3
0 1 2 2 3 4 4 4 4 4
0 1 2 2 3 4 4 4 4 4
0 1 2 2 3 4 5 5 5 5
0 1 2 2 3 4 5 6 6 6
0 1 2 2 3 4 5 6 7 7
0 1 2 2 3 4 5 6 7 7
0 1 2 2 3 4 5 6 7 8
0 1 2 2 3 4 5 6 7 8
0 1 2 2 3 4 5 6 7 8
La plus longue sous-chaine est abcdfghj
la question est : c'est une complexité m x n ,c'est pas si mal, mais en memoire ca bouffe bcp. En fait il n'est pas
nécessaire de sauvegarder tout le tableau, donc je peux ne sauvegarder que la derniere colonne remplie a chaque fois, ca fera
une belle optimisation de memoire (m+n au lieu de m*n).
Sinon Y a t-il un autre algo plus effiace que m*n ( nivo complexite, pas memoire)?
mon code, sous license GPL