Vous êtes sur la page 1sur 4

Projet Recherche oprationnelle

Codage dun arbre : Code de Prfer

Compte-rendu N3
Amamou Mouna
Aouidene Imed
INDP 1 B

2015-2016

Codage de Prfer
lalgorithme de codage Prfer peut tre dcrit comme suit :

Donnes : Arbre T
Tant qu'il reste plus de deux sommets dans l'arbre T
Identifier la feuille v de l'arbre ayant le numro minimum
Ajouter la suite S le seul sommet s adjacent v dans l'arbre T
Enlever de l'arbre T le sommet v et l'arte incidente v
Fin Tant que

Implmentation MATLAB :
Programme principal
clear all
close all
clc
n=input('Entrez le nombre de noeuds\n') ;
% n reprsente le nombre de noeuds de l'arbre.
arbre=zeros(n) ;
% initialisation de la matrice d'adjacence ( arbre)

de l'arbre coder .

%la saisie des liens entre les noeuds deux par deux .
for i=1:n-1
disp(['Entrez les deux noeuds adjacents n ',num2str(i)]) ;
noeud1=input(' ') ;
noeud2=input(' ') ;
arbre(noeud1,noeud2)=1;
arbre(noeud2,noeud1)=1;
%lorsqu'il existe un lien entre les noeuds 1et2,
% on remplie par 1 dans la matrice d'adjacence.
end

seq_prufer=zeros(1,n-2) ;
%initialisation de la sqeunce de prfer zro
%et cette squence contient (n-2) lments
verif=zeros(1,n) ;
%Le vecteur ligne verif permet de rduire la complexit de l'algorithme.
%le vecteur verif assure qu'on ne re-parcours pas les feuilles dj
traites

% parcours de la matrice d'adjacence


%tant qu'il reste plus de deux sommets dans l'arbre .
for i=1:n-2
[feuille,sommet_adj]=recherche_feuille_mini(arbre,verif) ;
%recherche de la feuille de numro minimal
verif(feuille)=1; %marquer la feuille trouve comme visite .
seq_prufer(i)=sommet_adj ;
%Ajouter la suite seq_prufer le seul sommet "sommet_adj" adjacent
% la feuille de numro minimum "feuille"
arbre(feuille,sommet_adj)=0 ;%on enlve la feuille de l'arbre
arbre(sommet_adj,feuille)=0 ;
end;
% afficher la squence de prfer.
disp('la sequence de prufer est : ') ;
disp(seq_prufer)

Limplmentation de la fonction recherche_feuille_mini


%la fonction "recherche_feuille_mini " permet de chercher la feuille
ayant
%le numro minimal. Cette fonction prend comme arguments :
%la matrice d'adjacence de l'arbre et vecteur verif .
%elle retourne la feuille de numro minimal "num_feuille" et le sommet
%adjacent cette feuille.
function [num_feuille,noeud_adj]=recherche_feuille_mini(matrice,verif)
b=false ;%permet d'arrter la boucle lorsqu'on trouve la feuille
recherche.
ligne=1 ; %initialisation du compteur sur les lignes.
while (b==false && ligne<=length(matrice))
colonne=1 ; % initialisation du compteur sur les colonnes
nombre=0 ;%initialisation de compteur de nombre de sommets adjacent
d'un noeud.
%parcours de tous les sommets d'un noeud fix,
%s'il est non trait (verif(ligne)==0)
while(colonne<=length(matrice)&&verif(ligne)==0)
if (matrice(ligne,colonne)==1)
nombre=nombre+1 ;%compter le nombre de sommets adjacents un
noeud fix
noeud_adj=colonne ; %sauvegarder le sommet adjacent
end

colonne=colonne+1 ;%incrmentation du compteur de colonnes


end
if (nombre==1) %si le nombre de sommets adjacents gale 1,
% c'est une feuille.
b=true ;
num_feuille=ligne ;%sauvegarder le numro de la feuille.
end
ligne=ligne+1 ;%on incrmente les lignes afin de passer au nud
% suivant
end

Exemple dexcution : Soit larbre suivant (dj traiter dans ltude


bibliographique):