begin process at 2012 05 30 10:06:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

[Tous compilos]Optimisation de listes chaînées ( enveloppe convexe )


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[Tous compilos]Optimisation de listes chaînées ( enveloppe convexe )

vendredi 18 janvier 2002 à 15:19:19 | [Tous compilos]Optimisation de listes chaînées ( enveloppe convexe )

GoldenEye

Bonjour tlm
Je cherche à optimiser l'algorithme Quick Hull pour déterminer l'enveloppe convexe de N points à coordonnées entières dans un plan.
Au lancement de QuickHull(...)les points sont triés dans une liste simplement chaînée par ordre d'abscisse croissante.
Voici la portion de code qui m'intéresse et qui doit être sujette à modification:

void QuickHull(Point A,Point B,Liste *lPtr)
{
int airemax=0; // correspond au point le plus loin
int otes=0; // le nombre de points à l'intérieur d'un triangle
Point plusloin; // le point le plus éloigné ( en terme d'aire )
TrouverPlusLoin(A,B,&plusloin,*lPtr,&airemax);
Supprimer(A,B,plusloin,lPtr,&otes);// enlève ce qu'il y a à l'intérieur du triangle ABplusloin
if(otes!=0) // si on a enlevé des points il faut continuer
{ // nouveau sous-régionnement en 2 régions
QuickHull(A,plusloin,lPtr);
QuickHull(plusloin,B,lPtr);
}// sinon on s'arrête
}

void Supprimer(Point A,Point B,Point H,Liste *lPtr,int *otesPtr)
{ // on supprime ceux qui sont dans le triangle (on regarde si les points sont à gauche des 3 segmennts)
Liste courant=(*lPtr); // élément courant
Liste suivant=(*lPtr);
while(estListeVide(courant)==FAUX) // pour supprimer les points à l'intérieur
{
suivant=courant->lien;
if(EstAGauche(courant->p,H,A)==VRAI && EstAGauche(courant->p,B,H)==VRAI && EstAGauche(courant->p,A,B)==VRAI)
{
(*lPtr)=delister(*lPtr,courant->p);// OPTIMISATION :le délistage pourrait reprendre la liste non pas depuis le début mais depuis le point précédent
(*otesPtr)++; // pour cela la fonction de délistage doit être modifiée ( un paramètre de plus: l'endroit de la liste où commence le délistage )
}
courant=suivant;
}
}


Liste delister(Liste l, Point pt)
{
Liste ptrCourant=l;
Liste ptrPred=ptrCourant; // l'Element précédent
if (estListeVide(l)==VRAI)
return l; // si la liste est vide... on ne touche à rien
if (((l->p).abs==pt.abs) && ((l->p).ord==pt.ord)) // si c'est le premier qu'on vire
{
l=l->lien; // l pointe vers le suivant
free(ptrCourant); // on libère la mémoire
return l;
}
ptrCourant=ptrCourant->lien; // sinon on passe au 2eme element
while (estListeVide(ptrCourant)==FAUX) // tant que c'est pas le bon
{
if (((ptrCourant->p).abs==pt.abs) && ((ptrCourant->p).ord==pt.ord))
{
ptrPred->lien=ptrCourant->lien;// on saute l'Element délisté
free(ptrCourant);
return l;
}
ptrPred=ptrCourant;// sinon on passe au suivant
ptrCourant=ptrCourant->lien;
}
return l;
}

Ceux qui liront attentivement jusque là ( donc susceptibles de m'aider ! ) remarqueront que ce code marche parfaitement. Mais à chaque délistage, la fonction ( delister ) reprend la lecture de la liste chaînée depuis le début alors que l'on pourrait gagner en performance en reprenant le parcours de la liste depuis le point précedent puisque la liste est TRIEE. Il faudrait donc changer la fonction delister en ajoutant un parametre du genre Liste courant. J'ai essayé mais je n'y arrive pas. SI qqun pouvait m'aider ce serait vraiment sympa
Merci d'avance
dimanche 22 janvier 2006 à 02:58:40 | Re : [Tous compilos]Optimisation de listes chaînées ( enveloppe convexe )

minicriquetman

salut jsui etudiant en info a orleans et j'aurai aimé savoir si tu avais des esemples de codes qui utilise des structures chainées et si possible avec des explication car je ne comprend rien a ces structures.
merci d'avance.


Cette discussion est classée dans : points, liste, courant, ptrcourant, lptr


Répondre à ce message

Sujets en rapport avec ce message

liste chainée double générique [ par issoux ] Bonsoir ,  j'ai un probleme dans mon code :  Code: #include <stdlib.h& thread sur feu d'artifice [ par kidpigeyre ] Je suis sur un projet de feu d'artifice. Après avoir obtenu un résultat correct d'une explosion, je cherche désormais à en faire apparraitre plusieurs constructeur de recopie et pointeur sur pointeur [ par popi0016 ] Bonjour je bloque sur la définition d'un constructeur de recopie d'une classe "liste" afin de sortir du programme principale sans provoque une exeptio [C] insertion en fin de liste chainée [ par Cow_B ] Bonjour, j'ai à nouveau un ch'tit souci...je cherche à insérer un nouveau maillon à la fin d'une liste chainée. Avec ce que je fais, je me fait envoye [C] liste chainée [ par Cow_B ] Bonjour, g un tout petit souci...lors de la compilation d'un programme contenant cette fonction, ca plante... ca fait plus de 12h maintenant que j'ess probleme de liste chaine [ par cutibipoulet ] voila, ge débute en cpp et iles problèmes commences quand je fait une simple liste doublement chainé. JeDans cette liste, il existe undebut list_begin Besoin D'aide [ par ChInOvSki ] J'ai créé ce programme, et j'en ai pas trouvé où est le probleme :s Voila Mon Prgrm: [size=300]Noeud.h[/size] #include using namespace std; templat copier le contenu d'un fichier vers un autre ! [ par goldray ] Bonsoir, je veux copier le contenu d'1 fichier dans 1 autre en passant par l'intermédiaire d'une liste chainée ... mais le soucis que j'ai rencontré [Clos]les arbres binaires et les listes chainées en c [ par lavoro ] SVP je veux creer un arbre binaire à partir d'une liste chainée je possede les données de la liste langage c . merci d'avance [^^happy13]


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales