Nombre minimum de courses pour permettre à un groupe de personnes d'acheter des cadeaux les uns aux autres


10

Nous avons un groupe de personnes. On nous donne une liste de qui doit acheter des cadeaux pour qui au sein du groupe. Chaque personne peut avoir besoin d'acheter / de recevoir un certain nombre de cadeaux, voire aucun. Lors d'un voyage de magasinage, un sous-groupe de personnes se rend ensemble au même magasin et achète des cadeaux à quiconque n'est pas présent dans le magasin. Ils n'achèteront peut-être pas de cadeaux pour quelqu'un d'autre lors du même voyage de shopping, car ce ne serait pas une surprise. Une personne peut faire plusieurs courses. Nous voulons minimiser le nombre total de courses nécessaires pour que chacun achète tous les cadeaux dont il a besoin.n

À titre d'exemple, considérons le cas où il y a 5 personnes, et chacune doit acheter des cadeaux pour chaque autre personne du groupe. Laissez les gens être numérotés de 1 à 5. Cela peut être fait en 4 courses, comme indiqué:

  • Voyage 1: 1, 2, 3 faire du shopping

  • Voyage 2: 1, 4, 5 faire du shopping

  • Voyage 3: 2, 4 faire du shopping

  • Voyage 4: 3, 5 faire du shopping

Comment pourrais-je résoudre ce problème? Il est évident que l'entrée peut être représentée par un graphique orienté, mais je ne sais pas où aller à partir de là. Quelqu'un a soulevé le problème de la couverture biclique , mais bien que similaire, il ne répond pas à cette question.

Nous pouvons considérer l'entrée comme un graphe orienté sur sommets, où le bord signifie que la personne doit acheter un cadeau pour la personne . Le but est de trouver un ensemble de bicliques tels que est minimal et l'ensemble de bords du graphique est un sous-ensemble de . De plus, en étendant la définition des bicliques à un graphe orienté, un biclique ne contient que des arêtes qui àn ( u , v ) u v ( S 1 , T 1 ) , , ( S k , T k ) k E i ( S i × T i ) ( S i , T i ) S i T i G S i × T iE iGn(u,v)uv(S1,T1),,(Sk,Tk)kEi(Si×Ti)(Si,Ti)SiTi. Cela diffère du problème de couverture biclique en ce que nous n'avons pas besoin que chaque biclique soit un sous-graphe de (nous n'avons pas besoin de pour chaque ).GSi×TiEi

Plus précisément, j'accepterai une réponse qui soit:

  • Démontre que ce problème est NP-difficile ou
  • Présente un algorithme de temps polynomial qui répond exactement à cette question (pas d'approximants ni de limites supérieures)

Pour mémoire, je n'ai vu ce problème nulle part, je me pose des questions à ce sujet pour ma propre curiosité.

Réponses:


2

Ce problème est NP-difficile . Pour le montrer, je vais d'abord reformuler ce problème (d'optimisation) en un problème de décision. Ensuite, je reformule ce problème en un problème équivalent, à partir duquel il est assez simple d'obtenir une réduction du problème de coloration, qui est NP-difficile pour tout k 3 .kk3

Une courte formulation du problème est la suivante:

Étant donné personnes et un graphique G qui encode leurs relations «cadeaux», trouvez le nombre minimum de voyages requis pour que tous les cadeaux puissent être achetés sans gâcher aucune surprise.nG

Il s'agit cependant d'un problème d'optimisation. La classe NP est généralement définie pour les problèmes de décision (où la réponse à chaque instance est OUI ou NON). Une variante de décision de ceci est:

Étant donné personnes et un graphe G qui encode leurs relations «cadeaux» et un nombre entier t , est-ce qu'au plus t voyages suffisent pour acheter tous les cadeaux sans gâcher aucune surprise?nGtt

Je définis le problème de trouver un t- multicolore dirigé appropriét d'un graphe comme trouver une fonction multicolore c : V P ( C ) qui est propre , où C est un ensemble de t 'couleurs' ( c'est-à-dire | C | = t ) et P ( C ) est l'ensemble de puissance de C (c'est-à-dire l'ensemble de tous les sous-ensembles de CG=(V,E) c:VP(C)Ct|C|=tP(C)CC(uv)Ec(u)c(v)

Je prétends que le problème de voyage d'achat est équivalent au problème de décider l'existence d'un dirigé -multicoloringt du même graphique .G

Preuve : Si nous avons un bon dirigé -multicoloring pour , où on renomme les couleurs telles que alors considérer la séquence de voyages , où le sommet fait ses courses dans le trajet si et seulement si . Alors, pour chaque arête , on a qu'il existe un trip tel que et , puisque . Par conséquent, les voyagesc G C = { 1 , , t } t T 1 , , T t v T i i c ( v ) ( u v ) E T i u T i v T i c ( u ) c ( v ) T itcGC={1,,t}tT1,,TtvTiic(v)(uv)ETiuTivTic(u)c(v)Ti suffisent pour acheter tous les cadeaux.

Si nous avons une séquence de déclenchements , alors construisons la fonction multicolore sur le jeu de couleurs telle que . Ensuite, pour chaque bord , il existe un voyage tel que et (puisque peut acheter un cadeau pour lors d'un voyage), ce qui signifie que et , donc . c C = { 1 , , t } c ( u ) = { i N | u T i } ( u v ) E T i u T i v T i u v i c ( u ) i c (T1,,TtcC={1,,t}c(u)={iN|uTi}(uv)ETiuTivTiuvic(u)c ( u ) c ( v ) ic(v)c(u)c(v)

Trouver un multicolore dirigé approprié est fondamentalement une reformulation étrange d'un cas spécifique de coloriage. Par conséquent, je peux montrer une réduction de temps polynomiale du problème de coloration : étant donné un graphe non orienté , commencez par transformer ce graphe en graphe orienté , tel que et si et seulement si ou ( en d'autres termes, nous changeons les bords non orientés en deux bords dirigés).k ( ttk(tt/2)G = ( V , E ) V = V ( u v ) E ( u , v ) E ( v , u ) E G=(V,E)G=(V,E)V=V(uv)E(u,v)E(v,u)E

Considérons un plus grand ensemble , tel qu'il n'existe pas , , tel qu'un . L'ensemble de tous les sous-ensembles de de taille , où, est un tel ensemble. Par conséquent, la taille maximale d'un tel sous-ensemble est .a , b K a b a b C t / 2 t = | C | ( tKP(C)a,bKababCt/2t=|C|(tt/2)

Si un multicolore approprié existe pour , alors il existe une coloration appropriée qui n'utilise pas plus de des éléments inégaux de (*) , c'est donc un -coloring valide pour .G ( ttG P(C) ( t(tt/2)P(C)  G(tt/2)G

Si une appropriée existe pour , alors il existe un ensemble , , tel que et il n’existe aucun , , tel qu’un . Donc, a un multicolore dirigé approprié. GKP(C)| C| =t| K| ( t(tt/2)GKP(C)|C|=t a,bKababGt|K|(tt/2)a,bKababGt

Par conséquent, il s'agit d'une réduction de temps polynomiale valide de la au problème d'achat actuel avec voyages, ce qui signifie que le problème d'achat actuel est NP-difficile. Notez que le problème d'achat actuel est NP-complet, car nous pouvons vérifier facilement si une liste donnée d'au plus voyages nous permet d'acheter tous les cadeaux sans gâcher les surprises. tt(tt/2)tt


(*): Si certains multicolores utilisent plus de jeux de couleurs qu'un multicolore maximal 'non-sous-ensemble' , nous pouvons 'renommer' telle sorte que c'est un surensemble de . reste correct, car aucun des éléments de étant adjacent à un élément différent de n'est un problème et aucun des jeux de couleurs n'était adjacent les uns aux autres dans l'original . Ainsi, sans perte de généralité, nous pouvons supposer .CC CC CCC C CCCCCCCCCC

Ensuite, notez que «renommer» en n'importe quel sous-ensemble de ne ruine pas les bords entre les nœuds des jeux de couleurs , car ne contient aucun élément qui soit un sous-ensemble d'un autre. La seule chose qui reste est de s'assurer que les bords entre et ne "ruinent" pas la coloration.CCCCCCCCCCCCCCCC

Considérez la relation sur les jeux de couleurs dans : deux jeux de couleurs et sont connectés si et seulement s'il existe une paire de sommets tels que a-ensemble couleur et couleur ensemble et . Cette relation peut être représentée par le graphe non orienté .CC A BRCCABa A b B ( a , b ) E G = ( CC , R )a,baAbB(a,b)EG=(CC,R)

Tout d'abord, nous pouvons «réduire» en remplaçant toute paire qui n'a pas de bord dans par un seul jeu de couleurs. La coloration reste correcte, car la modification de deux jeux de couleurs qui ne sont pas du tout adjacents dans la même couleur n'introduit pas de bords invalides. Par conséquent, nous avons réduit en un graphique complet.G GCCGG

Cela signifie que si a une quantité inférieure ou égale de jeux de couleurs comme, la coloration requise existe. Sinon, il n'existe pas du tout de multicolore approprié, car est le plus grand ensemble «non-sous-ensemble», nous ne pouvons donc pas colorer cette clique. Par conséquent, la multi-coloration requise existe nécessairement.| C| CG|C|C


Comme le graphe complet sur nœuds est si et seulement si nous avons au moins couleurs, nous avons que personnes peuvent faire du shopping pour les uns les autres en voyages si et seulement si . Cela signifie notamment que, si , effectuer seulement déplacements est suffisant. S'il y a moins de cadeaux à acheter, plus de voyages ne seront pas nécessaires, c'est donc une limite supérieure générale pour chaque solution.K n n n t ( tnKnnntn1287016(tt/2)nn1287016


Ci-dessous, ma «réponse» précédente, qui donne un algorithme heuristique qui ne garantit pas d'obtenir l'optimum, mais peut être calculé en temps polynomial.

Une autre façon de formuler ce problème est de trouver un des graphes bipartis sur les partitions pour un graphe orienté avec nœuds , de sorte que la quantité de partitions (c.-à-d. voyages), ici , est minimale.( S i , T i ) G n mC={(S1,T1),,(Sm,Tm)}(Si,Ti)Gnm

Tout d'abord, quelques observations, provenant en partie d'autres réponses:

  • La stratégie gourmande, où nous choisissons un avec un graphe bipartite où la quantité d'arêtes en commun avec est maximale, ne conduit pas à une solution optimale (Un contre-exemple fort est le graphe complet à nœuds, où cette stratégie échoue, quel que soit le graphique bipartite maximum choisi.).G 6(Si,Ti)G6
  • La stratégie gourmande n'est pas optimale pour les graphes acycliques arbitraires, considérez le graphe suivant: dur-acyclique Pour et le graphe bipartite supprime arêtes, mais seulement est optimal.S i = { 1 , 3 , 6 } 4 { 3 , 5 , 6 }Si={3,5,6}Si={1,3,6}4{3,5,6}
  • Tout algorithme gourmand (optimal) ne peut pas préférer la taille de la partition choisie à la quantité de cycles (de toute taille) «supprimée» par la partition. Pour voir cela, considérons le graphique avec nœuds, où il y a un cycle de nœuds et chaque nœud dans le cycle a fronts sortants supplémentaires vers nœuds supplémentaires , qui n'ont pas de fronts sortants (voir la figure ci-dessous pour un exemple où ). Un choix gourmand qui préfère maximiser la quantité d'arêtes sur des cycles de longueur enverra tous les sommets du cycle lors du premier déclenchement. Ceci n'est pas optimal, car cela ne supprime aucun bord du cycle et ignore simplementn 2 2 A , B n = 4 n A , B A , Bn+2n22A,Bn=4nA,Bet la suppression de tous les bords du cycle supprime tous les bords vers ainsi. Donc, tout choix gourmand qui préfère la taille de la partition à la suppression d'un cycle n'est pas optimal.A,B
    4 cycles

Sur la base de ces observations, je propose le choix gourmand suivant: Pick tel que la quantité de cycles que ce voyage «supprime» de soit maximale et en cas de liens, choisissez une partition avec un chevauchement maximum avec parmi eux (c'est-à-dire regarder les bords et non les cycles).G G(Si,Ti)GG

Étant donné que cet algorithme n'est pas différent de la stratégie gourmande «de base» sur les graphiques acycliques (en supprimant une quantité maximale de bords à chaque trajet), cet algorithme gourmand n'est donc pas optimal. Cependant, l'intuition de supprimer les cycles a toujours du sens et constitue une amélioration par rapport à la stratégie gourmande de base, donc cela pourrait être une heuristique décente.


1
Vous dites "Si un multicolore existe pour , alors cette coloration n'utilise pas plus de des éléments inégaux de ". Cette affirmation est fausse. Dans l'exemple trivial de 3 nœuds déconnectés il existe un multicolore , où . Il s'agit d'un 2-multicolore approprié qui utilise plus de éléments distincts. Vouliez-vous dire "Si un multicolore existe pour , alors une telle coloration n'utilise pas plus deG ( ttG P(C)a,b,cv(tt/2)P(C)a,b,cv( 2v(a)={1},v(b)={2},v(c)={1,2}tG ( t(21)=2tG P(C)(tt/2)éléments inégaux de "?P(C)
Riley

En effet, c'est ce que je voulais dire. Une autre façon de le regarder est que si elle est un minimum t-multicoloring (ie ce est pas -multicolorable), il utilise exactement éléments . De toute évidence, l'exemple que vous donnez n'est pas un contre-exemple de la reformulation correcte. ( t - 1 ) ( tG(t1)(tt/2)
Lézard discret

Non attends. Il n'utilise pas exactement les éléments , mais tout au plus. (tt/2)
Lézard discret

Je peux comprendre en quoi cette déclaration révisée a un sens intuitif, mais pouvez-vous le prouver? Peut-être pourriez-vous en quelque sorte montrer que tout multicolore peut être "amélioré" de sorte que tous les multicolores soient des éléments d'un ensemble répondant à l'exigence de taille, et qu'il n'existe pas de tel qu'un . a , b K a bKa,bKab
Riley

@Riley Je ne sais pas ce que tu veux dire, quelle déclaration veux-tu que j'élabore? J'ai mis à jour ma réponse de manière à ce qu'elle indique ce que votre commentaire d'origine suggérait. Le reste de la preuve n'est pas affecté. En ce qui concerne la relation entre le problème des couleurs multiples et d'origine, l'idée clé est que le multicolore peut être considéré comme n'ayant pas de «sous-ensembles» adjacents. Étant donné que le plus grand sous-ensemble «non par paire» de a la taille , nous pourrions aussi bien considérer cet ensemble comme un jeu de couleurs et nous obtenons le problème de coloration. ( tP(C)(tt/2)
Lézard discret

2

Je peux voir comment réduire ce problème à Graph Coloring , qui vous donne un outil pour résoudre le problème (pour les petites instances!), Mais pas encore comment réduire dans l'autre sens (ce qui établirait la dureté NP).

L'idée de base est de construire un graphique qui contient un sommet pour chaque achat et un bord entre deux achats qui ne peuvent pas se produire lors du même voyage; nous cherchons ensuite à regrouper les achats dans le plus petit nombre possible de groupes («voyages»), de sorte qu'il n'y ait pas deux achats dans le même groupe en conflit. Plus précisément, si est le graphique dirigé original dans lequel un bord indique que la personne doit acheter à la personne un cadeau, alors créez un graphique non dirigé dans lequel il y a un sommet pour chaque bord dans et un bord (non dirigé) chaque foisu v u v H = ( X , Y ) x u v u v G x u v x v w u v v w G v w v H HG=(V,E)uvuvH=(X,Y)xuvuvGxuvxvwuv et sont tous deux des bords (dirigés) en (si achète à certains un cadeau pendant un voyage, alors personne ne peut acheter un cadeau pendant ce même voyage). Une coloration de sommet de est une partition des achats nécessaires (sommets en ) en voyages (couleurs) qui n'entrent pas en conflit (partagent un bord), et une coloration de sommet de taille minimale prend le moins de voyages possible.vwGvwvHH

Il pourrait être possible d'aller dans l'autre sens (réduire la coloration du graphe, ou un autre problème NP-difficile, à votre problème, et ainsi établir sa dureté NP), en adaptant une réduction de 3SAT à la coloration du graphe (comme, par exemple, détaillée à la page 10 des notes de Jeff Erickson ), mais je n'ai pas essayé moi-même.


Cette réponse est brillante; c'est juste ce que je cherchais. Dans l'analyse de la complexité temporelle de cet algorithme, il y a au plus sommets (présents) et arêtes. Lorsque je recherche un algorithme sur la coloration des graphes, je ne trouve que pour un graphe à sommets. Existe-t-il un algorithme plus efficace dans ce cas car il existe une borne supérieure polynomiale sur le nombre d'arêtes? ( 2 n - 3 ) ( n 2 - n )n2n O(2nn)n(2n3)(n2n)2O(2nn)n
Riley

1
@Riley Probablement pas, décidant de colorabilité, pour un graphique avec un degré maximum est déjà NP-difficile. Voir ces [notes de cours] (www-sop.inria.fr/members/Frederic.Havet/Cours/coloration.pdf) pour une réduction de 3-SAT à des graphiques avec un degré maximum 3.k 3 3kk33
Lézard discret

@ Lézard discret: où dans ces notes de cours donnent-ils une telle réduction?

Pourquoi cette réponse est-elle acceptée? Il ne montre ni la dureté NP ni un algorithme «le plus optimal» ou même un algorithme efficace, pour autant que je puisse voir.
Lézard discret

1
@Discretelizard OK. Je ne pensais pas que la question impliquait que je cherchais un algorithme de temps P, surtout compte tenu de la possibilité que ce problème soit NP-difficile. Mais je peux rendre ce point plus explicite dans la question initiale. Je vais marquer cette réponse comme correcte et ajouter une prime de 100 points (il s'avère que la seconde doit être de 100 si sur la même question, mais je suis prêt à l'offrir parce que ce ne sont que des points Internet imaginaires, non? :)) à nouveau à tous ceux qui peuvent montrer que ce problème est NP-difficile, OU trouver un algorithme de temps polynomial qui le résout.
Riley

0

C'est le genre de problème où je serais très inquiet si mon patron me demandait de mettre en œuvre un algorithme qui est garanti pour trouver une solution optimale dans un délai raisonnable.

Pour trouver une solution pas nécessairement optimale: compte tenu de tout ensemble de personnes et de cadeaux à acheter, nous pouvons compter le nombre de cadeaux qu'un groupe de personnes peut acheter lors d'un voyage de shopping. Commencez donc avec un groupe vide (qui peut acheter 0 cadeaux). Pour chaque personne ne faisant pas partie du groupe, déterminez combien de cadeaux peuvent être achetés si cette personne est ajoutée au groupe. S'il y a une personne que nous pouvons ajouter sans diminuer le nombre de cadeaux, choisissez au hasard l'une de celles qui augmentent le nombre de cadeaux achetés du montant maximum, jusqu'à ce que l'ajout d'une personne réduise le nombre de cadeaux achetés. Ensuite, faites ce shopping et recommencez jusqu'à ce que tous les cadeaux soient achetés.

Je répéterais plusieurs fois, en choisissant différentes personnes "au hasard" au cas où cela trouverait une meilleure solution.

Dans l'exemple, cinq personnes devant s'acheter un cadeau, cela trouve une solution en quatre voyages, ce qui est optimal; si nous n’ajoutions pas de personnes à un voyage qui laissent le nombre de cadeaux inchangé sans l’améliorer, nous aurions cinq voyages. Et 6 personnes ont besoin de 5 voyages.


En d'autres termes, vous choisissez goulûment des sorties shopping en fonction du nombre de cadeaux à acheter. Pourriez-vous prouver que cette procédure se traduit nécessairement par le nombre minimum possible de courses shopping? Si c'est le cas, vous avez mal traité l'exemple de 6 personnes. 6 personnes n'ont besoin que de 4 courses: . {{1,2,3},{1,4,5},{2,4,6},{3,5,6}}
Riley

Absolument aucune preuve. Un algorithme gourmand + faire des choix aléatoires différents améliorerait un peu vos chances mais ne ferait pas 4 voyages.
gnasher729

J'ai testé l'affirmation selon laquelle le problème est gourmand et il échoue. Même si vous testez tous les achats possibles plutôt que d'ajouter des personnes une par une, vous obtenez toujours 5 voyages: . L'approche gourmande voudrait que le deuxième voyage d'achat achète 9 cadeaux, mais dans la solution optimale, le deuxième voyage d'achat achète 8 cadeaux (en supposant qu'il se passe dans l'ordre indiqué ci-dessus). {{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}
Riley

En fait, l'approche gourmande ne résout même pas le cas de 5 personnes en 4 courses: . {{1,2},{3,4},{5},{1,3},{2,4}}
Riley

-1

Supposons que vous commandez les personnes en fonction de qui elles reçoivent de (parent) et à qui elles donnent (enfant). Puisque tout le monde donne un cadeau et en reçoit un, la fonction parent-enfant est un à un.

Vous ne voulez jamais mettre le parent et l'enfant dans le même groupe. Vous commencez avec une personne aléatoire et tout le monde en conséquence, donc , etc. Vous mettez tout dans un groupe, et tout dans un autre groupe. Pour la dernière personne , vous ne voulez donc pas que cette personne soit dans le même groupe que . Si est pair, ce n'est pas un problème. Sinon, vous avez besoin d'un groupe supplémentaire, qui peut être juste seul, dans le cas le plus simple. c h i l d ( p 1 ) = p 2 p o d d p e v e n p n = p a r e n t ( p 1 ) p 1 n p np1child(p1)=p2poddpevenpn=parent(p1)p1npn

Cet algorithme suppose que tout le monde est connecté. Mais cela n'a pas besoin d'être le cas. S'il y a plusieurs cycles déconnectés, en d'autres termes, si à un moment donné, où , alors vous terminez ce cercle et commencez par un nouveau, en suivant le même algorithme. Tant que vous ne fusionnez pas les cotes et les événements d'un même cycle, vous pouvez fusionner les cycles déconnectés.k ! = npk=parent(p1)k!=n

Cet algorithme se termine avec au plus 2 tours (pour pair ) et 3 tours (pour impair ).nnn


Il semble que cette approche ne résout le problème que dans le cas où chacun donne un cadeau et en reçoit un, c'est-à-dire où le graphique est une permutation. Je ne suis pas sûr que la question visait à poser uniquement sur ce cas spécial - voyons ce que le PO a à dire à ce sujet.
DW

C'est vrai, ma solution est pour un sous-cas du problème où . i,fan_in(vi)=fan_out(vi)=1
ilke444

Oui, je ne demandais pas spécifiquement de permutations. Veuillez consulter la question mise à jour où je clarifie certaines choses.
Riley
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.