Número mínimo de viajes de compras para que un grupo de personas se compre regalos entre ellos


10

Tenemos un grupo de n personas. Nos dan una lista de quién debe comprar regalos para quién dentro del grupo. Es posible que cada persona necesite comprar / recibir cualquier cantidad de regalos, o posiblemente ninguno. En un viaje de compras, un subconjunto de personas viaja juntas a la misma tienda y compra regalos para cualquier persona que no esté presente en la tienda. Es posible que no compren regalos para otra persona en el mismo viaje de compras porque no sería una sorpresa. Una persona puede realizar múltiples viajes de compras. Queremos minimizar el número total de viajes de compras necesarios para que todos compren todos los regalos que necesitan.

Como ejemplo, considere el caso donde hay 5 personas, y cada uno debe comprar regalos para cada otra persona en el grupo. Deje que las personas se numeren del 1 al 5. Esto se puede hacer en 4 viajes de compras, como se muestra a continuación:

  • Viaje 1: 1, 2, 3 ir de compras

  • Viaje 2: 1, 4, 5 ir de compras

  • Viaje 3: 2, 4 ir de compras

  • Viaje 4: 3, 5 ir de compras

¿Cómo haría para resolver este problema? Es obvio que la entrada puede ser representada por un gráfico dirigido, pero no sé a dónde ir desde allí. Alguien mencionó el problema de la cubierta biclique , pero si bien es similar, no responde a esta pregunta.

Podemos pensar en la entrada como un grafo dirigido en n vértices, donde el borde ( u , v ) significa que esa persona u debe comprar un regalo para persona v . El objetivo es encontrar un conjunto de bicliques ( S 1 , T 1 ) , ... , ( S k , T k ) de modo que k sea ​​mínimo y el conjunto de bordes E del gráfico sea un subconjunto de i ( S i × T yoGn(u,v)uv(S1,T1),,(Sk,Tk)kE . Además, al extender la definición de bicliques a un gráfico dirigido, un biclique ( S i , T i ) solo contiene aristas que mapean S i a T i . Esto difiere del problema de la cubierta biclique en que no requerimos que cada biclique sea un subgrafo de G (no requerimos S i × T iE para cada i ).i(Si×Ti)(Si,Ti)SiTiGSi×TiEi

Específicamente, aceptaré una respuesta que:

  • Demuestra que este problema es NP-hard o
  • Presenta un algoritmo de tiempo polinómico que responde a esta pregunta exactamente (sin aproximaciones ni límites superiores)

Para el registro, no vi este problema en ninguna parte, solo me pregunto por mi propia curiosidad.

Respuestas:


2

Este problema es NP-hard . Para mostrar esto, primero reformularé este problema (de optimización) en un problema de decisión. Luego, reformulo ese problema en uno equivalente, a partir del cual es bastante simple obtener una reducción del problema de coloración , que es NP-difícil para cualquier k 3 .kk3

Una breve formulación del problema es la siguiente:

Dadas personas y un gráfico G que codifica sus relaciones de 'obsequio', encuentre la cantidad mínima de viajes necesarios para que todos los obsequios se puedan comprar sin arruinar ninguna sorpresa.nG

Sin embargo, este es un problema de optimización. La clase NP generalmente se define para problemas de decisión (donde la respuesta a cada instancia es SÍ o NO). Una variante de decisión de esto es:

Dadas personas y un gráfico G que codifica sus relaciones de 'obsequio' y un número entero t , ¿es suficiente a lo sumo t viajes para comprar todos los regalos sin arruinar ninguna sorpresa?nGtt

Defino el problema de encontrar un t -multicoloring dirigido apropiadot de algún gráfico como encontrar una función multicolor c : V P ( C ) que es adecuada , donde C es un conjunto de t 'colores' ( es decir, | C | = t ) y P ( C ) es el conjunto de potencia de C (es decir, el conjunto de todos los subconjuntos de CG=(V,E) c:VP(C)Ct|C|=tP(C)CC) Una función multicolor es adecuada si y solo si para cada arista , tenemos que c ( u ) c ( v ) .(uv)Ec(u)c(v)

Yo reclamo que el problema viaje de compras es equivalente al problema de decidir la existencia de una dirigida -multicoloringt de la misma gráfica .G

Prueba : si tenemos una dirigida adecuada -multicoloreando c para G , donde cambiamos el nombre de los colores de tal manera que C = { 1 , ... , t } entonces considere la secuencia de t dispara T 1 , ... , T t , donde un vértice v va de compras en el viaje T i si y solo si i c ( v ) . Entonces, para cada borde ( u v ) EtcGC={1,,t}tT1,,TtvTiic(v)(uv)E, tenemos que existe un viaje tal que u T i y v T i , ya que c ( u ) c ( v ) . Por lo tanto, los viajes de T i son suficientes para comprar todos los regalos.TiuTivTic(u)c(v)Ti

Si tenemos una secuencia de viajes , entonces construimos la función multicolorT1,,Tt en el conjunto de colores C = { 1 , ... , t } tal que c ( u ) = { i N | u T i } . Entonces, para cada borde ( u v ) E , existe un viaje T i tal que u cC={1,,t}c(u)={iN|uTi}(uv)ETi y v T i (ya que u puede comprar un regalo para v en algún viaje), lo que significa que i C ( T ) y i c ( v ) , por lo que c ( u ) c ( v ) . uTivTiuvic(u)ic(v)c(u)c(v)

Encontrar un -multicoloring dirigido adecuado es básicamente una reformulación extraña de un caso específico de k -coloring. Por lo tanto, puedo mostrar una reducción de tiempo polinomial desde ( ttk problema de coloración: dado un gráfico no dirigidoG=((tt/2) , primero transforme este gráfico en el gráfico dirigido G = ( V , E ) , de modo que V = V y ( u v ) E si y solo si ( u , v ) E o ( v , uG=(V,E)G=(V,E)V=V(uv)E(u,v)E (en otras palabras, cambiamos los bordes no dirigidos en dos bordes dirigidos).(v,u)E

Considere un conjunto más grande KP(C) , tal que no exista , a b , tal que a b . El conjunto de todos los subconjuntos de C de tamaño t / 2 , donde t = | C | , es tal conjunto. Por lo tanto, el tamaño máximo de dicho subconjunto es ( ta,bKababCt/2t=|C| .(tt/2)

Si existe una -multicoloring adecuada para G , entonces existe una coloración adecuada que no utiliza más de ( ttG elementos desiguales deP(C)(*), por lo que este es un valor válido ( t(tt/2)P(C)  -color paraG'.(tt/2)G

Si es apropiado -colores existe paraG, entonces existe un conjuntoKP(C),| C| =t, de modo que| K| ( t(tt/2)GKP(C)|C|=t y no existe ningunaa,bK,ab, tal queab. Entonces,Gtiene unt-multicoloringdirigidoapropiado.|K|(tt/2)a,bKababGt

Por lo tanto, esta es una reducción de tiempo polinomial válida de coloración para el problema de compra actual conttrips, lo que significa que el problema de compra actual es NP-hard. Tenga en cuenta que el problema actual de la compra está NP-completo, ya que podemos comprobar fácilmente si una lista dada de a lo sumotviajes nos permite comprar todos los regalos sin arruinar sorpresas.(tt/2)tt


(*): Si alguna multi-colorear utiliza más Color: define que una máxima 'no subconjunto' multi-colorear C *CC , podemos 'renombrar' manera que sea un superconjunto de C . C sigue siendo apropiado, ya que ninguno de los elementos de C ∗ que son adyacentes a un elemento diferente de C es un problema y ninguno de los conjuntos de colores eran adyacentes entre sí en el C original . Por lo tanto, sin pérdida de generalidad, podemos suponer C *C .CCCCCCCC

Luego, tenga en cuenta que 'renombrar' a cualquier subconjunto de C no arruina los bordes entre los nodos de los conjuntos de colores CC , ya que C no contiene elementos que sean un subconjunto de otro. Lo único que queda es asegurarse de que los bordes entre CC y C no 'arruinen' el color.CCCCCCCCC

Considere la siguiente relación en los conjuntos de colores en CC : dos conjuntos de colores A y B están conectados si y solo si existe un par de vértices a ,RCCAB tal que a tenga el conjunto de colores A y b color- conjunto B y ( un , b ) e . Esta relación se puede representar mediante el gráfico no dirigido G = ( CC , R )a,baAbB(a,b)EG=(CC,R).

Primero, podemos 'reducir' reemplazando cualquier par que no tenga una arista en G por un solo conjunto de colores. La coloración sigue siendo adecuada, ya que cambiar dos conjuntos de colores que no son adyacentes en absoluto en el mismo color no introduce bordes no válidos. Como resultado, hemos reducido G a un gráfico completo.CCGG

Esto significa que si tiene una cantidad menor o igual de conjuntos de colores que | C| , existe el color requerido. De lo contrario, no existe una multicolores adecuada, ya que C es un conjunto 'no subconjunto' más grande, por lo que no podemos colorear esta camarilla. Por lo tanto, el color múltiple requerido necesariamente existe.G|C|C


Como el gráfico completo en nodos K n puede colorear si y solo si tenemos al menos n colores, tenemos que n personas pueden ir de compras unos a otros en t viajes si y solo si ( tnKnnnt. Esto significa en particular que, sin12870, hacer solo16viajes es suficiente. Si hay menos regalos para comprar, no se necesitarán más viajes, por lo que este es un límite superior general en cada solución.(tt/2)nn1287016


A continuación se encuentra mi 'respuesta' anterior, que proporciona un algoritmo heurístico que no garantiza obtener el óptimo, pero puede calcularse en tiempo polinómico.

Otra forma de formular este problema es encontrar una cobertura de gráficos bipartitos en las particiones ( S i , T i ) para algún gráfico dirigido G con n nodos, de modo que la cantidad de particiones (es decir, viajes), aquí m , es mínima.C={(S1,T1),,(Sm,Tm)}(Si,Ti)Gnm

Primero, algunas observaciones, parcialmente provenientes de otras respuestas:

  • La estrategia codiciosa, donde elegimos un con un gráfico bipartito donde la cantidad de aristas en común con G es máxima, no conduce a una solución óptima (un fuerte contraejemplo es el gráfico completo con 6 nodos, donde esta estrategia falla, sin importar qué gráfico bipartito máximo se elija).(Si,Ti)G6
  • La estrategia codiciosa no es óptima para gráficos acíclicos arbitrarios, considere el siguiente gráfico: duro acíclico Ambos para como para S i = { 1 , 3 , 6 } el gráfico bipartito elimina 4 bordes, pero solo { 3 , 5 , 6 } es óptimo.Si={3,5,6}Si={1,3,6}4{3,5,6}
  • Cualquier algoritmo codicioso (óptimo) no puede preferir el tamaño de la partición elegida sobre la cantidad de ciclos (de cualquier tamaño) 'eliminados' por la partición. Para ver esto, considere el gráfico con nodos, donde hay un ciclo de n nodos y cada nodo en el ciclo tiene 2 bordes salientes adicionales hacia 2 nodos adicionales A , B , que no tienen bordes salientes (vea la figura a continuación para un ejemplo donde n = 4 ). Una elección codiciosa que prefiere maximizar la cantidad de aristas sobre ciclos de longitud nn+2n22A,Bn=4nenviará todos los vértices del ciclo en el primer viaje. Esto es subóptimo, ya que esto no elimina ningún borde del ciclo y simplemente ignora y elimina todos los bordes del ciclo, elimina todos los bordes hacia A , B también. Por lo tanto, cualquier elección codiciosa que prefiera el tamaño de la partición sobre la eliminación de un ciclo no es óptima.A,BA,B
    4 ciclos

Con base en estas observaciones, propongo la siguiente opción codiciosa: Elija tal que la cantidad de ciclos que este viaje 'elimina' de G sea ​​máxima y, en caso de empate, elija una partición con superposición máxima con G entre ellos (es decir, mirar los bordes no en ciclos).(Si,Ti)GG

Dado que este algoritmo no es diferente de la estrategia codiciosa 'básica' en los gráficos acíclicos (eliminando una cantidad máxima de bordes en cada viaje), este algoritmo codicioso, por lo tanto, no es óptimo. Sin embargo, la intuición de eliminar ciclos todavía tiene sentido y es una mejora con respecto a la estrategia codiciosa básica, por lo que podría ser una heurística decente.


1
Usted declara "Si existe un -multicoloring para G , entonces este color no usa más que ( ttG elementos desiguales deP(C)". Esta afirmación es falsa. En el ejemplo trivial de 3 nodos desconectadosa,b,cexiste unavmulticolores 2, dondev(a)={1},v(tt/2)P(C)a,b,cvv(a)={1},v(b)={2},v(c)={1,2}. Este es un 2-multicoloring apropiado que usa más de (21)=2 elementos distintos. ¿Querías decir "Si existe un -multicoloring para G , entonces uno de esos colores no usa más que ( ttG elementos desiguales deP(C(tt/2) "?P(C)
Riley

De hecho, eso es lo que quise decir. Otra forma de verlo es que si es un t-multicoloring mínimo (es decir, este no es ( t - 1 ) -multicolorable), usa exactamente ( tG(t1) elementos. Claramente, el ejemplo que da no es un contraejemplo para la reformulación correcta. (tt/2)
Lagarto discreto

No, espera. No utiliza exactamente elementos, pero a lo sumo. (tt/2)
Lagarto discreto

Puedo entender cómo esa declaración revisada tiene sentido intuitivo, pero ¿puedes probarlo? Tal vez podría mostrar de alguna manera que cualquier t-multicoloring puede ser "mejorado" para que todos los multicolors sean elementos de un conjunto cumpla con el requisito de tamaño, y que no exista a , b K tal que aKa,bK . ab
Riley

@Riley No estoy seguro de lo que quieres decir, ¿qué afirmación quieres que elabore? He actualizado mi respuesta de modo que indique lo que sugirió su comentario original. El resto de la prueba no se ve afectado. En cuanto a la relación del problema de color múltiple y original, la idea clave es que se puede ver que el multicolor no tiene 'subconjuntos' adyacentes. Dado que el subconjunto más grande de 'subconjunto no emparejado' de tiene tamaño ( tP(C) , también podríamos considerar ese conjunto como un conjunto de colores y obtenemos el problema de coloración. (tt/2)
Lagarto discreto

2

Puedo ver cómo reducir este problema a Graph Coloring , que le brinda una herramienta para resolver el problema (¡para casos pequeños!), Pero aún no cómo reducirlo en la otra dirección (lo que establecería la dureza NP).

La idea básica es construir un gráfico que contenga un vértice para cada compra , y una ventaja entre dos compras que no pueden ocurrir en el mismo viaje; luego buscamos agrupar las compras en el menor número posible de grupos ("viajes"), de modo que no haya dos compras en el mismo grupo en conflicto. En concreto, si es el grafo dirigido original en el que un borde u v indica que persona u necesita comprar persona v un regalo, a continuación, crear un grafo no dirigido H = ( X , Y ) en el que hay una vértice xG=(V,E)uvuvH=(X,Y) para cada bordeuvenGy una (no dirigida) de borde x u v xun regalo durante un viaje, entonces nadie puede comprarvun regalo durante ese mismo viaje). Una coloración de vértice deHes una partición de las compras necesarias (vértices enH) en viajes (colores) que no entran en conflicto (comparten un borde), y una coloración de vértice de tamaño mínimo toma la menor cantidad de viajes posibles.xuvuvG cuandouvyvwson ambos bordes (dirigidos) enG(sivcompra algo dewxuvxvwuvvwGvwvHH

Puede ser posible ir en la otra dirección (reduzca la coloración de gráficos, o algún otro problema NP-hard, a su problema, y ​​así establecer su dureza NP), adaptando una reducción de 3SAT a Graph Coloring (como, por ejemplo, detallado en la página 10 de las notas de Jeff Erickson ), pero no lo he intentado yo mismo.


Esta respuesta es brillante; es justo lo que estaba buscando. Al analizar la complejidad temporal de este algoritmo, existen a lo sumo vértices (presentes) y ( 2 n - 3 ) ( n 2n2n aristas. Cuando busco un algoritmo paracolorear gráficos,todo lo que encuentro esO(2nn)para un gráfico connvértices. ¿Existe un algoritmo más eficiente en este caso porque hay un límite superior polinómico en el número de bordes? (2n3)(n2n)2O(2nn)n
Riley

1
@Riley Probablemente no, al decidir colorabilidad, k 3 para un gráfico con un grado máximo 3 ya es NP-duro. Vea estas [notas de clase] (www-sop.inria.fr/members/Frederic.Havet/Cours/coloration.pdf) para ver una reducción de 3-SAT a gráficos con un grado máximo 3.kk33
Lagarto discreto

@ Lagarto discreto: ¿Dónde en esas notas de clase dan tal reducción?

¿Por qué se acepta esta respuesta? Por lo que puedo ver, ni muestra dureza NP ni un algoritmo "más óptimo" o incluso un algoritmo eficiente.
Lagarto discreto

1
@Discretelizard Está bien. No pensé que la pregunta implicara que estoy buscando un algoritmo de tiempo P, especialmente dada la posibilidad de que este problema sea NP-difícil. Pero puedo hacer ese punto más explícito en la pregunta original. Desmarcaré esta respuesta como correcta y agregaré una recompensa de 100 puntos (resulta que la segunda tiene que ser 100 si se trata de la misma pregunta, pero estoy dispuesto a ofrecerla porque son solo puntos imaginarios de Internet, ¿verdad? :)) nuevamente para cualquiera que pueda mostrar que este problema es NP-hard, O encontrar un algoritmo de tiempo polinómico que lo resuelva.
Riley

0

Es el tipo de problema en el que estaría muy preocupado si mi jefe me pidiera que implementara un algoritmo que garantice encontrar una solución óptima en un tiempo razonable.

Para encontrar una solución no necesariamente óptima: dado cualquier conjunto de personas y regalos para comprar, podemos contar cuántos regalos puede comprar un grupo de personas en un viaje de compras. Comience con un grupo vacío (que puede comprar 0 regalos). Para cada persona que no está en el grupo, determine cuántos regalos se pueden comprar si esa persona se agrega al grupo. Si hay alguna persona que podamos agregar sin disminuir la cantidad de regalos, elija al azar uno de los que aumente la cantidad máxima de regalos comprados, hasta que agregar cualquier persona reduciría la cantidad de regalos comprados. Luego haga ese viaje de compras y comience de nuevo hasta que se compren todos los regalos.

Repetiría varias veces, eligiendo diferentes personas "al azar" en caso de que encuentre una mejor solución.

En el ejemplo, cinco personas que tienen que comprar un regalo el uno para el otro, esto encuentra una solución en cuatro viajes, lo cual es óptimo; Si no agregamos personas a un viaje que dejen sin cambios el número de regalos sin mejorarlo, tendríamos cinco viajes. Y 6 personas requieren 5 viajes.


En otras palabras, eliges con avidez viajes de compras de acuerdo con la cantidad de regalos que se comprarían. ¿Podría probar que este procedimiento necesariamente resulta en el mínimo número posible de viajes de compras? Si es así, trabajó a través del ejemplo de 6 personas incorrectamente. 6 personas solo requieren 4 viajes de compras: . {{1,2,3},{1,4,5},{2,4,6},{3,5,6}}
Riley

Absolutamente ninguna prueba. Algoritmo codicioso + hacer diferentes elecciones aleatorias mejoraría un poco sus posibilidades, pero no haría 4 viajes.
gnasher729

He probado la afirmación de que el problema es codicioso y falla. Incluso si prueba cada posible viaje de compras en lugar de agregar personas una por una, aún obtiene 5 viajes: {{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}. El enfoque codicioso quisiera que el segundo viaje de compras compre 9 regalos, pero en la solución óptima el segundo viaje de compras compra 8 regalos (suponiendo que vaya en el orden mencionado anteriormente).
Riley

De hecho, el enfoque codicioso ni siquiera resuelve el caso de 5 personas en 4 viajes de compras: . {{1,2},{3,4},{5},{1,3},{2,4}}
Riley

-1

Suponga que ordena a las personas en función de quién están recibiendo de (padre) y a quién le están dando (hijo). Como todos dan un presente y reciben un presente, la función padre-hijo es uno a uno.

Nunca querrás poner al padre y al niño en el mismo grupo. Empiezas con una persona aleatoria y ordenas a todos en consecuencia, entonces c h i l d ( p 1 ) = p 2 , etc. Pones todos los p o d d en un grupo y todos los p e v e n en otro grupo. . Para la última persona p n = p a r e n t ( p 1 )p1child(p1)=p2poddpevenpn=parent(p1), por lo que no desea que esta persona esté en el mismo grupo con . Si n es par, no es un problema. De lo contrario, necesita un grupo adicional, que puede ser solo p np1npn solo, en el caso más simple.

Este algoritmo asume que todos están conectados. Pero no tiene por qué ser así. Si hay múltiples ciclos desconectados, en otras palabras, si en algún momento, donde k ! = npk=parent(p1)k!=n , entonces terminas ese círculo y comienzas con uno nuevo, siguiendo el mismo algoritmo. Mientras no combine las probabilidades y los pares del mismo ciclo, puede fusionar los ciclos desconectados.

Este algoritmo termina con a lo sumo 2 rondas (para pares ) y 3 rondas (para n impares ).nn


Parece que este enfoque solo resuelve el problema para el caso en que todos dan un presente y reciben un presente, es decir, donde el gráfico es una permutación. No estoy seguro de que la pregunta solo tuviera que ver con ese caso especial; veamos qué dice el OP al respecto.
DW

Es cierto, mi solución es para un sub-caso del problema donde . i,fan_in(vi)=fan_out(vi)=1
ilke444

Sí, no estaba pidiendo permutaciones específicamente. Consulte la pregunta actualizada donde aclaro algunas cosas.
Riley
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.