défragmation d'un entier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : défragmation d'un entier

Re: défragmation d'un entier

par macgawel » 08 févr. 2010, 14:22

Lors de la réservation d’un hôtel, selon le nombre de participants, le moteur de réservation doit proposer à l’internaute toutes les répartitions possibles.
Dans ce cas, c'est relativement simple, vu qu'il faut sortir la liste exhaustive des possibilités.
Par contre on peut vite arriver à un nombre de solutions (et donc à un temps de calcul) important...

Exemple :
$Achambres = Tableau des chambres, capacité=>nombre
$Achambres = (1 => 2, 2 => 4; 3 => 4, 4 => 3)
$demande = nombre de places demandées.
$demande = 21

Comment je ferais :
1. Calculer le nombre maximal de chambres de la plus grande capacité que je peux utiliser.
$tmp = $demande DIV 4 = 5 //21 / 4 = 5 reste 1;
2. Prendre le minimum entre cette valeur et le nombre de chambres
$max_chambres[4] = min( $tmp, $Achambres(4)) // 3;
3. En prenant de $max_chambres[4] à 0 chambres de 4, je refais ce calcul pour $Achambres = (1 => 7, 2 => 4; 3 => 3) et $demande = $demande - ($nb_chambres_prises*capacité).

En gros, avec l'exemple :

Code : Tout sélectionner

Pour 21 personnes, je peux avoir maximum 3 chambres de 4 (vu que nombre de chambres en stock = 3 < 21 / 4 = 5) Je prends 3 chambres de 4, il me reste 9 personnes à caser. Pour 9 personnes, je peux avoir maximum 3 chambres de 3 (vu que nombre de chambres en stock = 4 > 9 / 3 = 3) Je prends 3 chambres de 3, il me reste 0 personne => Fin, Solution Je prends 2 chambres de 3, il me reste 3 personnes. Pour 3 personnes, je peux avoir maximum 1 chambre de 2 (vu que nombre de chambres en stock = 4 > 3 / 2 = 1) Je prends 1 chambre de 2, il me reste 1 personnes. Pour 1 personne, je peux avoir maximum 1 chambre de 1 Je prends une chambre de 1, il me reste 0 personne => Fin, Solution Je prends 0 chambre de 2, il me reste 3 personnes. Pour 3 personnes, je peux avoir maximum 2 chambres de 1 (vu qu'il n'en reste que 2) Je prends 2 chambres de 1, il me reste 1 personne => Fin, Pas de solution Je prends 1 chambre de 1, il me reste 2 personnes => Fin, Pas de solution Je prends 0 chambre de 1, il me reste 3 personnes => Fin, Pas de solution Je prends 1 chambre de 3 ... Je prends 0 chambre de 3 ... Je prends 2 chambres de 4 ...
Avec un algorithme récursif, ça devrait tourner.

Re: défragmation d'un entier

par jojo1000 » 05 févr. 2010, 19:00

il faut d'abord établir le nombre de possibilités:
soit y le nombre de possibilités,
y = x si n1 existe. la chance c'est que n1 existe toujours.
Tu as donc toujours au max X possibilités.

tout ça pour dire que ton algo n'est pas insurmontable, j'aurai aimé t'aidé plus mais là, j'ai fini mon stage et je dis aurevoir à PHP

défragmation d'un entier

par aquaa » 05 févr. 2010, 13:20

Salut tout le monde .

Je galère depuis des jours en essayant de faire un petit algorithme de réservation qui donne des propositions de reservation selon les types d'hébergement existant; ok je m'explique.

La problématique qui se pose est la suivante :
Lors de la réservation d’un hôtel, selon le nombre de participants, le moteur de réservation doit proposer à l’internaute toutes les répartitions possibles.

Exemple : un hôtel contient 2 types de logement
Type logement 1 : chambre single : maximum 1 personne
Type logement 1 : chambre double : maximum 2 personnes

L’internaute réserve pour 3 personnes :

Le moteur de réservation doit lui indiquer les répartitions suivantes :
Proposition 1 : 1 double + 1 single
Proposition 2 : 3 single

Alors pour un hôtel contenant (n) types de logement (type 1, type 2, …type n) caractérisés par les capacités (C1, C2,…..Cn)

L’internaute demande une réservation dans cet hôtel pour X personnes.

j'ai essai les algo recursives, aussi un pru de proba mais toujours rien

En faite j'ai trouvé un chemin http://fr.wikipedia.org/wiki/Fonctio..._d%27un_entier mais je vois pas comment le mettre en œuvre

Si vous avez des idée, j'en serai reconnaissant

Merci d'avance .