Quelle structure de données choisir pour un grand volume

Fermé
fatmanajjar Messages postés 15 Date d'inscription dimanche 27 mai 2012 Statut Membre Dernière intervention 8 juin 2017 - Modifié le 8 juin 2017 à 14:31
 Utilisateur anonyme - 11 juin 2017 à 00:05
Bonjour,
j'aimerai savoir, quelles sont les meilleurs structures de données a utiliser si nous avons un grand volume de données et on veut faire des opérations logiques et des tris sur ses données, qu'elle structure peut on utiliser ? tout en optimisant au niveau de la memoire.

Est il mieux d'utiliser un tableau ou une liste ou autre ?
Est il mieux d'utiliser un bitset plutot qu'un tableau de boolean ?

J’espère que j'ai bien expliquer ce que je veux.
Merci pour vos retours.


--
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
8 juin 2017 à 21:36
fatmanajjar, tu en es déjà à 5 discussions différentes sur les forums et ce concernant le même problème. Il faudrait que tu évites de polluer les forums parce qu'en t'éparpillant tu égrennes des informations un peu partout mais aucune discussion ne contient vraiment l'intégralité de ton problème, et même après 5 discussions, comme avec YCN, on ne sait toujours pas quelles sont tes besoins et contraintes exacts.

"mon but est de traiter un grand volume de données en temps réel"
Quelle est ta volumétrie ? On parle de Mo ? de Go ? de To ?
Est-il seulement pertinent de les stocker en mémoire ?
Et quand tu dis "temps réel" qu'est ce que ça veut dire pour toi ?

Remarque : sans aller dans le détail, il existe une branche de l'informatique bien adapté aux calculs sur les matrices, c'est le parallélisme. Les algorithmes varieront bien sûr en fonction du nombre de ressources (ordinateurs, processeurs) que tu peux allouer à ton calcul.

Et même si tu n'écoutes pas les réponses que tu as déjà pu avoir, de ma part notamment, ce n'est pas en grignotant quelques octets sur un BitSet que tu vas résoudre ton problème. Il faut revoir tes algorithmes et leurs complexité en temps et en mémoire.
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
8 juin 2017 à 14:39
Salut,

Bon déjà je crois qu'il y a deux choses d'importantes, quelle type de données? Dois tu les trier en temps réel ?

Ensuite je pense qu'il faut que tu approfondisse un peu ta question afin que l'on puisse vraiment t'aider.

Tout dépend vraiment de ce que tu veux faire exactement. Il existe pas mal de structure de données, par exemple : les tableaux, les FIFO (& co), les buffer circulaires, les listes chaînés, les arbres (...). Tu ne peux pas obtenir de conseil avec des indications aussi floues.
-1
fatmanajjar Messages postés 15 Date d'inscription dimanche 27 mai 2012 Statut Membre Dernière intervention 8 juin 2017
8 juin 2017 à 15:04
Bonjour
Je vous remercie pour votre retour.
Oui, je doit trier et faire des operations logiques sur les données en temps réel.

J'ai commencé par un petit programme qui traite des données stockées dans un fichier.
Mais mon but est de traiter un grand volume de données en temps réel.
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
8 juin 2017 à 15:17
Ce n'est toujours pas plus clair... Je vous laisse réfléchir à quels sont les éléments importants de votre projet.
  • Quel langage?
  • Quel domaine?
  • Pourquoi ?
  • D'ou vienne les données?
  • Quels sont ces données? Comment arrivent t elles ?
  • Quels sont vos "opérations" logiques? Juste des OU, ET, XOR, NAND?
  • Est ce bit à bit?


Pour réfléchir avec vous il faut des éléments.
Cependant puisque vous semblez être débutante je vous conseille dans un premier temps d'utiliser des tableaux puis d'optimiser ensuite votre structure de donnée.
0
fatmanajjar Messages postés 15 Date d'inscription dimanche 27 mai 2012 Statut Membre Dernière intervention 8 juin 2017 > YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017
8 juin 2017 à 15:41
J'utilise le JAVA dans le domaine du web semantique.
Je veux traiter des fichier RDF, les transformer en matrices binaires, et faire des operations logiques sur ces matrices.
Les operations logiques sont : OR, AND, XOR
Je veux trier les lignes et les colonnes des matrices.
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
8 juin 2017 à 16:52
Dans ce cas je pense que la seule manière de faire ça ça va être d'utiliser des tableau 2D, mais je ne sais pas comment optimiser ça en java. Tu devrais peut être créer une structure personnalisé qui va te permettre de déplacer rapidement tes colonnes et tes lignes. J'avoue que je m'y connais assez mal en java...
En C je t'aurais conseillé d'utiliser des pointeurs qui t'auraient permis de ne pas perdre de temps en recopie des matrices. L'important dans ce que tu fais va être de bouger des zones mémoires, et ce sans les recopier, tu vas devoir faire des échanges "intelligents", cad penser à optimisation des registres et des variables, ne jamais recopier, ne jamais faire des calcul inutiles. Cela passe par l'optimisation de boucles notamment.
L'idée ça va être de réduire la complexité de tes boucles, à chaque fois que tu vas supprimer un read, un write, et surtout un calcul tu vas beaucoup baisser la complexité de ta boucle. Puisqu'en fait (et c'est logique) à chaque opération enlever tu vas économiser en complexité N*M opérations (pour une matrice N*M).
Puisque ce sont des matrices binaires, je te conseille de faire tes opérations par 32, puisque c'est la taille d'un int. Tu vas donc mapper ta matrice binaire dans des int.
Par exemple pour la ligne 1 : b0, b1 ... bx
tu vas la transfromer en int1 , int2...
et int1 sera composé de b0 à b32
Tu comprends l'idée?
Cependant je pense que le java est très mal adapté au optimisation de calcul. Puisque c'est un langage lent et très éloigné de l'architecture matériel par définition (puisque utilisant une machine virtuelle). Donc ce sera beaucoup de peine pour pas gagner grand chose au final.

https://fr.wikipedia.org/wiki/Optimisation_de_boucle
0
Utilisateur anonyme
11 juin 2017 à 00:05
En faisant des recherches, on tombe sur des articles intéressants concernant les performances des différentes Collections de Java : https://blog.engineering.publicissapient.fr/2011/02/17/java-collection-performance/

Certaines collections sont meilleurs si tu veux accéder à un élément précis indexé (arraylist) ou non indexé (map).
0