Há um problema (muito geral) que eu observei como parte de um projeto: uma variante desse problema permanece NP-difícil mesmo em gráficos com dois vértices e uma única aresta, e uma variante diferente é NP-difícil em árvores. Como a dureza NP da primeira variante obviamente não decorre da forma do gráfico, a segunda é provavelmente mais interessante.
SCG=(V,E)S⊂VC⊂VS∩C=∅s∈S|s|Ff∈F|f|e∈EteR⊆C×F(c,f)∈Rcf
s∈SAs∑f∈As|f|≤|s|PrGr=(c,f)∈Rcsf∈AsD e r = ( c , f ) ∈ D e P r e Σ ( c , f ) ∈ D e | f | ≤ t eeDer=(c,f)∈DePre∑(c,f)∈De|f|≤te
Se você não precisa de todos os downloads a serem encaminhadas, mas em vez de tentar maximizar a soma dos filesizes dos downloads que são roteados que você pode facilmente reduzir subconjunto de soma para este problema: você tem um único servidor com grandes quantidades de espaço, um cliente único conectado ao servidor com uma borda com capacidade igual ao valor de destino da instância de soma do subconjunto e para cada número inteiro na instância de soma do subconjunto, você cria um arquivo com tamanho igual; o cliente então deseja baixar todos esses arquivos.
Uma variante (muito?) Mais interessante para essa pergunta é o caso de você tentar minimizar o número de arestas cuja capacidade é excedida - talvez a rede em que estamos trabalhando modele os cabos transatlânticos da Internet e substitua um cabo seja tão cara que a diferença no custo de atualização para um fator dois mais rápido e uma atualização para um fator três mais rápido é insignificante. Também dizemos que as veiculações de arquivos nos servidores já foram fornecidas e não podem ser modificadas; portanto, analisamos apenas os problemas de roteamento.
O problema da tampa do conjunto pode ser facilmente reduzido a essa variante. Estamos dado um conjunto chamado o universo e vários subgrupos deste universo. Somos solicitados a escolher a menor quantidade de subconjuntos, de modo que sua união seja igual ao universo. Para cada , criamos um arquivo de tamanho 1. Temos um único cliente que deseja baixar todos esses arquivos.S ⊆ P ( U ) u ∈ UUS⊆P(U)u∈U
Para cada subconjunto , criamos um 'cluster' de servidores: um cluster consiste em um único vértice (um roteador) conectado a vários servidores, de forma que os servidores estejam conectados apenas ao roteador. Para cada , adicionamos um único servidor ao cluster com o arquivo correspondente a . Esses clusters são então conectados ao cliente com uma borda de capacidade 1 (para que cada borda conecte o cliente ao roteador do cluster). Além disso, para cada cluster de servidor, adicionamos mais um servidor a esse cluster que hospeda um único arquivo novo (exclusivo para esse cluster) de tamanho 1. Todos esses arquivos (portanto, além dos arquivos correspondentes aos elementos do universo) são solicitados por o cliente.u ∈ s us∈Su∈su
A ideia é que o cliente precise dos arquivos exclusivos para todos os clusters de servidores, portanto, as bordas que conectam o cliente aos clusters de servidores já estão no limite de suas capacidades (suas capacidades são 1, os arquivos têm o tamanho 1). Se o cliente fizer o download de qualquer elemento do universo de qualquer cluster, a borda conectada a esse cluster ficará sobrecarregada. Como exigimos apenas minimizar o númerode sobrecargas (e não em quanto excedemos as capacidades), o cliente pode baixar o restante dos elementos do universo hospedado naquele cluster de servidores (para o restante dos elementos do subconjunto correspondente) sem penalidade. Portanto, isso corresponde ao subconjunto escolhido. O cliente deseja fazer o download de todos os arquivos do universo uma vez, para que o universo seja coberto e, para minimizar o número de arestas sobrecarregadas, precisamos minimizar o número de subconjuntos escolhidos.
Observe que a construção acima produz um gráfico em árvore, por isso é um exemplo de um problema de NP nas árvores.