Bon c'est bien plus simple que ça n'en a l'air
J'ai un peu honte de poser cette question, mais après 3 ans sans faire de C, je ne suis pas sur d'avoir encore tous mes neurones
J'ai N données sur M dimensions. Chaque données est définie sur un sous-ensemble de dimensions, donc il est préférable de stocker ceci sous forme de matrice creuse.
Si les dimensions étaient du même type (disons int), alors je créerais un pointeur de pointeurs. Le premier pointeur me servant à accéder à la i-ième données et le second pointeur me permettant de parcourir les dimensions définies (éventuellement en utilisant une structure (dimension-id, dimension-value).
Le problème est que je peux très bien avoir des entiers, que des bits ou des doubles (les Strings étant transformés en int(clef de hachage)).
La solution la plus rapide est de tous stocker sous forme de double. (dimension-id reste un entier, mais la valeur est toujours mise sous la forme d'un double). Sauf que si on a un bit à conserver, finalement on en stocke 64.
La deuxième solution serait de stocker une donnée en deux parties : les identifiants des dimensions (sous forme de pointeur d'entier) + les valeurs sous forme binaire.
Ensuite lorsque l'on veut accéder à un champs bien particulier, on utilise une fonction qui va utiliser le type des dimensions précédentes et le type courant pour définir l'intervalle des bits à récupérer. Finalement on transforme cet intervalle dans le type réel de la valeur.
Mes questions sont:
1) y a-t-il un moyen plus simple ?
2) comment optimiser au mieux l'accès à des valeurs binaires
3) sachant que je suis prêt à perdre 7 bits pour stocker les valeurs binaires en les ballant dans un char, puis-je créer un pointeur void* en allouant la bonne taille puis en stockant mes données aux adresses correspondantes ?
Partager