Algorithmes de tri (+ mysql?)

Fermé
Nico - 14 avril 2009 à 15:15
 Nico - 15 avril 2009 à 12:12
Bonjour,

J'ai besoin de votre aide afin de choisir l'algorithme de tri que je vais implémenter.

Dans une base de données, je dispose de composés chimiques avec leur formule.
Il se trouve que pour l'affichage de mes composés et pour une recherche rapide, il est très efficace de les classer par nombre d'atomes.
Ainsi, je souhaite trier mes molécules:
-d'abord selon le nombre de carbones
-ensuite par nombre de Cl
-puis par nombre de N
etc...
sachant que le tri selon les Cl s'effectuera après le tri par carbone et ainsi de suite.
On aura ainsi par exemple en ordre:
C
CClN4
CCl2
C2Cl3N2
C2Cl3N4
C2Cl5N5
C3ClN2
C3Cl2N
C4ClN8
C4Cl2
De plus, ce tri est destiné à être effectué sur une liste de 400 composés chimiques qui ne cessera de s'agrandir. Par ailleurs, les molécules ne sont absolument pas triées dans la base de données mais rentrées complètement aléatoirement selon les besoins.

Ainsi, je me demandais quel type de tri serait le plus efficace pour ce type de configuration. J'ai pensé au quick sort ou au tri fusion qui semblent être parmi les plus rapides.

De même, je me demandais si je pouvais me servir directement de MYSQL pour trier mes données.
Puis je par exemple effectuer un "SELECT molecule ORDER BY C, Cl, N" avec plusieurs critères de tri (hiérarchisés) ou éventuellement utiliser des requêtes imbriquées?

Qu'en pensez vous? N'hésitez pas à me demander des précisions.

Merci d'avance pour l'aide que vous pourrez m'apporter.

3 réponses

Bonjour

Si tes molécules sont représentées "éclatées" c'est à dire avec un champ par type d'atome, tu peux effectivement utiliser une clause ORDER BY C,Cl,N.
Si tu as seulement une chaîne par molécule tu peux encore utiliser mysql pour faire le tri à ta place : tu crées une table temporaire avec une colonne par atome. Une passe pour remplir cette table avec tes molécules, puis une requête avec ORDER BY multiple.
1
Je me permets de "upper".
Promis, c'est le dernier.
0
En effet, je pense les présenter dans ma base de manière éclatée car créer une table temporaire (une vue?) et la remplir à chaque requête de ce type peut s'avérer couteux en temps et difficile à gérer.

En fait, j'aimerais faire un trigger lors de l'insertion d'une molécule ou de sa modification qui remplira chaque colonne (C, Cl, N) avec le bon nombre grâce à la formule chimique de la molécule.

Merci en tout cas de ta réponse. J'utiliserai donc un ORDER BY multiple.
0