Trouver l'element le plus frequent dans une liste

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Yves Rouquier
Messages : 40
Inscription : mar. 23/mars/2004 10:23

Trouver l'element le plus frequent dans une liste

Message par Yves Rouquier »

Bonjour,
Tout est dans le titre !
Dans mon cas j'ais une liste de mots et j'aimerai trouver celui qui
reviens le plus souvent.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Tu recrée un seconde liste où tu vas compter les éléments et les ajouter:

Code : Tout sélectionner

Structure CountElement_String
  nom.s
  count.l
EndStructure




Procedure.s GetMostFrequentElement(lst.s())

  NewList count.CountElement_String()
  
  ForEach lst()
  
    trouve = #False
    ResetList(count())
    While trouve = #False And NextElement(count())
      If count()\nom = lst()
        trouve = #True
      EndIf
    Wend
    
    If trouve
      count()\count + 1
    Else
      AddElement(count())
        count()\nom = lst()
        count()\count = 1
    EndIf
  
  Next
  
  SortStructuredList(count(), 1, OffsetOf(CountElement_String\count), #PB_Sort_Long)
  
  retour$ = ""
  If CountList(count())
    SelectElement(count(), 0)
    retour$ = count()\nom
    Debug count()\count
  EndIf
  
  ClearList(count())
  ProcedureReturn retour$
  
EndProcedure






NewList elt.s()

AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "salut"
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "ca va ?"
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "test"
AddElement(elt()) : elt() = "test2"
AddElement(elt()) : elt() = "test"
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "test2"
AddElement(elt()) : elt() = "test"

Debug GetMostFrequentElement(elt())

Lio :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Yves Rouquier
Messages : 40
Inscription : mar. 23/mars/2004 10:23

Message par Yves Rouquier »

Merci pour cette reponce super rapide !
brossden
Messages : 822
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Une autre façcon de faire peut être un peu plus rapide pour de grosse liste d'éléments :

Code : Tout sélectionner

Structure Element
  nbr.l
  nom.s
EndStructure

NewList elt.s()
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "salut"
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "ca va ?"
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "test"
AddElement(elt()) : elt() = "test2"
AddElement(elt()) : elt() = "test"
AddElement(elt()) : elt() = "coucou"
AddElement(elt()) : elt() = "test2"
AddElement(elt()) : elt() = "test"

SortList(elt(),1)

NewList nbr.Element()
FirstElement(elt())
AddElement(nbr.Element())
nbr.Element()\nbr = 0
nbr.Element()\nom = elt()

ForEach elt()
  If nbr.Element()\nom = elt()
    nbr.Element()\nbr + 1
  Else
    AddElement(nbr.Element()) 
    nbr.Element()\nom = elt()
    nbr.Element()\nbr = 1
  EndIf     
Next
SortStructuredList(nbr.Element(),1,0,#PB_Sort_Long)
ForEach nbr.Element()
  Debug nbr.Element()\nom+"  "+Str(nbr.Element()\nbr)
Next  
Denis

Bonne Jounée à tous
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Répondre