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 :

Placement aléatoire


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut Placement aléatoire
    Slt,
    j'ai un tableau a 2 dimensions. Je dois placer dessus N objets a des endroits differents, sans que d'une part il y est 2 objets sur la même case, et d'autres part je ne peux pas placer les objets sur certaines cases, qui sont inappropriés.

    Y'a t-il un algorithme à suivre ? plusieurs ? quelle est la mailleur solution ?

    Merci.

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    je crois que la meilleure solution c'est de choisir tes cases au fur et a mesure, de tester si elles n'ont pas deja ete choisies et si la case et valide, puis de repeter la procedure N fois.

    les solutions plus elaborees vont dependre de la disposition et du nombre de cases interdites. Si elles sont regroupees en blocs, tu pourras simplifier les tests.
    Si il y a vraiement beaucoup plus de cases interdites que de cases libres, tu peux faire une iteration sur les cases du tableau pour compter le nb M de case libres, et choisir un nombre entre 1 et M qui te donnera la place de la prochaine case a placer. Mais a mon avis la premiere methode reste plus simple.

    A+

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    je crois que la meilleure solution c'est de choisir tes cases au fur et a mesure, de tester si elles n'ont pas deja ete choisies et si la case et valide, puis de repeter la procedure N fois.
    Si je fais ca, ca ne sera pas aleatoire car parcourant mon tableau via 2 boucles imbriquées, ca va être quasiment des cases adjacentes.
    Le mieux a mon avis c'est de tirer N cases au pif parmi toutes les cases valides. En faite je prends N case valides parmi l'ensemble de toutes mes cases de mon tableau. Mais je ne vois pas trop comment representer cet ensemble.

  4. #4
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    pour obtenir N indices distinct au hasard, on peut utiliser un algo de ce type (en O(n) ) qui reprend ton idée:

    1-récupèrer l'ensemble des indices des emplacements libre du tableau
    2-effectuer plusieurs permutations aléatoire sur cet ensemble.
    3-récupèrer les N premiers indices
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  5. #5
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    en fait, quand je disais de choisir tes cases au fur et a mesure, c'est de choisir x entre 1 et XMAX, de choisir y entre 1 et YMAX, et de faire les tests sur la case de coordonnees (x,y). Dans ce cas c'est du hasard, et meme si tu passes un tirage ca reste aleatoire.

    Mais tu peux aussi choisir entre 1 et XMAX*YMAX et calculer x et y en fonction de ce nombre, ca revient au meme.

    a+

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    En fait j'ai peut etre trouvé la solution:
    1) Je tire au hasard N
    2) Je crée un tableau dynamique de pointeurs de taille X(X étant le nombre de cases valides)
    3) Je parcours tte mes cases et je les pointes ds mon tableau s'il est son valides.
    4) Je tire un nombre M au hasard compris entre 0 et N-1
    5) Je place mon objet a la case pointé d'indice M
    6) Je permute les pointeurs de mon tableau dynamique entre celui d'indice M et l dernier
    7) j'ffectue 4) de 0 a N-2
    ....

    Merci pour vos réponses

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 149
    Points : 65
    Points
    65
    Par défaut
    Moi, j'utiliserai
    un tableau avec un record
    ex:

    Type
    T_Case =
    Record
    Vide : Boolean;
    Possible : Boolean;
    ...
    End;


    Array[1..100]Of T_case;

    Puis tu fais une boucle
    repeat until
    jusqu'à ce que le nombre tiré au hasard soit ok.
    Une belle fonction contient au plus 7 lignes de code,
    Une belle procédure appelle au plus 7 fonctions,
    Un beau programme est lisible et compréhensible,
    Dans tous les autres cas, une optimisation s'impose.

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Ouais mais imagine un tableau 200*200 avc une 3 cases valides. Ca peut tourner un moment avant de trouver la bonne.

  9. #9
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    Steph82, ton algo est bon à priori et évite la boucle de recherche d'une case valide. Une petite remarque cela dit :

    point 7 : tu dois recommencer le tirage sur [0,N-1] (au point 4, le nombre N-1 n'est peut-être pas sorti) mais le point important est de réaliser suffisament de permutations. Je pense que N permutations suffiront.

    De plus il faut vérifier que N<=X...
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2003
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 235
    Points : 269
    Points
    269
    Par défaut
    Oui, je l'ai pas mis ms cela va de soi, sinon bonjour le poiteur qui se barre du tableau, ou qui replace un objet sur une case déjà defini.
    C'est clair au pire j'ai N permutation, et de plus j'avance dans mon algo, plus le tablau se rétréci pour le tirage (façon de parler, il ne se rétréci pas en mémoire), dc plus c'est rapide .
    Je crois que c'est bon, merci de votre aide.

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

Discussions similaires

  1. Placement aléatoire d'ellipses sur une ligne
    Par Alx958 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 28/05/2013, 08h51
  2. [Problème] Erreur placement aléatoire de boutons
    Par Zahil dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 17/02/2013, 16h01
  3. Placement aléatoire de popup
    Par mumuri dans le forum Visual C++
    Réponses: 0
    Dernier message: 27/05/2010, 17h35
  4. le placement aléatoire
    Par yoran56 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 25/06/2009, 08h39
  5. Réponses: 8
    Dernier message: 09/05/2008, 21h08

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