Número mínimo de viagens de compras para um grupo de pessoas comprar presentes um para o outro


10

Temos um grupo de n pessoas. Recebemos uma lista de quem deve comprar presentes para quem dentro do grupo. Cada pessoa pode precisar comprar / receber qualquer número de presentes, ou possivelmente nenhum. Em uma viagem de compras, um subconjunto de pessoas viaja juntas para a mesma loja e compra presentes para quem não está presente na loja. Eles podem não comprar presentes para outra pessoa na mesma viagem de compras, porque então não seria uma surpresa. Uma pessoa pode fazer várias viagens de compras. Queremos minimizar o número total de viagens de compras necessárias para que todos possam comprar todos os presentes de que precisam.

Como exemplo, considere o caso em que há cinco pessoas e cada uma deve comprar presentes para todas as outras pessoas do grupo. As pessoas devem ser numeradas de 1 a 5. Isso pode ser feito em 4 viagens de compras, conforme mostrado:

  • Viagem 1: 1, 2, 3 vão às compras

  • Viagem 2: 1, 4, 5 vão às compras

  • Viagem 3: 2, 4 ir às compras

  • Viagem 4: 3, 5 ir às compras

Como eu resolveria esse problema? É óbvio que a entrada pode ser representada por um gráfico direcionado, mas não sei para onde ir a partir daí. Alguém levantou o problema da capa do biclique , mas, embora semelhante, ele não responde a essa pergunta.

Podemos pensar na entrada como um gráfico direcionado em n vértices, em que a aresta ( u , v ) significa que a pessoa u deve comprar um presente para a pessoa v . O objetivo é encontrar um conjunto de bicliques ( S 1 , T 1 ) , , ( S k , T k ) de modo que k seja mínimo e o conjunto de arestas E do gráfico seja um subconjunto de i ( S i × T EuGn(u,v)uv(S1,T1),,(Sk,Tk)kE . Além disso, no que se estende a definição de bicliques para um grafo orientado, um biclique ( S i , T i ) contém apenas arestas que mapa s i a t i . Isso difere do problema da cobertura da biclique, pois não exigimos que cada biclique seja um subgrafo de G (não exigimos S i × T iE para cada i ).i(Si×Ti)(Si,Ti)SiTiGSi×TiEi

Especificamente, aceitarei uma resposta que:

  • Demonstra que esse problema é difícil de NP ou
  • Apresenta um algoritmo de tempo polinomial que responde exatamente a essa pergunta (sem aproximantos ou limites superiores)

Para constar, eu não vi esse problema em nenhum lugar, só estou pensando nisso por minha própria curiosidade.

Respostas:


2

Este problema é NP-difícil . Para mostrar isso, primeiro reformularei esse problema (otimização) em um problema de decisão. Em seguida, reformulo esse problema para um equivalente, do qual é bastante simples obter uma redução do problema da coloração , que é NP-difícil para qualquer k 3 .kk3

Uma breve formulação do problema é a seguinte:

Dadas pessoas e um gráfico G que codifica suas relações de 'oferta de presentes', encontre a quantidade mínima de viagens necessária para que todos os presentes possam ser comprados sem arruinar nenhuma surpresa.nG

No entanto, este é um problema de otimização. A classe NP é geralmente definida para problemas de decisão (onde a resposta para cada instância é SIM ou NÃO). Uma variante de decisão disso é:

Dadas pessoas e um gráfico G que codifica suas relações de 'doação de presentes' e um número inteiro t , está fazendo no máximo t viagens suficientes para comprar todos os presentes sem arruinar nenhuma surpresa?nGtt

Defino o problema de encontrar uma coloração t- multiculinária direcionada adequadat de algum gráfico como encontrar uma função multicolorida c : V P ( C ) que é adequada , onde C é um conjunto de t 'cores' ( ou seja, | C | = t ) e P ( C ) é o conjunto de alimentação de C (ou seja, o conjunto de todos os subconjuntos de CG=(V,E) c:VP(C)Ct|C|=tP(C)CC) Uma função multicolor é adequada se e somente se para cada aresta , temos que c ( u ) c ( v ) .(uv)Ec(u)c(v)

I pedindo que o problema viagem de compras é equivalente para o problema de decidir a existência de um dirigida -multicoloringt do mesmo gráfico .G

Prova : Se tivermos uma coloração direcionada adequada c para G , onde renomearemos as cores de modo que C = { 1 , , t } , considere a sequência de t dispara T 1 , , T t , em que um vértice v vai às compras na viagem T i se e somente se i c ( v ) . Então, para cada aresta ( u v ) EtcGC={1,,t}tT1,,TtvTiic(v)(uv)E, temos que existe uma viagem tal que u T i e v T i , desde c ( u ) c ( v ) . Portanto, as viagens T i são suficientes para comprar todos os presentes.TiuTivTic(u)c(v)Ti

Se tivermos uma sequência de disparos , construa a função multicolorida c no conjunto de cores C = { 1 , , t } de modo que c ( u ) = { i N | u T i } . Então, para cada aresta ( u v ) E , existe uma viagem T i tal que u T1,,TtcC={1,,t}c(u)={iN|uTi}(uv)ETi e v T i (já que você pode comprar um presente para v em alguma viagem), o que significa que i c ( u ) e i c ( v ) , então c ( u ) c ( v ) . uTivTiuvic(u)ic(v)c(u)c(v)

Encontrar uma coloração multicor dirigida adequada é basicamente uma reformulação estranha de um caso específico de coloração- k . Portanto, eu posso mostrar uma redução de tempo polinomial a partir de ( ttk problema de coloração: dado um gráfico não direcionadoG=(V,E), primeiro transforme esse gráfico no gráfico direcionadoG=(V,E), de modo queV=Ve(uv)Ese e somente se(u,v)E'ou(v,u(tt/2)G=(V,E)G=(V,E)V=V(uv)E(u,v)E (em outras palavras, alteramos as arestas não direcionadas em duas arestas direcionadas).(v,u)E

Considere um conjunto maior , de modo que não exista a , b K , a b , tal que a b . O conjunto de todos os subconjuntos de C de tamanho t / 2 , em que t = | C | , é esse conjunto. Portanto, o tamanho máximo desse subconjunto é ( tKP(C)a,bKababCt/2t=|C| .(tt/2)

Se existe uma coloração multicolorida adequada para G , existe uma coloração adequada que não usa mais do que ( ttG elementos desiguais deP(C)(*), portanto, este é um válido ( t(tt/2)P(C)  coloração paraG.(tt/2)G

Se uma adequada -coloring existe paraG, então existe um conjuntoKP(C),| C| =t, de modo que| K| ( t(tt/2)GKP(C)|C|=t e não existea,bK,ab, de modo queab. Portanto,Gtem umacoloraçãot-multicdirigida adequada.|K|(tt/2)a,bKababGt

Portanto, essa é uma redução de tempo polinomial válida de colorindo para o atual problema de compras comtviagens, o que significa que o atual problema de compras é difícil de NP. Observe que o atual problema de compras é NP-completo, pois podemos verificar facilmente se uma determinada lista de no máximotviagens nos permite comprar todos os presentes sem arruinar surpresas.(tt/2)tt


(*): Se algum multi-colorir usa mais cor-conjuntos do que um máximo de 'não-subconjunto' multi-colorir C * , nós podemos 'renomear' C tal que é um super conjunto de C * . C permanece adequado, pois nenhum dos elementos de C sendo adjacente a um elemento diferente de C é um problema e nenhum conjunto de cores era adjacente um ao outro no C original . Assim, sem perda de generalidade, podemos assumir C *C .CCCCCCCCCC

Observe que 'renomear' para qualquer subconjunto de C não arruina as arestas entre os nós dos conjuntos de cores CC , pois C não contém elementos que sejam um subconjunto de outro. A única coisa que resta é garantir que as arestas entre CC e C não ' estragem ' a coloração.CCCCCCCCC

Consideremos a seguinte relação na cor-conjuntos em CC * : dois cor-conjuntos A e B são ligados , se e apenas se existe um par de vértices de um , b de tal forma que um tem cor-grupo A e b cor- conjunto b e ( um , b ) e . Essa relação pode ser representada pelo gráfico não direcionado G = ( CC , R )RCCABa,baAbB(a,b)EG=(CC,R).

Primeiro, podemos "reduzir" substituindo qualquer par que não tenha uma aresta em G por um único conjunto de cores. A coloração permanece adequada, pois alterar dois conjuntos de cores que não são adjacentes na mesma cor não introduz bordas inválidas. Como resultado, reduzimos G para um gráfico completo.CCGG

Isso significa que se tem uma quantidade menor ou igual de conjuntos de cores como | C * | , a coloração necessária existe. Caso contrário, não existe nenhuma multicoloração adequada, pois C é o maior conjunto 'não subconjunto'; portanto, não podemos colorir essa camarilha. Portanto, a multi-coloração necessária existe necessariamente.G|C|C


Como o gráfico completo sobre nodos K n é cor-able se e somente se temos pelo menos n cores, temos que n as pessoas podem ir às compras de presentes para o outro em t viagens se e somente se ( tnKnnnt. Isso significa, em particular, que, sen12870, fazer apenas16viagens é suficiente. Se houver menos presentes para comprar, não serão necessárias mais viagens, portanto esse é um limite superior geral em todas as soluções.(tt/2)nn1287016


Abaixo está minha 'resposta' anterior, que fornece um algoritmo heurístico que não garante o ideal, mas pode ser calculado em tempo polinomial.

Outra maneira de formular esse problema é encontrar uma cobertura de gráficos bipartidos nas partições ( S i , T i ) para algum gráfico direcionado G com n nós, de modo que a quantidade de partições (ou seja, viagens), aqui m , seja mínima.C={(S1,T1),,(Sm,Tm)}(Si,Ti)Gnm

Primeiro, algumas observações, parcialmente provenientes de outras respostas:

  • A estratégia gananciosa, em que escolhemos um com um gráfico bipartido em que a quantidade de arestas em comum com G é máxima, não leva a uma solução ótima (um forte contra-exemplo é o gráfico completo com 6). onde essa estratégia falha, independentemente do gráfico bipartido máximo escolhido.).(Si,Ti)G6
  • A estratégia gananciosa não é ideal para gráficos acíclicos arbitrários, considere o seguinte gráfico: acíclico Tanto para como S i = { 1 , 3 , 6 } o gráfico bipartido remove 4 arestas, mas apenas { 3 , 5 , 6 } é ideal.Si={3,5,6}Si={1,3,6}4{3,5,6}
  • Qualquer algoritmo ganancioso (ideal) não pode preferir o tamanho da partição escolhida sobre a quantidade de ciclos (de qualquer tamanho) 'removidos' pela partição. Para verificar isto, considere o gráfico com nós, onde existe um ciclo de n nós e todos os nós do ciclo tem 2 bordas de saída adicional para 2 nós adicionais A , B , que não têm bordos de saída (ver figura abaixo de um exemplo em que n = 4 ). Uma escolha gananciosa que prefere maximizar a quantidade de arestas ao longo de ciclos de comprimento nn+2n22UMA,Bn=4nenviará todos os vértices do ciclo na primeira viagem. Isso é subótimo, pois isso não remove as arestas do ciclo e simplesmente ignora e remover todas as arestas do ciclo remove todas as arestas em direção a A , B também. Portanto, qualquer escolha gananciosa que prefere o tamanho da partição à remoção de um ciclo não é ideal.A,BA,B
    4 ciclos

Com base nessas observações, proponho a seguinte escolha gananciosa: Pick tal, que a quantidade de ciclos que essa viagem 'remove' de G seja máxima e, em caso de empate, escolha uma partição com sobreposição máxima com G entre eles (ou seja, observe as bordas que não estão em ciclos).(Si,Ti)GG

Como esse algoritmo não é diferente da estratégia gananciosa 'básica' dos gráficos acíclicos (removendo uma quantidade máxima de arestas em cada viagem), esse algoritmo ganancioso não é ideal. No entanto, a intuição de remover ciclos ainda faz sentido e é uma melhoria em relação à estratégia gananciosa básica, portanto pode ser uma heurística decente.


11
Você declara "Se existir uma coloração multicolorida para G , essa cor não usará mais que ( ttG elementos desiguais deP(C)". Esta afirmação é falsa. No exemplo trivial de 3 nós desconectadosa,b,cexiste umvmulticolorido 2, em quev(a)={1},v(b)={2},v(c)={1,2}(tt/2)P(C)a,b,cvv(a)={1},v(b)={2},v(c)={1,2}. Esse é um 2-multicolor apropriado que usa mais de elementos distintos. Você quis dizer "Seexisteumacoloraçãot-multic paraG,uma dessascores não usa mais que ( t(21)=2tG elementos desiguais deP(C)"?(tt/2)P(C)
Riley

Na verdade, foi isso que eu quis dizer. Outra maneira de ver isso é que, se é um multicolorido t mínimo (ou seja, esse não é ( t - 1 ) multicolorido), ele usa exatamente ( tG(t1) elementos. Claramente, o exemplo que você dá não é um contra-exemplo para a reformulação correta. (tt/2)
Lagarto discreto

Não espera. Não usa exatamente elementos, mas no máximo. (tt/2)
Lagarto discreto

Eu posso entender como essa declaração revisada faz sentido intuitivo, mas você pode provar isso? Talvez você possa mostrar, de alguma maneira, que qualquer t-multicoloring pode ser "aprimorado", de modo que todas as cores multicoloridas sejam elementos de um conjunto atendendo ao requisito de tamanho e que não exista a , b K tal que a b . Ka,bKab
Riley

@Riley Eu não tenho certeza do que você quer dizer, qual afirmação você quer que eu elabore? Atualizei minha resposta para indicar o que o seu comentário original sugeriu. O restante da prova permanece inalterado. Quanto à relação entre o problema de cores múltiplas e originais, a ideia principal é que a multicoloração possa ser vista como sem subconjuntos adjacentes. Como o maior subconjunto 'subconjunto sem par' de tem tamanho ( tP(C) , que poderia muito bem considerar esse conjunto como um conjunto de cores e ficamos com o problema de coloração. (tt/2)
Lagarto discreto

2

Eu posso ver como reduzir esse problema ao Graph Coloring , que fornece uma ferramenta para solucionar o problema (para pequenas instâncias!), Mas ainda não como reduzir na outra direção (o que estabeleceria a dureza NP).

A idéia básica é criar um gráfico que contenha um vértice para cada compra e uma margem entre duas compras que não possam ocorrer na mesma viagem; procuramos agrupar as compras no menor número possível de grupos ("viagens"), para que não haja conflito de duas compras no mesmo grupo. Especificamente, se é o gráfico direcionado original no qual uma aresta u v indica que a pessoa que você precisa comprar para uma pessoa v um presente, crie um gráfico não direcionado H = ( X , Y ) no qual existe uma vértice xG=(V,E)uvuvH=(X,Y) para cada arestauvemGe uma aresta (não direcionada) x u v x v w sempre queuvevwsão arestas (direcionadas) emG(sevcomprarum presente parawdurante uma viagem, ninguém pode comprarvum presente durante o mesmo viagem). Uma coloração de vértice deHé uma partição das compras necessárias (vértices emH) em viagens (cores) que não conflitam (compartilham uma aresta), e uma coloração de vértice de tamanho mínimo realiza o menor número possível de viagens.xuvuvGxuvxvwuvvwGvwvHH

Pode ser possível ir na outra direção (reduzir o Graph Coloring, ou algum outro problema NP-hard, para o seu problema e, assim, estabelecer sua dureza NP), adaptando uma redução de 3SAT para Graph Coloring (como, por exemplo, detalhado na página 10 das anotações de Jeff Erickson ), mas eu mesmo não tentei.


Essa resposta é brilhante; é exatamente o que eu estava procurando. Ao analisar a complexidade do tempo desse algoritmo, existem no máximo vértices (presentes) e ( 2 n - 3 ) ( n 2 - n )n2n arestas. Quando procuro um algoritmo nográfico para colorir,tudo o que encontro éO(2nn)para um gráfico comnvértices. Existe um algoritmo mais eficiente nesse caso, porque existe um limite superior polinomial no número de arestas? (2n3)(n2n)2O(2nn)n
Riley

11
@Riley Provavelmente não, decidir a capacidade de , k 3 para um gráfico com o grau máximo 3 já é NP-hard. Veja estas [notas da aula] (www-sop.inria.fr/members/Frederic.Havet/Cours/coloration.pdf) para obter uma redução de 3-SAT para gráficos com grau máximo 3.kk33
Lagarto discreto

@ Lagarto discreto: Onde nessas notas de aula eles dão essa redução?

Por que essa resposta é aceita? Ele não mostra dureza NP, nem um algoritmo 'mais ideal' ou mesmo um algoritmo eficiente, até onde posso ver.
Lagarto discreto

11
@Discretelizard Okay. Eu não acho que a pergunta implique que eu esteja procurando por um algoritmo de tempo P, especialmente considerando a possibilidade de que esse problema seja difícil para NP. Mas posso deixar esse ponto mais explícito na pergunta original. Vou desmarcar esta resposta como correta e adicionar uma recompensa de 100 pontos (acontece que a segunda tem que ser 100 se estiver na mesma pergunta, mas estou disposto a oferecer porque são apenas pontos de internet imaginários, certo? :)) novamente para qualquer um que possa mostrar esse problema é NP-difícil, OU encontre um algoritmo de tempo polinomial que o resolva.
Riley

0

É o tipo de problema em que eu ficaria muito preocupado se meu chefe pedisse para que eu implementasse um algoritmo que é garantido para encontrar uma solução ideal em tempo razoável.

Para encontrar uma solução não necessariamente ideal: Dado qualquer conjunto de pessoas e presentes para comprar, podemos contar quantos presentes um grupo de pessoas pode comprar em uma viagem de compras. Então comece com um grupo vazio (que pode comprar 0 presentes). Para cada pessoa que não faz parte do grupo, determine quantos presentes podem ser comprados se essa pessoa for adicionada ao grupo. Se houver alguém que possamos adicionar sem diminuir o número de presentes, escolha aleatoriamente um daqueles que aumentem o número de presentes comprados no valor máximo, até que a adição de qualquer pessoa reduza o número de presentes comprados. Então faça essa viagem de compras e comece tudo de novo até que todos os presentes sejam comprados.

Eu repetiria algumas vezes, escolhendo pessoas diferentes "aleatoriamente", caso encontre uma solução melhor.

No exemplo, cinco pessoas tendo que comprar um presente para o outro, isso encontra uma solução em quatro viagens, o que é ótimo; se não adicionássemos pessoas a uma viagem que deixasse o número de presentes inalterado sem aprimorá-lo, teríamos cinco viagens. E 6 pessoas exigem 5 viagens.


Portanto, em outras palavras, você está escolhendo avidamente as compras de acordo com quantos presentes seriam comprados. Você poderia provar que esse procedimento necessariamente resulta no número mínimo possível de viagens de compras? Nesse caso, você trabalhou com o exemplo de 6 pessoas incorretamente. 6 pessoas exigem apenas 4 viagens de compras: . {{1,2,3},{1,4,5},{2,4,6},{3,5,6}}
Riley

Absolutamente nenhuma prova. O algoritmo ganancioso + fazer escolhas aleatórias diferentes melhoraria um pouco suas chances, mas não faria quatro viagens.
gnasher729

Testei a alegação de que o problema é ganancioso e falha. Mesmo se você testar todas as viagens de compras possíveis em vez de adicionar pessoas uma a uma, ainda terá 5 viagens: {{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}. A abordagem gananciosa gostaria que a segunda viagem de compras compre 9 presentes, mas, na solução ideal, a segunda viagem de compras compra 8 presentes (supondo que seja na ordem listada acima).
Riley

De fato, a abordagem gananciosa nem sequer resolve o caso de cinco pessoas em quatro viagens de compras: . {{1,2},{3,4},{5},{1,3},{2,4}}
Riley

-1

Suponha que você solicite as pessoas com base em quem elas estão recebendo (pai) e em quem elas estão dando (filho). Como todo mundo dá um presente e recebe um presente, a função pai-filho é individual.

Você nunca deseja colocar os pais e a criança no mesmo grupo. Começa-se com uma pessoa aleatório e fim todos em conformidade, de modo c h i l d ( p 1 ) = p 2 , etc. colocar todos p o d d em um grupo, e todos os p e v e n num outro grupo . Para a última pessoa p n = p a r e n t ( p 1 )p1child(p1)=p2poddpevenpn=parent(p1), então você não deseja que essa pessoa esteja no mesmo grupo que . Se n é par, não há problema. Caso contrário , você precisa de um grupo adicional, que pode ser apenas p n por si só, no caso mais simples.p1npn

Este algoritmo assume que todos estão conectados. Mas não precisa ser o caso. Se houver vários ciclos desconectados, em outras palavras, se em algum momento, que k ! = n , então você termina esse círculo e começa com um novo, seguindo o mesmo algoritmo. Desde que você não mescle as probabilidades e os pares do mesmo ciclo, você pode mesclar ciclos desconectados.pk=parent(p1)k!=n

Esse algoritmo termina com no máximo 2 rodadas (para mesmo ) e 3 rodadas (para n ímpar ).nn


Parece que essa abordagem apenas resolve o problema no caso em que todos dão um presente e recebem um presente, ou seja, onde o gráfico é uma permutação. Não tenho certeza de que a pergunta pretenda perguntar apenas sobre esse caso especial - vamos ver o que o OP tem a dizer sobre isso.
DW

Isso é verdade, minha solução é para uma sub-caso do problema onde . i,fan_in(vi)=fan_out(vi)=1
precisa saber é o seguinte

Sim, eu não estava pedindo permutações especificamente. Consulte a pergunta atualizada, onde esclareço algumas coisas.
Riley
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.