IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Conversion chaine de caractère => entier (ordre des caractères primordial car ADN)


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Par défaut Conversion chaine de caractère => entier (ordre des caractères primordial car ADN)
    Bonjour,

    Je suis en train de créer une base de données MySQL avec une table contenant des séquences d'ADN devant être uniques.

    Les 2 écueils sont les suivants :

    - un index unique doit contenir la longueur du segment de la chaine à comparer, or la longueur est variable et la comparaison doit se faire sur la totalité de la chaine

    - une indexation sur des chaines aussi longues (>= 500 caractères) va être lourde pour la base.

    Je cherche donc un algo capable de convertir une chaine de caractère en entier, sachant que la chaine est composée de 4 caractères (A, T, G et C) et que leur ordre est primordial (ATGC et AGTC ne doit pas être pondéré de la même manière).

    Connaîtriez-vous un algo capable de faire ceci (soit directement utilisable (je développe en Perl) soit assez bien décrit pour être implémenté par quelqu'un qui n'a jamais fait d'algo (moi )) ?

    En vous remerciant,

    C. Tobini

  2. #2
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par ctobini Voir le message
    Je cherche donc un algo capable de convertir une chaine de caractère en entier, sachant que la chaine est composée de 4 caractères (A, T, G et C) et que leur ordre est primordial (ATGC et AGTC ne doit pas être pondéré de la même manière).
    Une façon simple est de constater que tu n'as que 4 caractères, qu'il peuvent donc être stockés sur 2 bits (00, 01, 10 et 11), et que donc tu peux mettre 4 caractères par octets., ce qui divise donc par 4 la taille de ta chaine.

    Ensuite, une méthode un peu moins simple consiste à compresser ta chaine. Typiquement, je pense qu'un petit Burrows-Wheeler (suivi d'une compression arithmétique par exemple) a des chances de bien arranger une chaine génétique, mais je n'en suis pas sûr, à tester.

    Bon après, une compression, ça ne marche que si tu fais une recherche précise sur la chaine, tu ne pourras pas faire des recherches de sous chaîne facilement.

    Have fun

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu peux aussi faire :

    ici caractère = indice dans tableau [A T G C] : A = 0 T = 1 G = 2 C = 3 ..

    entier = 1er caractère + (10+2ième*10) + (100+3ième *100) + (1000 + 4ième*1000)

  4. #4
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    tu peux aussi faire :

    ici caractère = indice dans tableau [A T G C] : A = 0 T = 1 G = 2 C = 3 ..

    entier = 1er caractère + (10+2ième*10) + (100+3ième *100) + (1000 + 4ième*1000)
    C'est quand même franchement gâcher d'utiliser 13 bits au lieu de 8 ! Je me permet quand même de rappeler que l'écriture décimal n'a que peu de signification quand on fait de l'informatique.

    entier court = 1 er caratère<<6 + 2eme << 4 + 3 eme << 2 + 4 eme

    me semble plus judicieux (avec << n signifiant "décalé de n bits vers la droite)

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par alex_pi Voir le message
    C'est quand même franchement gâcher d'utiliser 13 bits au lieu de 8 ! Je me permet quand même de rappeler que l'écriture décimal n'a que peu de signification quand on fait de l'informatique.

    entier court = 1 er caratère<<6 + 2eme << 4 + 3 eme << 2 + 4 eme

    me semble plus judicieux (avec << n signifiant "décalé de n bits vers la droite)
    Bah :

    1) il demande un entier.... On a bien 32 bits ces jours-ci, non ???

    2) pour moi, non informaticien de formation, désolé mais je préfère éviter la notation << ainsi que le concept associé... L'algorithme me semble plus clair (je répète, je ne fais et n'ai fait que des programmes scientifiques, destinés à être modifiés par des scientifiques ou des informaticiens, et je n'ai jamais eu de cours d'info) avec la formulation "mathématique")...

    JE NE VEUX PAS CONNAITRE LA NOTION DE BITS... ni de compter en binaire, en hexa, ou en octal. Mon monde est en décimal, je compte en décimal...

    [EDIT]

    PS: je te souhaite bien du plaisir à déboguer des gros programmes faits par d'autres que toi avec des opérations complexes de shifts, et une contrainte de temps pour que ça marche...

    [/EDIT]

  6. #6
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    JE NE VEUX PAS CONNAITRE LA NOTION DE BITS... ni de compter en binaire, en hexa, ou en octal. Mon monde est en décimal, je compte en décimal...
    [/EDIT]
    Donc à la question "comment je fais pour que ça prenne moins de place" vous répondez "je ne sais pas comment c'est stocké, mais je vais quand même répondre". C'est pas mal...

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/01/2013, 11h10
  2. Conversion chaine de caractere en entier
    Par Adevelop dans le forum Fortran
    Réponses: 1
    Dernier message: 27/10/2010, 22h11
  3. Afficher des caractères à un emplacement suivant des coordonnées
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 02/12/2009, 19h31
  4. conversion d'une chaine de caractére en entier
    Par moooona dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 30/05/2008, 09h41
  5. Réponses: 2
    Dernier message: 24/03/2008, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo