Je dois implanter des fonctions SQL en Python et je dois faire Distinct sauf que j'ai une complexité assez dégueulasse 
En effet, on modélise les tables par des listes d'enregistrement qui sont eux même des listes. Le nombre d'attribut de chaque enregistrement est appelé arité k et la taille de la table (nombre d'enregistrement) est n. On ne peut pas utiliser l'opérateur d'égalité entre listes de Python (seulement attribut par atribut).
J'ai donc fait une fonction qui vérifie si oui ou non deux listes (enregistrements) sont égales et sa complexité est en O(k) (vu qu'il faut comparé les k attributs des deux enregistrements et voir s'ils sont égaux)
Ensuite j'ai fait une fonction qui, à partir d'une liste vide "résultat", va vérifier un à un chaque élément de ma table et s'il ne trouve aucun doublon déjà présent dans "résultat" va l'ajouter dedans...
Sauf que du coup j'ai une complexité en O(k*n^3) si j'ai bien compris. Vu que j'ai une boucle for qui itère n fois sur chaque enregistrement de ma table, puis ensuite j'ai une 2e boucle for DANS LA 1ERE qui itère sur "résultat" dont la taille varie entre chaque tour de boucle et au pire elle augmente de 1 à chaque fois s'il n'y a jamais de doublon et donc il y aura au maximum 1+2+3...+n itération de cette 2e boucle soit O(n^2).Ce qui fait O(n^3) tours de boucles au total et dans chaque tour de boucle on fait des opérations élémentaires donc O(1) et on appelle aussi ma fonction qui vérifie s'il y a un doublon qui a une complexité en O(k) donc j'ai une complexité en O(k*n^3)
...
Vu que c'est sans doute pas clair voilà le code :
Du coup j'aimerais améliorer mon code voire totalement le changer s'il existe une autre "facon" plus élégante à laquelle je n'avais pas pensé.., et au moins être convaincu qu'il fonctionne. J'ai fait quelques essais ça à l'air de marcher en tout cas.
Message édité le 24 juillet 2018 à 16:43:53 par [iamthedoctor]