Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1046 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Algo Tableau, occurence unique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Algo Tableau, occurence unique

n°305553
AGA
La boîte à Bokeh!
Posté le 10-02-2003 à 16:05:44  profilanswer
 

Bon j'irais dormir après promis :o,
 
mais avant :whistle:  
j'ai un tableau de chiffre
comment renvoyer un tableau avec une occurence de chaque chiffre maxi
 
ex:1;2;3;2;3;1  après fction on obtient 1;2;3
 
j'ai honte  :sweat:


Message édité par AGA le 10-02-2003 à 16:06:14
mood
Publicité
Posté le 10-02-2003 à 16:05:44  profilanswer
 

n°305687
Taz
bisounours-codeur
Posté le 10-02-2003 à 18:57:34  profilanswer
 

ça s'appelle un ensemble. tu construis un autre tableau à partir du premier: si l'élément n'est pas dans le nouvo tableau, ben tu l'ajoutes. et ainsi de suite

n°305696
AGA
La boîte à Bokeh!
Posté le 10-02-2003 à 19:17:09  profilanswer
 

Tu prends chaque element du tableau en In et tu parcours le nouveau pour voir si tu peux le mettre?
 
Bon ok ;)
 

n°305716
youdontcar​e
Posté le 10-02-2003 à 19:55:25  profilanswer
 

1;2;3;2;3;1  
 
une fois trié :
 
1;1;2;2;3;3
 
suffit maintenant d'enlever les doublons.

n°311563
Giz
Posté le 17-02-2003 à 21:09:35  profilanswer
 

youdontcare a écrit :

1;2;3;2;3;1  
 
une fois trié :
 
1;1;2;2;3;3
 
suffit maintenant d'enlever les doublons.


 
 [:plusun] , avec un tri rapide (qsort.h) auparavant, cet algo est carrément plus efficace que celui de ++Taz ! (faut l'imaginer dans le pire des cas = tableau très grand)
Avec le tri on fait un parcours de N éléments dans le tableau trié. Sans le tri, on parcours N+(N-1)+(N-2)+...+1 fois le tableau qu'on rempli.


Message édité par Giz le 17-02-2003 à 21:13:35
n°311576
Taz
bisounours-codeur
Posté le 17-02-2003 à 21:23:54  profilanswer
 

évidemment, mais bon, commence pas à la jouer, parce que aga ne trouvais pas l'algo pour faire ça, une solution simple fonction tres bien. d'ailelurs j'ai jamais parlé de l'organisation du tableau (ou autre SD): j'ai dit, "tu construit un autre: si y ait pas, t'ajoutes, sinon tu passes au suivant". je n'ai pas parlé de relation d'ordre comme tu le sous-entend avec ton tri. si on ne dispose ni de hashcode, ni de relation d'ordre, je ne vois pas rien d'autres qu'une strucutre linénaire.
 
hashcode => table de hash
 
relation d'ordre => tas, arbres, un tableau trié avec des opérations dichotomiques, ou une structure linéaire non-ordonée sont autant d'implémentations valides.
 
il faut considérer le pire des cas, certes, mais pas forcément. si l'ensemble est de petite taille, une structure linéaire tout simple fera tres bien le boulot, et peut etre plus rapidement. c'est bon exemple pour implémenter une Factory pour spécialiser les traitements (organisation différente en fonction de la quantité de données à manipuler et de leur type)
 
tout dépends des besoins

n°334820
Deaddy
Posté le 17-03-2003 à 01:35:47  profilanswer
 

"tout dépends des besoins"
exactement !
 
et vu qu'on a à faire à des chiffres:
 
char T1[N],T2[10],T3[10],k=0;
int i;
memset(T2,0,10);
for (i=0;i<N;i++) T2[T1[i]]|=1;
for (i=0;i<10;i++) if (T2[i]) T3[k++]=i;
 
T3 contient les k chiffres présents
 
rq: ca marche aussi pour des 0<=T1[i]<=255 , en remplacant 10 par 255

n°334827
Taz
bisounours-codeur
Posté le 17-03-2003 à 07:11:27  profilanswer
 

Deaddy a écrit :

"tout dépends des besoins"
exactement !
 
et vu qu'on a à faire à des chiffres:
 
char T1[N],T2[10],T3[10],k=0;
int i;
memset(T2,0,10);
for (i=0;i<N;i++) T2[T1[i]]|=1;
for (i=0;i<10;i++) if (T2[i]) T3[k++]=i;
 
T3 contient les k chiffres présents
 
rq: ca marche aussi pour des 0<=T1[i]<=255 , en remplacant 10 par 255
 

c'est l'anti-exemple d'une implémentation claire. bestof des codes foireux  [:xp1700]

n°334830
nur
Posté le 17-03-2003 à 07:32:10  profilanswer
 


sur excel j'avais fais un truc pour supprimer les doublons tu peux l'adapter
 
Sub doublons()
Dim temp()
Sheets("Brouillon" ).Activate
Range([a1], [a1].End(xlDown)).Select
cc = Selection.Rows.Count - 1
ReDim temp(cc)
 
For i = 0 To cc
temp(i) = Range("A1" ).Offset(i)
Next
 
' le tableau temp contient les donnees
 
k = 0
 
 
 
While k < cc
 
For i = k + 1 To cc
 If temp(i) = temp(k) Then
   temp(i) = "X"
 End If
Next
k = k + 1
While (temp(k) = "X" ) And (k < cc)
k = k + 1
Wend
 
Wend
 
j = 0
'les valeurs sont celles qui ne contiennent pas "X"
 
For i = 0 To cc
If temp(i) <> "X" Then
Range("a1" ).Offset(j) = temp(i)
j = j + 1
End If
Next
 
 
 
End Sub

n°335383
Deaddy
Posté le 17-03-2003 à 15:19:59  profilanswer
 

lol ++taz !  
t'étais ptet pas encore bien réveillé à ct'heure la
(enfin j'espère que c'était de l'humour)

mood
Publicité
Posté le 17-03-2003 à 15:19:59  profilanswer
 

n°335481
Taz
bisounours-codeur
Posté le 17-03-2003 à 16:24:42  profilanswer
 

Deaddy a écrit :

lol ++taz !  
t'étais ptet pas encore bien réveillé à ct'heure la
(enfin j'espère que c'était de l'humour)

ct de l'humour mais je deconseille fortement ta solution. c'est unv rai casse-tete pour la comprednre et encore plus pour la modifier. n'oublies pas "Computer cycles are cheap, but human cycles are very expensive". je maintiens donc, mais pas méchemment

n°335645
Deaddy
Posté le 17-03-2003 à 18:06:53  profilanswer
 

ouai, je comprends ta politique même si je déplore son aspect plus commercial qu'algorithmique.

n°335659
Taz
bisounours-codeur
Posté le 17-03-2003 à 18:14:29  profilanswer
 

Deaddy a écrit :

ouai, je comprends ta politique même si je déplore son aspect plus commercial qu'algorithmique.

[:xp1700]  
 
beaucoup d'entre nous sommes etudaints en informatique, certains en vivent déjà: faire du code lisible et réutilisable, c'est notre priorité. Ca n'a rien de comemrcial, c'est un gage de qualité.
 
Ne me dis pas que l'algorithme ressort de ton implémentation

n°335772
LeGreg
Posté le 17-03-2003 à 20:01:41  profilanswer
 

Franchement le coup des doublons sur des chiffres( 1 a 9 ?) en
temps lineaire c'est facile
pas besoin d'implantations compliquees ni de qsort (qui en plus est plutot n*n dans le pire des cas..):
 
++Taz c'est toi qui a tort meme si le code gagnerait surement
en clarté avec des noms explicites.
 
Par exemple reecrit en C++:
 

Code :
  1. void doublons(const vector<char>& src, vector<char> &dst) {
  2.     bool compteur[] = {false, false, false, false, false, false, false, false, false, false};
  3.     vector<char>::const_iterator it;
  4.     for (it= src.begin(); it != src.end(); ++it)
  5.     {
  6.         compteur[*it] = true;
  7.     }
  8.     dst.resize(0); // si dst n'est pas vide
  9.     for (int i = 0; i<10; ++i)
  10.     {
  11.         if (compteur[i])
  12.            dst.push_back(i);
  13.     }
  14. }


 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°335867
Taz
bisounours-codeur
Posté le 17-03-2003 à 21:30:08  profilanswer
 

pouh c compliqué tous vos trucs. amusez vous bien dans vos histoires et quand vous aurez un vrai traitement, rappele moi  :hello:

n°335985
jagstang
Pa Capona ಠ_ಠ
Posté le 18-03-2003 à 00:37:41  profilanswer
 

lol trop drôle cette pitite dispute à 2 balles.
 
bref. c'est toi là ++Taz ? http://dejean.benoit.free.fr/Photos/IMG_0759.jpg
 
a+

n°336010
Taz
bisounours-codeur
Posté le 18-03-2003 à 07:10:00  profilanswer
 

oui    [:spamafote]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Algo Tableau, occurence unique

 

Sujets relatifs
déclarer un tableau dynamiquement et ...[HTML] Tableau : encadrement d'une cellule
[vba] comment copier un tableau mémoire dans une plage excel?[Perl] itérer sur les valeurs d'un tableau de hash de hash...
[HTML] tableau de taille maximale pour un forumComment faire des ancres dans un tableau ?
Compter les ligne d'un tableau[Topic unique] débats sur les langages
[HTML] Imprimer un grand tableauGestion du id unique dans mysql
Plus de sujets relatifs à : Algo Tableau, occurence unique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR