arraylist : recherche performante

arraylist : recherche performante - C#/.NET managed - Programmation

Marsh Posté le 25-06-2008 à 14:55:31    

bonjour à tous,  
 
je fait appel à votre aide pour un petit problème en C#.
 
j'ai une arraylist composée de nombres (ushort).
mon but est de créer une méthode static qui retourne le nombre qui apparaît le plus de fois.
le tableau pouvant être très gros, je cherche de l'aide pour avoir un code performant.
 
des idées ?


Message édité par twisted le 25-06-2008 à 14:56:03
Reply

Marsh Posté le 25-06-2008 à 14:55:31   

Reply

Marsh Posté le 26-06-2008 à 09:00:32    

Je ne vois pas trop comment optimiser ça à mort. Le parcours d'un tableau est vraiment très rapide linéairement, donc bon...
 
Ou alors dérouler la boucle en multi-thread?


---------------
Another .Net Blog
Reply

Marsh Posté le 26-06-2008 à 09:44:43    

je pensais optimiser ça en limitant au maximum les copies dans des variables ou des tableaux temporaires.
 
la boucle multi-thread ? peux-tu m'en dire plus ?

Reply

Marsh Posté le 26-06-2008 à 13:37:56    

Tu n'as qu'à poster le code que tu comptes faire, ça sera plus facile de te donner un coup de main


---------------
Another .Net Blog
Reply

Marsh Posté le 26-06-2008 à 14:25:39    

j'ai trouvé une autre façon de procéder, plus simple et performante.
 
l'objectif était parmi des informations provenant de la bdd de retrouver celle qui apparaît le plus de fois.
 
j'ai donc créé un hashtable. le duo key/value me permet de stocker la valeur et son nombre d'occurence. je teste simplement dans une boucle si la valeur existe dans mon hashmap, si oui frequence++ sinon, monHashmap.add(object).
 
ensuite, c'est très simple de récupérer ce que je souhaite.
 
merci quand même ;)


Message édité par twisted le 26-06-2008 à 14:26:16
Reply

Marsh Posté le 26-06-2008 à 14:48:00    

mmm
 
Je pensais que c'était ce que tu faisais directement, et que tu demandais comment optimiser ça...
 
Mais si ça vient d'une BDD, une requête SQL peut faire l'affaire aussi ;)


---------------
Another .Net Blog
Reply

Marsh Posté le 26-06-2008 à 14:51:45    

une requête sql qui réalise ça ?
je suis preneur ;D
je veux bien à ptit exemple simple.

Reply

Marsh Posté le 26-06-2008 à 15:09:10    

Quelle est ta requête actuelle?


---------------
Another .Net Blog
Reply

Marsh Posté le 27-06-2008 à 13:41:20    

Code :
  1. SELECT * FROM matable WHERE ID IN (123,159,158)


 
c'est un exemple. les id recherchés avec le IN sont ajoutés dynamiquement. (ils sont dans une arraylist à la base)

Reply

Marsh Posté le 27-06-2008 à 13:55:51    

Déjà, il faut éviter de faire un SELECT * au profit d'un SELECT maTable.Champ1, maTable.Champ2, etc... Ne rapatrier que ce dont tu as besoin.
 
Ensuite la requête que tu peux faire pour avoir le compte de tes clés.
 
Un truc du genre:
 

Code :
  1. SELECT maTable.Key, COUNT(*)
  2. FROM maTable
  3. GROUP BY maTable.Key


 
Plus d'infos sur le SQL sur cette excellent site: http://sql.developpez.com


---------------
Another .Net Blog
Reply

Marsh Posté le 27-06-2008 à 13:55:51   

Reply

Marsh Posté le 28-06-2008 à 08:41:05    

si c'est pour stocker des nombres, n'utilise pas ArrayList mais BitVector ou BitVector32. Ils sont plus optimisé que ArrayList pour le stockage de nombre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed