Shalmoli Gupta já explicou que o problema geral é NP-Hard, então decidi investigar se algum caso especial é passível de solução polinomial. Eventualmente, encontrei uma solução para o caso especial de conjuntos que representam uma árvore, ou mais geralmente, uma ordem paralela de séries por inclusão de subconjunto, com todos os conjuntos incomparáveis separados.
Uma propriedade que facilita as coisas é se a lista de conjuntos for fechada sob interseção. Se , existe uma ordem ideal em que s 1 vem antes de s 2 . Podemos supor ao WLOG que a ordem ideal é uma extensão linear da ordem parcial dada pela inclusão de subconjunto.s1⊆s2s1s2
Como todos os subconjuntos de um conjunto aparecem antes dele na ordem, isso significa que a quantia adicionada à soma corrente por um determinado conjunto é fixa, independentemente de onde ele apareça. Se é a lista de conjuntos, em seguida, o custo incremental de um conjunto é o número de elementos em s que não são em qualquer subconjunto de s que aparece em S . Se o mesmo conjunto aparecer várias vezes em S , podemos escolher arbitrariamente um para ir primeiro e permitir que os outros custem 0.SSS
Isso significa que o problema é equivalente ao tempo mínimo de conclusão ponderado no planejamento de uma única máquina com restrições de precedência. Neste problema, dado um conjunto de postos de trabalho com pesos e tempos t j , e uma ordem parcial sobre o emprego P , que deseja encontrar uma ordenação dos trabalhos que minimiza o tempo de conclusão total ponderado, ou sejawjtjP
∑ni=1wji(∑ik=1tjk)
sujeito às limitações de precedência . O problema mínimo de conjunto cumulativo com conjuntos fechados de interseção pode ser resolvido criando um trabalho para cada conjunto, onde cada trabalho tem peso 1, tempo igual ao custo incremental definido acima e P é a ordem dada pela inclusão do subconjunto.PP
Como se vê, esse problema também é NP-Hard para geral . No entanto, certas formas especiais de P podem ser resolvidas em tempo polinomial.PP
Este artigo fornece um algoritmo para o caso de ordens paralelas em série P (que inclui também o caso importante de árvores). Infelizmente, como não consegui acessar esse documento, decidi tentar reinventá-lo de forma independente. Aqui está o que eu criei.O(nlogn)P
Para resolver este problema, são necessárias várias observações.
Primeiro, na ausência de restrições de precedência, a solução ideal é simplesmente classificar os trabalhos em ordem crescente de . Por simplicidade, vou me referir a isso como o valor do trabalho, abreviadov(j). Observe que, como a classificação éO(nlogn), é impossível fazer melhor que essa complexidade.tjwjv(j)O(nlogn)
Regra 1 Seja e b trabalhos de tal forma que a < b ∈ P e b cubra a. Se v ( a ) < v ( b ) , podemos eliminar a restrição a < b sem afetar a ordenação ideal ou o valor objetivo.aba<b∈Pv(a)<v(b)a<b
Suponha aparece antes um na ordenação ótima do problema relaxado. Como b abrangeu a originalmente, isso significa que todos os trabalhos entre be na nova ordem são incomparáveis a e b. Mas como b tem um valor mais alto que a, podemos diminuir o valor objetivo trocando be uma contradição.ba
Da mesma forma, podemos eliminar a restrição no caso em que , desde que asseguremos que, após a classificação por valor, rompamos os laços consultando as relações de precedência do problema original (simplificado). Isso garante que a solução ideal encontrada para o problema relaxado também seja uma solução ideal para o problema original.v(a)=v(b)
Portanto, sempre que b abrange a e , podemos simplificar o problema eliminando a restrição a < b .v(a)≤v(b)a<b
Regra 2 Suponha que sabemos que b segue imediatamente após a em uma solução ótima. Podemos mesclar aeb em um novo nó c com e t c = t a + t b , enquanto contratamos o poset P apropriadamente.wc=wa+wbtc=ta+tbP
O valor objetivo ideal do novo problema difere em uma constante do valor objetivo original (especificamente ), no entanto, essa constante não depende da ordem e, portanto, a ordem ideal não é afetada. Podemos recuperar uma solução ótima para o problema antigo, pegando uma solução ótima para o novo problema e substituindo c por um b .watbcab
Regra 3 Suponhamos que, uma solução óptima para um problema exemplo, vem imediatamente antes b e v ( um ) > v ( b ) . Agora, suponha que criamos uma instância de problema maior adicionando novos trabalhos com o novo poset formado a partir de séries ou composição paralela ao original. Sempre haverá uma solução ideal para o problema maior em que a vem imediatamente antes de b .abv(a)>v(b)ab
Suponha o contrário. Deixe a solução ideal conter . Como P foi formado pela composição paralela em série, sabemos que todos os x i s são incomparáveis a a e b . Mesclar todos os nós x i em um novo nó x ′ usando a regra 2. Agora considere v ( x ′ ) . Se v ( x ′ ) ≤ v ( a ), então podemos trocara,x1,x2,…,bPxiabxix′v(x′)v(x′)≤v(a) e a sem aumentar o valor objetivo. Da mesma forma, se v ( x ′ ) ≥ v ( b ) , podemos trocar x ′ e b . Portanto, v ( a ) < v ( x ′ ) < v ( b ) . Mas v ( a ) > v ( b ) , uma contradição.x′av(x′)≥v(b)x′bv(a)<v(x′)<v(b)v(a)>v(b)
Usando as regras 2 e 3, já podemos obter um algoritmo simples, mas subótimo . Como P é uma ordem paralela em série, suponha que a entrada contenha uma representação em árvore de P, em que cada nó representa composição em série ou composição paralela, e as folhas são tarefas individuais. Podemos encontrar uma solução ideal com a passagem antecipada da árvore, mantendo a invariante de que a solução ideal para cada subproblema é uma cadeia em ordem crescente de valor.O(n2)PP
Suponhamos que é a composição série de sub-problemas com posets P 1 e P 2 . Deixe as soluções ideais solicitarem C 1 e C 2 . A solução ideal para P é claramente a concatenação dessas cadeias. No entanto, é possível que o primeiro trabalho em C 2 tenha um valor menor que o último trabalho em C 1 . Para manter a invariante de que a solução é uma cadeia classificada, usamos a regra 3 + regra 2 para mesclar os pontos de extremidade, desde que eles não estejam na ordem de classificação.PP1P2C1C2PC2C1
Se é uma composição paralela, simplesmente pegamos as cadeias classificadas S 1 e S 2 e as fundimos em uma nova cadeia classificada. Graças ao invariante, isso é válido.PS1S2
Infelizmente, esse algoritmo é . Para obter um algoritmo O ( n l o g n ) , precisamos calcular as cadeias preguiçosamente usando a regra 1.O(n2)O(nlogn)
Especificamente, se um subproblema contiver apenas nós em que as restrições de precedência são iguais à ordem dos valores, podemos esquecer completamente as restrições de precedência e examinar apenas os valores. Isso é garantido pela mesma invariante que garantiu que as soluções sejam classificadas em cadeias no algoritmo anterior.
Em vez de calcular uma cadeia classificada para cada subproblema, representamos a solução ideal para um subproblema como um par de pilhas de Fibonacci, uma pilha mínima e uma pilha máxima, ambas contendo todos os trabalhos no subproblema. Isso significa que podemos destacar o elemento mínimo ou máximo da solução em tempo logarítmico.
PP
Para uma composição paralela, simplesmente mesclamos os pares de heap. O novo heap mínimo é a mesclagem do heap mínimo de cada subproblema e da mesma forma com o heap máximo. Observe que pilhas de Fibonacci são mescláveis em tempo constante.
Depois que tivermos um par de heap representando a solução para todo o problema, podemos encontrar a ordem real da solução pressionando o heap mínimo até que ele esteja vazio. Depois disso, desfazemos todas as substituições da regra 2 para obter uma solução para o problema original.
O(nlogn)