Page 1 sur 1

Trouver l'element le plus frequent dans une liste

Publié : ven. 06/juil./2007 7:46
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.

Publié : ven. 06/juil./2007 7:56
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:

Publié : ven. 06/juil./2007 8:07
par Yves Rouquier
Merci pour cette reponce super rapide !

Publié : ven. 06/juil./2007 9:43
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  

Publié : ven. 06/juil./2007 12:01
par comtois