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 :

Nombre des entiers redondants dans un tableau et leurs indices


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Nombre des entiers redondants dans un tableau et leurs indices
    Bonsoir,
    je cherche à écrire un algorithme qui permet de parcourir un tableau pour calculer le nombre des entiers redondants ainsi que leurs indices dans le tableau.
    Exemple: soit le tableau en entrée A le suivant A=[1,8,3,8,12,8,1]. La sortie de ce programme est donc deux tableaux le premier B=[2,3] et C=[0,6,1,3,5].
    D'avance merci.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Bonsoir

    comment ferais-tu pour écrire cet algo ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    j'ai pensé d'abord à trier le tableau A donc on aura A_tri=[1,1,3,8,8,8,12]
    ensuite on déclare un autre tableau Treated initialisé à zeros de meme taille que A pour marquer les cases qui sont déjà traitées. et voici l'algorithme que je propose:
    K=1
    For i = 0 à taille de A_tri
    For j=0 à taille de A_tri
    if A_tri(i)==A_tri(j) && i<>j && Treated(i)<>1
    B(k)=B(k)+1
    Treated(j)==1
    if A_tri(i)<>A_tri(i+1)
    k=k+1
    end if
    end if
    end for
    end for

    De cette facon je peux pas récupérer le tableau d'indices et je voulais pas vraiment passer par l’étape de tri. merci

  4. #4
    Membre confirmé
    Avatar de Deuzz
    Homme Profil pro
    curieux
    Inscrit en
    Septembre 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : curieux
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 148
    Points : 521
    Points
    521
    Par défaut
    bonsoir

    Voici une proposition
    • Lecture du tableau
      • On recherche le plus grand entier (et on place la valeur dans max)
      • et les éventuelles occurrences de 0 (le cas échéant on indique le nombre de fois dans n et les indices dans un tableau P()
    • Si n est supérieur à 1 on note la valeur dans B() et on transfert les différents indices de P() vers C().
    • On répète le procédé jusqu'à max


    Ce qui donnerait à peu près un truc comme ça :


    J'y connais rien à la syntaxe alors il y a surement quelques trucs à modifier.
    b et c me servent à savoir à quel indice je suis rendu dans le remplissage de B() et C().


    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
    43
    b=0
    c=0
    n = 0
    max = 0
     
    For i=0 à taille de A               //1ère lecture
        if A(i)>max                           // recherche du maximum
            max = A(i)
        end if
        if A(i) = 0                             // et des 0
            P(n)= i                                // stockage des indices  
            n= n+1                               // et du nombre de répétition
        end if
    end for
    if n>1
        B(b)=n                                // remplissage de B
        b = b + 1
        for k = 0 to n
            C(c) = P(k)                         // et de C
            c=c+1
        end for
    end if
    P()=0                                 // remise à zéro des variables 
    n = 0
     
    For j=1 to max                 // on recommence 
        for i=0 à taille A()
            if A(i) = j
                P(n)= i
                n= n+1
            end if
        end for
        if n>1
            B(b)=n
            b = b + 1
            for k = 0 to n
                C(c) = P(k)
                c=c+1
            end for
        end if
        P()=0
        n = 0
    end for

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 427
    Points : 5 833
    Points
    5 833
    Par défaut
    salut

    pourquoi ne pas te servir d'un tableaux d'indice ou a chaque valeur trouvé tu incrémente la case

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      For i =low(A_tri) 0 à  High(A_tri) do
        B[A_tri[i]] := B[A_tri[i]]+1;
      end for
    tu te trouvera donc avec un tableau indicé ou la valeur inclut correspond au nombre d'occurence de cette indice
    si je reprend ton exemple

    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
     
    A_tri=[1,1,3,8,8,8,12]
     
    [1] = 2
    [2] = 0
    [3] = 1
    [4] = 0
    [5] = 0
    [6] = 0 
    [7] = 0
    [8] = 3 
    [9] = 0
    [10] = 0
    [11] = 0
    [12] = 1
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Membre confirmé
    Avatar de Deuzz
    Homme Profil pro
    curieux
    Inscrit en
    Septembre 2014
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : curieux
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 148
    Points : 521
    Points
    521
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Pourquoi ne pas te servir d'un tableaux d'indice ou a chaque valeur trouvé tu incrémente la case
    A mon avis, ta solution ne convient pas à Hongjan puisqu'elle a les mêmes défauts que sa proposition :
    Citation Envoyé par hongjan Voir le message
    De cette facon je peux pas récupérer le tableau d'indices et je voulais pas vraiment passer par l’étape de tri.
    Le but de l'exercice est d'obtenir les tableaux B() donnant les nombres de répétition et C() recensant les indices des nombres répétés dans le tableau A()

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour,

    question bête: pourquoi vous faites pas simple?
    On parcourt le tableau et on note la quantité et les indices.

    Exemple concret:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat /tmp/redondance.txt
    1
    8
    3
    8
    12
    8
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ awk '{qte[$1]++;indice[$1]=indice[$1]"\n"NR;} END{for (i in qte) if (qte[i]>1) print qte[i]" "; for (i in qte) if (qte[i]>1) print indice[i];}' /tmp/redondance.txt
    2
    3
     
    1
    7
     
    2
    4
    6
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 424
    Points : 8 705
    Points
    8 705
    Billets dans le blog
    43
    Par défaut
    1. Tout d'abord, tu peux associer chaque nombre du tableau à son indice de façon explicite comme ceci :
    A=[1,8,3,8,12,8,1] => A'=[(1,0), (8,1), (3,2), (8,3), (12,4), (8,5), (1,6)]
    On obtient donc un tableau de couples.

    2. Ensuite tu tries ton nouveau tableau A' sur le premier élément de chaque couple (et éventuellement sur le second élément du couple en deuxième critère de tri si ton tri n'est pas stable) :
    A"=[(1,0), (1,6), (3,2) , (8,1), (8,3), (8,5), (12,4)]

    3. Tu parcours linéairement ton tableau une fois trié pour générer tes deux sous-tableaux résultat :
    B=[2, 3]
    C=[0, 6, 1, 3, 5]

    Si besoin, tu peux trier le tableau C avoir les indices dans l'ordre croissant :
    C'=[0, 1, 3, 5, 6]
    Tutoriels et FAQ TypeScript

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/01/2013, 18h03
  2. Opération sur des entiers codés dans un tableau
    Par Nurza dans le forum Langage
    Réponses: 7
    Dernier message: 28/09/2012, 12h57
  3. [Free Pascal] Générer des nombres entiers aléatoires dans un tableau et trier celui-ci
    Par praetis dans le forum Free Pascal
    Réponses: 8
    Dernier message: 15/09/2012, 20h57
  4. Réponses: 3
    Dernier message: 26/10/2010, 22h14
  5. Réponses: 2
    Dernier message: 30/04/2006, 20h22

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