• Aucun résultat trouvé

Conception et Pratique de l Algorithmique

N/A
N/A
Protected

Academic year: 2022

Partager "Conception et Pratique de l Algorithmique"

Copied!
7
0
0

Texte intégral

(1)

Conception et Pratique de l’Algorithmique

Binh-Minh Bui-Xuan

Rapport du Projet final :

Arbre de Steiner dans un graphe

Réalisé par : ABBES Billel

Année Universitaire : 2019/ 2020

(2)

Partie 1 : Arbre de Steiner dans un graphe sans budget

Dans la fonction Steiner de la classe DefaultTeam il y’a deux fonctions :

1. calculSteinerSanspointFermat(points, edgeThreshold, hitPoints) 2. calculSteinerAvecpointFermat(points, edgeThreshold, hitPoints) la deuxième fonction, celle du point Fermat est commenté, il va donc falloir la décommenter et commenter la première fonction pour tester.

la deuxième fonction calcule pour i=500 le point Fermat.

Pour calculer le point de Fermat I j’ai rajouté une variable ebs que j’ai initialisé à 3, pour trouver le point un point dans points et dont la distance de I ne dépasse pas racine(3²+3²)

Voici deux résultats du même graphe : En calculant le point Fermat

(3)

En calcule du point Fermat :

On peut remarquer qu’on a gagné 4 unités.

• Dans certain graphe, quand il y a un point qui fait partie de hitPoints et qui est isolé (la distance avec le point le plus proche est supérieure à treshold) Le programme rend une erreur car la fonction qui calcule le plus court chemin créer une boucle

infinie en tentant de trouver un chemin qui relie le point isolé avec un autre.

(4)

Partie 2 : Arbre de Steiner dans un graphe avec budget

Algorithme 1 :

Enlever l’arête la plus grande, ensuite recalculer Steiner du nouvel ensemble des points. Répéter tant que la distance globale du graphe est supérieure au budget.

Cet algorithme n’est pas efficace car dans certain cas il vaut mieux commencer par enlever des arêtes de longueur petite pour accéder à des longues arêtes.

Algorithme 2 :

Cet algorithme est basé sur la programmation dynamique, il consiste à calculer le meilleur sous arbre à enlever de l’arbre pour chaque i allant de 1 à (n-1), i présente le nombre de points à enlever.

A l’itération 1 on enlève la plus grande arête, à l’itération 2 on compare entre enlever les 2 arrêtes les plus grandes et enlever le sous-arbre de taille 2 le plus grand…etc.

Pour chaque i on calcule toutes les combinaisons dont la somme est égale à i, par exemple pour 3 les combinaisons sont :

(1 -1 -1) (2 – 1) (1 – 2) (3).

Ensuite on compare la distance de chaque arbre après avoir enlevé des sous arbres de taille x comme la combinaison précédemment indique.

(5)

1-1-1

2-1

1-2

3

(6)

Pour les 4 arbres on calcule la distance des arêtes noirs, ensuite on les compare entre eux pour déterminer l’ensemble des meilleurs sous arbres à enlevé quand on veut enlever 3 points.

Ce calcule de i =3, sera utile pour calculer la même chose pour i=4.

On peut voire que la moitié des combinaisons de 4 sont les mêmes combinaisons de 3 en ajoutant 1 à droite, cela peut être traduit par : La solution pour i=3 ensuite enlever la plus grande arête.

L’avantage de cet algorithme c’est qu’il donne des bons résultats, il semble même être optimal vu qu’il calcule toutes les possibilités, mais vue que les combinaisons calculer sont de complexité exponentielle, car ça se redouble pour chaque itération, à partir de 15 cela commence à devenir lent voire impossible. Cependant, jusqu’à 15, cela reste calculable avec un ordinateur de configuration moyenne.

En outre, pour un nombre de points à enlevés i , si on prend l’arbre résultant A après avoir enlevé la liste des sous arbres

1-1-1 2-1 1-2 3

1-1-1-1 2-1-1 1-2-1 3-1 1-1-2 2-2 1-3 4

(7)

rendue par cet algorithme pour i, et si on applique à nouveau Steiner sur l’ensemble de point de l’arbre A, il est possible d’avoir un nouveau arbre de taille inferieure de la taille de A.

Après plusieurs analyses, il semble qu’il vaut mieux de

commencer par enlever des gros sous arbres, cela pour viser les arêtes longues proches de la racine, et pour rapprocher du budget, mais pas beaucoup, puis enlever arête par arête en calculer Steiner pour chaque nouvel ensemble de points,

• J’ai rajouté un nouvel Arbre qui hérite de Tree2D, Un arbre Tree2Dr :

Cela est dû pour la raison suivante : Si on enlève le sous arbre rouge, l’arête verte sera automatiquement supprimée mais on a intérêt à garder l’information qui sera utile

prochainement afin de faire des comparaisons, fusionner des

sous Arbre, pour calculer la distance gagner …etc

Références

Documents relatifs

Avec un nombre fixé de jetons, il faut obtenir la plus grande valeur de n (longueur du côté de l’échiquier et de plus il faut que deux cases quelconques voisines par une

En effet, si l'on aborde le point P par une route sur la surface qui ne soit pas tangente à l'arête, on ob- tiendra nécessairement la même l i m i t e ; car les courbes C qui

Nous avons résolu pratiquement cette difficulté de la manière suivante, qui de plus améliore les performances de l'algorithme initial du point de vue du coût des graphes obtenus

• la prise en charge de certains déchets du nucléaire diffus, notamment les objets radioactifs décrits dans cette brochure,. • la remise en état de sites pollués par

Douze lacets sont noués entre eux à leurs extrémités de manière à constituer un filet comportant huit noeuds qui peuvent être placés sur les sommets d’un cube d’arête a..

Q4 Pour les plus courageux: on admet qu'après avoir lancé le dé, la probabilité pour qu'il tombe sur l'une quelconque de ses faces est proportionnelle à l'angle solide sous-tendu

Prouver qu'il est possible de creuser un trou dans un cube de sorte qu'un cube de même dimension puisse passer à travers.. ( hexagone traits interrompus

Avec m et n pièces respectivement dans chaque pile et lors de la deuxième opération on multiplie par k entier quelconque > 1 le nombre de pièces de l’une des deux piles.