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

C Discussion :

Recherche Min/Max dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut Recherche Min/Max dans un tableau
    Salut a Tous,

    Voila, Je dois creer une fonction recursive qui permet de rechercher la valeur minimum et maximum dans un tableau, en utilisant une ""methode dichotomique"". J'ai reussi a en creer une sans trop de probleme, mais j'ai l'impression qu'il y a quelquchose qui cloche(j'ai surtout l'impression qu'il fait beacoup trop d'operations) dans mon code :s .


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #define N 80000
    void minmaxrecursif(int tab[],int indiceMin, int indiceMax, int *valeurMin, int *valeurMax)
    {
        int milieu=(indiceMax+indiceMin)/2;
     
        if ( indiceMax-indiceMin==1 )
        {
     
            if (*valeurMin > tab[indiceMax])
                *valeurMin=tab[indiceMax];
            else if ( *valeurMax < tab[indiceMax])
                *valeurMax=tab[indiceMax];
            /*printf("tab[min]=%d\ntab[max]=%d",tab[indiceMin],tab[indiceMax]);*/
        }
     
     
        else
        {
            minmaxrecursif( tab,indiceMin,milieu,valeurMin,valeurMax);
            minmaxrecursif( tab,milieu,indiceMax,valeurMin,valeurMax);
        }
    }
     
     
    int main(void)
    {
        int tab[N]={0};
        int min=tab[0], max=tab[0];
        int i;
        for (i=0;i<N;i++)
        {
            tab[i]=i;
        }
     
        minmaxrecursif(tab,0,N-1,&min,&max);
        /*minmax(tab,N,&min,&max);*/
        printf("min=%d max=%d \n",min,max);
        return 0;
     
    }

    Si vous avez des idees pour optimiser ca je suis preneur (pas forcement des bouts de code ou des correction j'aimerai bien y arriver de moi meme mais pour l'instant j'ai pas de pistes :s )

    Merci d'avances pour vos reponses.

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Par défaut
    Si ton tableau est trié c'est le premier élément et le dernier.

    S'il n'est pas trié, la dichotomie est inutile car if faut vérifier toutes les cases du tableau. sorry!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Par défaut
    comme indiqué dans la réponse précédente, tu as le choix entre :
    - parcourir tout ton tableau à la recherche du min et du max
    - utiliser la fonction qsort() qui permet de trier ton tableau à l'aide de la methode "quick sort", adaptée pour les gros tableaux. elle est un peu compliquée à mettre en oeuvre mais efficace.

  4. #4
    Membre averti
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Par défaut
    Je sais bien que la dichotomie marche que quand le tableau est trie et c'est pour ca que j'ai mis des guillemets, .
    Ce qui m'a ete demande c'est de "couper le tableau en 2" puis de resoudre le probleme dans chacune des parties.
    (je sais bien que ici cette methode, et la recursivite ne sont pas beacoup plus utile qu'un algo naif mais c'est ce qui a ete demande )

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    mais j'ai l'impression qu'il y a quelquchose qui cloche(j'ai surtout l'impression qu'il fait beacoup trop d'operations) dans mon code :s .
    Qu'est-ce qui semble clocher ?
    Je pense que ton code répond à la question posée sauf pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if ( indiceMax-indiceMin==1 )
    que je verrai plutôt comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        if ( indiceMax==indiceMin)
    sinon, c'est incorrect pour un tableau de 1 élément.
    autre remarque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            minmaxrecursif( tab,indiceMin,milieu,valeurMin,valeurMax);
            minmaxrecursif( tab,milieu,indiceMax,valeurMin,valeurMax);
    analyse deux fois l'élément d'indice milieu. On devrait avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            minmaxrecursif( tab,indiceMin,milieu,valeurMin,valeurMax);
            minmaxrecursif( tab,milieu+1,indiceMax,valeurMin,valeurMax);
    mais on le paye alors en devant tester dans la fonction que indicemin <= indicemax
    Sinon, je ne vois pas comment améliorer les performances qui sont directement liées à la nature récursive du code.

Discussions similaires

  1. Recherche des indices min et max dans un tableau 2D
    Par Bysbobo dans le forum LabVIEW
    Réponses: 3
    Dernier message: 03/05/2013, 08h36
  2. recherche valeur max dans un tableau
    Par www.rubis dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2011, 17h43
  3. Rechercher une valeur dans un tableau
    Par pafi76 dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2006, 14h23
  4. [C++.NET] Valeurs min/max dans une TextBox
    Par raboin dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 06/04/2006, 17h15
  5. Faire une recherche de texte dans un tableau de variable
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/02/2006, 13h12

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