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 :

Comparer deux tableaux : l'algorithme simple est impossible à coder...


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 49
    Par défaut Comparer deux tableaux : l'algorithme simple est impossible à coder...
    Bonjour, jamais de ma vie je ne m'étais autant torturé pour un algo... J'essaye de coder ceci en python :

    X1 = LISTE1, X2 = LISTE2, = QUANTITÉ, P = PRIX

    X1 (J’achète ici)
    Q | P
    30 | 0.116
    10 | 0.118
    20 | 0.128
    05 | 0.134
    10 | 0.143
    40 | 0.151
    05 | 0.159

    10 | 0.170

    X2 (Je vends ici)
    Q | P
    20 | 0.156
    05 | 0.148
    01 | 0.142
    15 | 0.139
    20 | 0.123
    40 | 0.119
    
10 | 0.114
    05 | 0.110

    30 | 0.102

    Voici l'algorithme.
    Dans X1, je peux acheter une quantité * un prix.
    Dans X2, je peux vendre une quantité * un prix.

    Déterminer la quantité totale OPTIMALE à acheter dans X1 qui peut être vendue plus cher dans X2.
    Je suis depuis 3 heures là dessus, mon esprit à fait un blue screen. J'ai voulu partager le début de ma réflexion, mais c'est humiliant... Intuitivement, j'y arrive, et en même temps, dans l'algo, impossible de mettre tout ça dans une boucle récursive... Je sature.

    Perso je pensais à procéder de haut en bas, dans x1, comparer avec les lignes de x2 les prix et quantités... Mais il y a tellement de retenues de quantité, de différences (x1[n].q - x2[n].q ou x2[n].q - x1[n].q), je sature complètement... Auriez vous une idée ? une méthode ? Une librairie qui existe déjà.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 201
    Par défaut
    Voici une version, pas en Python parce qu'il est tard et que je ne suis pas très à l'aise en Python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    uneOffre est une Structure
    	nQtt est un entier 
    	nMontant est un entier
    FIN
    tbAchat est un tableau de 0 uneOffre
    tbVente est un tableau de 0 uneOffre
     
    lire_data()
     
    Encore est un booléen
    rBenefice est un réel
    Encore = Vrai
    qtt est un entier 
    qacha est uneOffre
    qvent est uneOffre
    TANTQUE Encore = Vrai
    	qacha = tbAchat[1]
    	qvent = tbVente[1]
    	SI qacha.nMontant < qvent.nMontant ALORS 
    		// On va faire une transaction
    		qtt = Min ( qacha.nQtt, qvent.nQtt)
    		rBenefice += qtt * ( qvent.nMontant-qacha.nMontant)
    		Trace  ( " transaction , qtt=", qtt , "   px_achat=" , qacha.nMontant,  "   px_vente=", qvent.nMontant )
    		SI qacha.nQtt= qtt ALORS
    			TableauSupprime(tbAchat,1)
    		SINON
    			tbAchat[1].nQtt = tbAchat[1].nQtt - qtt
    		FIN
    		SI qvent.nQtt= qtt ALORS
    			TableauSupprime(tbVente,1)
    		SINON
    			tbVente[1].nQtt = tbVente[1].nQtt - qtt
    		FIN
    	SINON
    		Encore = Faux 
    	FIN
    FIN
    Trace ( "bénéfice= ", rBenefice )
    Résultat :
    transaction , qtt= 20 px_achat= 116 px_vente= 156
    transaction , qtt= 5 px_achat= 116 px_vente= 148
    transaction , qtt= 1 px_achat= 116 px_vente= 142
    transaction , qtt= 4 px_achat= 116 px_vente= 139
    transaction , qtt= 10 px_achat= 118 px_vente= 139
    transaction , qtt= 1 px_achat= 128 px_vente= 139
    bénéfice= 1299

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 49
    Par défaut
    Merci, impressionnant. Je ne comprends absoluement rien à ce langage et je ne sais même pas ce qu'il est... Je vais essayer de le traduire en python. Félicitation... Je prends conscience avec douleur des lacunes de mon esprit. J'ai envie de pleurer... Tant de créativité et d'idées bridées et avortées par la latence de mon cerveau... J'ai envie de pleurer.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 49
    Par défaut
    FORMIDABLE, ça fonctionne ! MERCI MERCI MERCI MERCI MERCI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    	def combien_acheter(self):
    		tb_achat = [[30,0.116],[10,0.118],[20,0.128],[5,0.134],[10,0.143],[40,0.151]]
    		tb_vente = [[20,0.156],[5,0.148],[1,0.142],[15,0.139],[20,0.123],[40,0.119]]
     
    		print(tb_achat," - - - ",tb_vente)
     
    		monBool = True
    		while monBool:
    			time.sleep(1)
    			q_achat = tb_achat[0]
    			q_vente = tb_vente[0]
     
    			if q_achat[1] < q_vente[1]:
    			#	print("q_achat :",q_achat[1],"   q_vente :",q_vente[1])
    				qtt = min(q_achat[0],q_vente[0])
    				print("Transaction, qtt==",qtt,"   px_achat=",q_achat[1],"   px_vente", q_vente[1])
     
    				if q_achat[0] == qtt:
    					del tb_achat[0]
    				else:
    					#tbAchat[1].nQtt = tbAchat[1].nQtt - qtt
    					tb_achat[0][0] = tb_achat[0][0] - qtt
    				if q_vente[0] == qtt:
    					del tb_vente[0]
    				else:
    					#tbVente[1].nQtt = tbVente[1].nQtt - qtt
    					tb_vente[0][0] = tb_vente[0][0] - qtt
    			else:
    				monBool = False

    EDIT : MERCI MERCI MERCI, cette fonction est parfaite. Soyez béni !!!!

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

Discussions similaires

  1. [Tableaux] Comparer deux tableaux
    Par popy67 dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2008, 07h22
  2. Comparer deux tableaux
    Par gefrey54 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 12/09/2007, 10h58
  3. comparer deux objets pas si simple ?
    Par StIcK dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2006, 20h55
  4. comparer deux tableaux
    Par djibril dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 15h26

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