IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Matrice creuse de données hétérogènes


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Matrice creuse de données hétérogènes
    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 ?

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Juste pour precision , est ce que ca ressemble a ça :
    c'est très grossier :

    Matrice :

    Vecteur vecteur

    Vecteur Vecteur

    la matrice est sur M dimension , elle a N donné qui sont par exemple des vecteur qui sont a leurs toutr defenis sur plusieur dimension

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    En effet cela ressemble à cela.

    Matrice composée de N données définis sur au plus M dimensions.

    Le soucis est de stocker un vecteur de types différents. je proposais donc de transformer cet ensemble de valeur en bits afin de le stocker sur une structure commune.

    Ex :
    D1: dim1 = 1(bit), dim 3 = 5 (int), dim 5 = 3.2 (double)
    D2: dim 5 = 27.1 (double), dim 6 = 0 (bit), dim7 = 1664.69 (double)

    Le nombre de bit alloués pour D1 serait 1 + sizeof(int) + sizeof(double), pour d2 : 2*sizeof(double) + 1.

Discussions similaires

  1. Reshape d'une matrice creuse
    Par levit dans le forum MATLAB
    Réponses: 4
    Dernier message: 11/07/2007, 13h46
  2. Réponses: 2
    Dernier message: 11/12/2006, 19h46
  3. Matrices creuses de double
    Par panda31 dans le forum C
    Réponses: 7
    Dernier message: 25/04/2006, 09h46
  4. Liens entre bases de données hétérogènes
    Par Velodrom dans le forum Oracle
    Réponses: 1
    Dernier message: 17/03/2006, 10h34
  5. Matrice creuse
    Par lamar dans le forum C
    Réponses: 16
    Dernier message: 10/12/2005, 00h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo