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 :

Calcul de la complexité d'un algorithme


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut Calcul de la complexité d'un algorithme
    Bonsoir

    J'essaye d’étudier la complexite de cet algorithme cité en dessous:
    Avec: dim(A)=m*n, et dim(Z(i))=n*1, dim(Q)=m*1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i=1 to n 
    F(i)=A*Z(i)
    end
     
    for i=1 to n 
    ww(i) = (Q'*F(i))
    end
     
    for i=1 to 50
    F(i)=A*Z(1)+i
    end
    Je n'ai aucune base dans l'algorithmique, si qql peut m'aider a faire le calcul de la complexite temporelle O(...).
    Merci d'avance.
    Cordialement

  2. #2
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Bonjour a tous

    L'algorithme est peut être un peu complexe. Juste pour éclaircir c'est quoi dim, c'est tout simplement la dimension.
    Merci
    Cordialement

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    F(i)=A*Z(i), avec dim(A)=m*n, et dim(Z(i))=n.
    Tu multiplies deux tableaux de dimensions différentes ? ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Re
    Oui une matrice de dimension m*n et l'autre n*1, résultat obtenu: m*1.

    C'est juste non.

    Merci

  5. #5
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    c'est a dire le vecteur F(i) sera de dimension m*1.

  6. #6
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Bonsoir

    Dites moi juste est ce qu'il n'est pas compréhensible afin que je puisse l’éclaircir encore, ou s'il n' y a pas une solution pour avoir la complexite de algorithme.

    Merci

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Par défaut
    Citation Envoyé par abidineb Voir le message
    Bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i=1 to n 
    F(i)=A*Z(i)
    end
     
    for i=1 to n 
    ww(i) = (Q'*F(i))
    end
     
    for i=1 to 50
    F(i)=A*Z(1)+i
    end
    l2 : O(m*n) (n multiplications + n additions pour chacune des m lignes)

    l1-3 : O(m*n*n) (n * complexité de l2)

    l6 : O(m) (m multiplications + m additions)

    l5-7 : O(n*m) (n * complexité de l6)

    l10 : O(m*n) (complexité de l2)

    l9-11 : 50 * O(m*n) = O(m*n) (multiplication par une constante ...)

    au total : O(m*n*n) (en fait la complexité de l1-l3, qui est la plus grande de tout l'algo)

    Voila voila

    Après en l10 ça sert à rien de calculer 50 fois A*Z(1). A moins qu'il ne s'agisse d'une faute et que tu voulais écrire A*Z(i). (Ce qui ne change pas la complexité de l'algo).

  8. #8
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Salut
    Merci beaucoup pour votre réponse tout a fait logique donc c'est O(m*n*n), donc dans le calcul d'une complexite algorithmique, faut négliger les plus faibles???? est ce que c'est juste???????????

  9. #9
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Par exemple si on ajoute cette partie a notre code après la ligne11:

    for i=1 to n
    ww(i) = (Q'*F(i))
    end

    Donc la complexite reste inchangée??

    Est ce que c'est juste??

  10. #10
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Je pose juste ces questions pour clore cette discussion, parce que je n'ai pas saisi comment peut on négliger les autres complexités devant O(mnn) sans connaitre les valeurs de n et m, je vais les fournir:
    n=16;
    m=50000

    Merci encore une fois.

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par abidineb Voir le message
    Salut
    Merci beaucoup pour votre réponse tout a fait logique donc c'est O(m*n*n), donc dans le calcul d'une complexite algorithmique, faut négliger les plus faibles???? est ce que c'est juste???????????
    Uniquement en cas de complexité asymptotique, c'est à dire la notation O(...).

    Cette complexité permet d'estimer le comportement asymptotique de l'algorithme (en terme de nombre d'opérations) en fonction de la TAILLE des données en entrée.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Bonsoir
    Je commence a bien cerner les choses. merci
    Donc c'est uniquement en cas de complexité asymptotique.

    Donc est ce que c'est juste de mettre temps=-m*n*n
    ( =- je veut dire approximativement) sachant que temps est en seconde et m, n sont des constantes.????????? donc pas les mêmes unités????

    C'est vous me répondez a cette question, j'aurai saisi tout.
    Merci encore une fois.
    Cordialement

  13. #13
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par abidineb Voir le message
    Bonsoir
    Je commence a bien cerner les choses. merci
    Donc c'est uniquement en cas de complexité asymptotique.

    Donc est ce que c'est juste de mettre temps=-m*n*n
    ( =- je veut dire approximativement) sachant que temps est en seconde et m, n sont des constantes.????????? donc pas les mêmes unités????

    C'est vous me répondez a cette question, j'aurai saisi tout.
    Merci encore une fois.
    Cordialement
    Pour les algorithmes, on parle habituellement en terme de "nombre d'opérations" et pas en "seconde". En effet, le temps en seconde dépend de l'implémentation (langage, ...) et du matériel (cpu, ...).

    Ceci mis à part, tu peux dire au choix que :
    - cet algorithme nécessite d'exécuter environ m*n² opérations
    - cet algorithme a une complexité de O(m*n²)


    NB: dans le 2ème cas, ce n'est pas du "environ" mais du "exactement".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  14. #14
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Bonjour
    Vous dites 2eme cas, c'est a dire Temps=O(m*n*n), cette écriture donc est tout a fait juste??????????

    Cordialement

  15. #15
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par abidineb Voir le message
    Bonjour
    Vous dites 2eme cas, c'est a dire Temps=O(m*n*n), cette écriture donc est tout a fait juste??????????

    Cordialement
    Hum, plus ou moins.

    Le signe "=" n'a de signification mathématique que si on parle de fonctions :

    Temps(m,n) = O(m*n*n)

    Cette notation signifie que la fonction "Temps(m,n)" se comporte asymptotiquement comme la fonction "m*n²".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  16. #16
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Merci pour vos réponses, je continue a travailler sur cette notion necessaire.
    Cordialement

  17. #17
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    Les algorithmes dont la complexité et la plus difficile à calculer sont ceux présentant des appels récursifs. Les autres sont normalement facile à calculer si l'on maîtrise correctement la big O notation : http://en.wikipedia.org/wiki/Big_O_notation

    Pour mieux comprendre la complexite des algorithmes récursifs, je conseille de lire les chapitres 4 et 5 (si mes souvenirs sont bons) intitulé "Recurrences" et "Probabilistic Analysis and Randomized Analysis" du livre de référence http://algo.developpez.com/livres/#L2100039229

    EDIT : petite précision, j'ai lu très rapidement le thread mais il faut bien distinguer complexité spatiale (mémoire requise) et complexité temporelle (nombre d'opérations). D'ailleurs il faut souvent trouver un compromis entre les deux -> space-time tradeoff (http://en.wikipedia.org/wiki/Space-time_tradeoff).

  18. #18
    Membre éclairé Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Par défaut
    Merci beaucoup, je vais lire ça. j'en ai vraiment besoin.
    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algorithme de calcul de la complexité d'un mot de passe
    Par chris_wafer dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 22/05/2015, 14h57
  2. Calculer la complexité d'un algorithme
    Par soussou80 dans le forum Algorithmes et structures de données
    Réponses: 34
    Dernier message: 02/11/2014, 19h53
  3. calcul de la complexité d'un algorithme de Djikstra
    Par asmaaya10 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 12/04/2010, 16h05
  4. [Complexité d'un algorithme] Triangle de Sierpinski
    Par Opérateur dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 18/12/2006, 15h25
  5. complexité d'un algorithme par un...algorithme??
    Par afrikha dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 02/11/2005, 00h59

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