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 complexité


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut calcul de complexité
    bonjour tout le monde, mon probleme est le calcul de complexité d'un algorithme dans le cas où celle ci est logarithmique (O(log(n))) ou exponentielle. plus exactement je veux savoir s'il ya une manière pour savoir que tel algorithme est de complexité logarithmique ou exponentielle?.

    **est ce que ça se fait de la meme manière que pour la complexité polynomiale ? ou bien il faut analyser l'algorithme autrement? et est qu'il ya parmi les algorithmes de tri ceux dont la complexité est exponentielle?

    merci d'avance

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,


    Citation Envoyé par an1981 Voir le message
    mon probleme est le calcul de complexité d'un algorithme dans le cas où celle ci est logarithmique (O(log(n))) ou exponentielle. plus exactement je veux savoir s'il ya une manière pour savoir que tel algorithme est de complexité logarithmique ou exponentielle?.
    Alors en répondant de manière un peu brute à la question :
    - tu auras du logarithme si à chaque itération de ton algorithme, tu divises ton espace de travail (cf. recherche dichotomique). En revanche, un tri comme le QuickSort a un complexité dans le pire des cas en O(N^2), mais en O(N log N) en moyenne !!!
    De même, dans le tri par tas (HeapSort me semble t-il), à chaque itération tu "entasses" ton tableau et ceci se fait en O(Log N) car tu parcours les branches d'un arbre binaire. Donc ton espace de travail est divisé.
    - pour l'exponentielle, tu l'obtiens lorsque tu dois chercher toutes les combinaisons possibles à chaque itérations. Par exemples, si tu souhaites faire toutes les combinaisons possible des sous ensemble d'un ensemble d'élément (un élément de l'ensemble est présent ou non), tu auras une complexité en O(2^N), avec N le nombre d'éléments dans l'ensemble.


    Citation Envoyé par an1981 Voir le message
    est qu'il ya parmi les algorithmes de tri ceux dont la complexité est exponentielle?
    Curieusement oui, mais c'est tellement invraissemblable de le décrire que peu de personnes en connaisse un.
    Et bien c'est très simple :
    - Enumérer TOUTES les combinaisons possibles de classement de tes éléments O(N^N). (Chaque élément pouvant aller à toutes les places)
    - Pour chaqu'une des combinaisons, vérifier si le tri est bon (si l'élément I est plus petit que l'élement I+1).
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut complexite des algos
    merci pour votre reponse mais je voudrais savoir s'il existe une maniere mathematique pour prouver que la complexite d'un algorithme est logarithmique ou exponentielle.
    merci

  4. #4
    Membre chevronné
    Profil pro
    Directeur Scientifique
    Inscrit en
    Avril 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur Scientifique

    Informations forums :
    Inscription : Avril 2005
    Messages : 419
    Par défaut
    Il n'y a pas une manière type pour obtenir de tels preuves. Pour le log(n), le mieux est de regarder la preuve de l'insertion dans un tas: un arbre équilibré de n noeuds à une profondeur en O(log n). Les complexité en log n provient souvent de cette propriété.

    La recherche dichotomique a aussi une complexité en O(log n). La structure d'arbre n'est pas explicite mais on la retrouve sans difficulté (cf ce que dit Toto13).

    Pour les complexités exponentielles, les raisonnements combinatoires sont souvent la clé (énumération de toutes les permutations, de toutes les partitions...) Là encore, l'arbre est utile: ces énumérations se font souvent à l'aide d'un arbre d'énumération de profondeur n (ou n^2) qui ont ainsi un nombre exponentiels de nœuds.

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    dans le cas du QuickSort, un lourd calcul de proba montre que la complexité est en O(N Log N).
    Donc la réponse à ta question est très certainement oui, mais je ne connais pas la méthode.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    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 an1981 Voir le message
    merci pour votre reponse mais je voudrais savoir s'il existe une maniere mathematique pour prouver que la complexite d'un algorithme est logarithmique ou exponentielle.
    merci
    Oui, bien sur. La complexité est une mesure mathématique à la base.

    On commence par ecrire la fonction de complexité telle qu'elle apparait dans l'algorithme. Généralement Cette fonction dépend à la fois du "rang" (= numero d'iteration / profondeur de recursion) et de la complexité pour les rangs suivants/prédédants. Le but est de ré-ecrire cette fonction pour qu'elle dépende uniquement des donnés de départ (taille, longueur, ...)

    Par exemple, la recherche dichotomique sépare une liste en 2 puis explore l'une des deux parties. Donc pour une liste de taille N, la complexité est de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    C(N) = 1 + C(N/2)
           |     |
           |     Exploration d'une des 2 listes
           |  
         1 operation de separation
    Maintenant, un peu de mathématiques

    C(N) = 1 + C(N/2)

    Changement de variables: N=2^t

    C(2^t) = 1 + C (2^t/2) = 1 + C (2^(t-1))

    Par récursion, on obtient:

    C(2^t) = C(2^(t-1)) +1 = C(2^(t-2)) +1 +1 = ... = C(2^0) + t = Constante + t

    donc l'algo est en O(t).

    Et, par changement de variable inverse:

    O(t) = O(log n / log 2) = O(log n)

    CQFD
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    je crois que tu peux le trouver apr quelques théorème d'encadrements si tu as une relation de récurrence entre le rang n et n-1 mais je ne vois pas comment faire si ton programme est linéaire (et je doute qu'il soit autre chose que polynomial si tel est le cas).

  8. #8
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut complexite des algorithmes
    bjr, pour le cas lineaire moi aussi je crois que c'est polynomial. le probleme est : dans le cas où l'algorithme est exponentiel (ou logarithmique), je ne sais pas !, mais je cois qu'on ne peut pas trouiver l'expression de la complexité explicitement. Et on peut uniquement affirmer qu'il est exponentiel en l'analysant.

    Contrairement au cas polynoimal où on peut trouver l'expression de cette complexité (par exemple C(n) = 3n^2+2n+1).

    moi ce que je veux c'est plutot le premier cas (exponentiel ou logarithmique) car pour le cas polynomial c'est bon je sais le faire.

    merci

Discussions similaires

  1. 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
  2. Calcul de complexité
    Par zizo08 dans le forum MATLAB
    Réponses: 13
    Dernier message: 25/11/2008, 20h43
  3. calcul de complexité fonction mathematique
    Par abdelhamidem dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/05/2008, 13h37
  4. calcul de complexité itératif ou algorithmique
    Par miltone dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 08/04/2008, 18h38
  5. Calcul de complexité
    Par sandytarit dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/11/2007, 18h37

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