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

Algorithmes et structures de données Discussion :

Correspondance d'indices matrice-string


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut Correspondance d'indices matrice-string
    Bonjour à tous,

    je possède une matrice d'adjacence représentant un graphe :

    0 1 1 0 1
    1 0 1 0 0
    1 1 0 0 1
    0 0 0 0 1
    1 0 1 1 0

    Afin de ne pas devoir stocker cette matrice diagonale dans son entièreté, j'utilise la représentation suivante :

    1 1 0 1 1 0 0 0 1 1

    c'est à dire que je met à la suite les lignes du triangle supérieur.

    Cependant, je n'arrive pas à faire la correspondance avec les indices de la représentation de ma chaîne de bits et les noeuds concernés dans le graphe.

    J'aimerai pouvoir associer le bit en position 1 dans ma chaine au lien (1,2).

    Dans mon cas, on aurait la correspondance suivante :

    position 1 = 1 = lien (1,2) existe
    position 2 = 1 = lien (1,3) existe
    position 3 = 0 = lien (1,4) n'existe pas
    position 4 = 1 = lien (1,5) existe
    position 5 = 1 = lien (2,3) existe
    position 6 = 0 = lien (2,4) n'existe pas

    etc...

    Pour le code, j'ai débuté comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(i=0; i<NBITS; i++)
      {
      	if(chaine[i] == 1)
        		{
                         Noeud source = ???
                         Noeud dest = ???
                    }
    }
    J'ai essayé de jouer avec les modulos (sur le nombre de noeuds du graphe) mais je n'y arrive pas.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    Une piste écrite rapidement, donc je te laisse corriger les fautes s'il y en a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    col = 0
    line = 0
    for(i=0; i<NBITS; i++)
      {
    	if (line == matrix_height) break
      	if(chaine[i] == 1)
        		{
                         Noeud source = line
                         Noeud dest = col
                    }
    	if (col == matrix_width - 1) {
    		line++;
    		col = line+1;
    	}
    	else col++;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Merci pour ton aide.
    Je n'ai pas encore testé ton code mais je comprends ton principe.

    Entre temps j'avais réfléchi de mon côté et j'ai pris le problème dans l'autre sens en partant des noeuds et non plus de la chaine.

    Comme je connais le nombre de noeuds, j'effectue une double boucle en mettant un compteur à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    int position_bit = 0;
     
    for(i=0; i< NNODE-1; i++)
      {
      	for(j=i+1; j<NNODE; j++)
      	{
      		if(chaine[position_bit] == 1)
        		{
        			 Noeud source = i;
                             Noeud dest = j;
        		}
        		position_bit++;		
      	}  
      }

  4. #4
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Salut,
    loin de toute implémentation, je propose les relations suivantes.


    1. Définitions
      On se place dans le cas d'une matrice d'adjacence de taille . On cherche à établir la bijection entre l'indice de ta chaine binaire (noté : ) et le couple composé des numéros de nœuds source et destination ( noté : ).

    2. Le décalage


    3. Du couple à l'indice


    4. De l'indice au couple
      avec


    En espérant que ça aidera

  5. #5
    Membre expérimenté Avatar de Acrim
    Profil pro
    En recherche d'emploi
    Inscrit en
    Septembre 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Septembre 2010
    Messages : 134
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Une piste écrite rapidement, donc je te laisse corriger les fautes s'il y en a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    col = 0
    line = 0
    for(i=0; i<NBITS; i++)
      {
    	if (line == matrix_height) break
      	if(chaine[i] == 1)
        		{
                         Noeud source = line
                         Noeud dest = col
                    }
    	if (col == matrix_width - 1) {
    		col = 0;
    		line++;
    	}
    	else col++;
    }
    Je crois qu'il y a une erreur au niveau des lignes 11-13:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	if (col == matrix_width - 1) {
    		line++;
    		col = line+1;
    	}
    Si tu souhaites trouver le 'bit' correspondant à l'arc (c,l), tu devrais pouvoir utiliser une "formule" de la forme (c-1) + matrix_width*l - l*(l+1)/2 (somme des l premiers entiers).

  6. #6
    Membre Expert
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Par défaut
    Citation Envoyé par Acrim
    Je crois qu'il y a une erreur au niveau des lignes 11-13:
    Ah oui bien vu, j'avais zappé de repartir depuis la diagonale
    Enfin bon le but était que dvp_zero voit l'idée. Merci pour la correction !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Merci à tous pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. indices matrice éléments plus grand qu'un réel
    Par xavierdestev dans le forum Scilab
    Réponses: 2
    Dernier message: 19/09/2013, 20h17
  2. [Débutant] Supprimer Indice matrice
    Par junkie1986 dans le forum MATLAB
    Réponses: 7
    Dernier message: 18/05/2012, 16h46
  3. afficheur d'indice matrice
    Par superfunk dans le forum LabVIEW
    Réponses: 10
    Dernier message: 29/06/2009, 17h13
  4. Savoir si un String correspond à un nombre
    Par arno00020 dans le forum API standards et tierces
    Réponses: 16
    Dernier message: 30/11/2005, 10h42
  5. Longueur d'une string et nombre de pixels correspondant
    Par Alex Laforest dans le forum Langage
    Réponses: 2
    Dernier message: 26/08/2005, 09h22

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