3 votes

Stratégie algorithmique pour la sélection du nombre minimum de paniers

Exemple : Vous avez 4 paniers nommés P,Q,R,S. Ces paniers contiennent 4 articles nommés A,B,C,D.

La composition des paniers est la suivante PIC

-- A B C D

P 6 4 0 7

Q 6 4 1 1

R 4 6 3 6

S 4 6 2 3

Le panier P comporte 6A, 4B, aucun C et 7D.

Supposons que vous receviez les demandes suivantes : Vous devez distribuer 10A, 10B, 3C et 8D.

Le nombre minimum de paniers requis pour traiter la demande est de 2 (P,R).

Comment puis-je atteindre cet objectif de manière algorithmique ? Quel algo devrais-je utiliser, quelle devrait être la stratégie ?

2voto

MBo Points 11630

Créez un graphe orienté (réseau) comme celui-ci :

enter image description here

La source possède des arêtes dont le coût est égal à 1 et dont la capacité est égale à une grande valeur vers les nœuds P, Q, R, S.

P a des arêtes de coût=0 et de capacité 6,4,7 vers A,B,D, de même pour les autres paniers.

A,B,C,D ont des arêtes avec un coût=0 et une capacité=10,10,3,8 pour couler.

Résoudre maintenant Problème de flux à coût minimal pour un flux de 10+10+3+8.

0voto

JollyRoger Points 337

Il existe un algorithme qui consiste à placer les reines à des endroits différents sur l'échiquier et la règle est qu'elles ne doivent pas se menacer l'une l'autre. Pour moi, votre problème ressemble à celui-ci. Vous pouvez créer une structure récursive comme ci-dessous :

Trouver les premiers rangs qui répondent aux exigences : Dans votre exemple P et Q (parce que 6+6 > 10) Vous traitez donc la première colonne, puis passez à la deuxième et vérifiez si la capacité des paniers P et Q peut répondre à l'exigence : Ce n'est pas le cas dans votre exemple (parce que 4+4 < 10).

Revenez à la première étape (appelez la même fonction récursive pour la première colonne en augmentant le pointeur qui affichait B auparavant) et trouvez les deuxièmes lignes qui répondent aux exigences. P et R pour votre exemple. (6+4 = 10) Faites ensuite la deuxième étape pour P et R.

L'idée est donc de trouver, pour chaque colonne, les paniers qui répondent aux exigences, puis de passer à la deuxième colonne. Si vous pouvez trouver les rangées qui répondent aux exigences, passez à la troisième. Si vous ne pouvez pas trouver celles de la troisième étape, revenez à la deuxième étape et si aucune des combinaisons de lignes que vous avez choisies à la deuxième étape ne répond aux exigences, passez à la première et répétez l'opération.

Je n'ai pas pu vous donner un pseudocode correct mais je pense que l'idée principale est claire et qu'elle n'est pas si difficile à mettre en œuvre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X