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 :

le calcul de la 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 éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut le calcul de la complexité
    Bonjour,

    Quelle est la complexité au pire de cas pour le calcul de toutes les combinaisons possibles pour n caractères à partir de taille 2 jusqu'à la taille n ?

    Prenons par exemple 4 caractères:a, b, c et d

    Toutes les combinaisons possibles sont:

    - les combinaisons de taille 2 sont: ab, ac, ad, bc, bd, cd //ici on a 6 combinaisons
    - les combinaisons de taille 3 sont: abc, abd, acd, bcd //ici on a 4 combinaisons
    - les combinaisons de taille 4 sont: abcd //ici on a 1 combinaison



    Merci

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour ce que tu cherches à calculer ressemble a la somme des [ame="http://fr.wikipedia.org/wiki/Coefficient_binomial"]combinaisons de k parmi n[/ame], k variant de 2 à n, et n étant le nombre de caractères.

    N(4) = C(2, 4) + C(3, 4) + C(4, 4)

    On généralise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          i = n
          ____
          \    
    N(n) = \  C(i, n)
           /  
          /___
         i = 2
    Sachant que [cf ici]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    i = n
    ____
    \    
     \  C(i, n)  = 2**n
     /  
    /___
    i = 0
    et que,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C(0, n) = 1 pour tout n et 
    C(1, n) = n pour tout n
    On peut en déduire que
    Vérifions qu'on trouve bien le même résultat : n = 4.
    16 - 4 - 1 = 11. On retombe sur nos pieds.
    Dernière modification par Invité(e) ; 09/04/2010 à 16h47. Motif: ajout référence

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    J'ai trouvé deux résultats sur la complexité de toutes les combinaisons de n éléments:

    - O(n*C(n/2,n))

    - 2 à la puissance n - n - 1 (comme vous dites)

    Est ce que la première est juste ?
    Comment on trouve son calcul ?

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par siempre Voir le message
    - O(n*C(n/2,n))
    [...]
    Est ce que la première est juste ?
    Comment on trouve son calcul ?
    Je ne sais pas, où as tu trouvé ceci ?

    Citation Envoyé par siempre Voir le message
    J'ai trouvé deux résultats sur la complexité de toutes les combinaisons de n éléments:
    [...]
    - 2 à la puissance n - n - 1 (comme vous dites)
    Attention, tout ce que j'ai fait, c'est compter le nombre de combinaisons répondant au problème posé.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    Combien coût le code suivant en fonction de nombre d'opérations (complexité) sachant que ce code permet d'afficher toutes les combinaisons de N attributs ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>
     
    #define N 5
    void afficher(int etat[], char *t[])
    {
      int i;
      for (i = 0; i < N; i++)
        if (etat[i])
          printf("%s ", t[i]);
      puts("");
    }
     
    void partie(int h, int etat[], char *t[])
    {
      enum { ABSENT, PRESENT };
      if (h < 0)
        afficher(etat, t);
      else
        {
          etat[h] = ABSENT;
          partie(h - 1, etat, t);
          etat[h] = PRESENT;
          partie(h - 1, etat, t);
        }
    }
     
    int main(void)
    {
      char *t[N] = { "nom", "prenom", "age", "adresse", "emploi" };
      int etat[N];
      partie(N - 1, etat, t);
      return 0;
    }

  6. #6
    Invité(e)
    Invité(e)
    Par défaut
    On peut l'évaluer à la main.
    J'ai repris ton code, mais j'ai supprimé l'affichage et agrandi le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    25 attributs :
    real    0m0.971s
     
    26 attributs :
    real    0m1.880s
     
    27 attributs :
    real    0m3.538s
     
    28 attributs :
    real    0m7.352s
    On remarque que quand on ajoute un attribut de plus, le temps de traitement double.
    Temps(N+1) = 2 x Temps(N)

    -> Temps(N) de la forme O(N**2)

Discussions similaires

  1. Calcul de la complexité de la corrélation
    Par abidineb dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/09/2012, 00h47
  2. Calcul de la complexité d'un algorithme
    Par abidineb dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 06/07/2011, 20h52
  3. Aide au calcul de la complexité de deux boucles imbriquées
    Par nono_31 dans le forum Mathématiques
    Réponses: 12
    Dernier message: 31/03/2011, 19h05
  4. Logiciel de calcul de la complexité cyclomatique
    Par chris_wafer dans le forum Analyse de code
    Réponses: 3
    Dernier message: 15/06/2010, 16h59
  5. 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

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