Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : [Tous compilos]Optimisation de listes chaînées ( enveloppe convexe ) [ Archives / Maths & Algorithmes ] (GoldenEye)

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é dans : points, liste, courant, ptrcourant, lptr


Répondre à ce message

Sujets en rapport avec ce message

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 liste chainée double générique [ par issoux ] Bonsoir ,  j'ai un probleme dans mon code :  Code: #include <stdlib.h& [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 Trier une liste chainée ? [ par tintin72 ] Bonjour,Je voudrais connaitre le principe du trie dans une liste chainée.Je voudrais par ex trier une liste chainée qui existe déjà et qui contient de QuickSort : liste chaînée [ par vegeta07 ] Salut, Je souhaite réaliser le tri QuickSort (récursif) sur une liste simplement chaînée. Mais j'ai un probleme sur la recursivité je pense. Si quel rechercher un mot dans une liste [ par akwell1 ] salut a tous,j'ai creer un tableau contenant des mots ( 9 lettres maximum)je voudrais que lorsque l'utilisateur rentre une sequence de 9 lettre aléato Données dans DLL accessibles à divers processus (sous dev-C++) [ par graig2 ] Salut à tous, Voici ma toute première question sur ce forum, merci pour votre aide : Est ce qu'une DLL appelée par divers processus distincts peut c


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,23 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.