Algoritmos de tempo pseudo-polinomial mais rápidos para PARTITION


8

Eu quero particionar N dados (pode ou não ser igual) em 2 subconjuntos, de modo que os 2 subconjuntos tenham a soma o mais próximo possível e também a cardinalidade dos conjuntos seja igual (se n for par) ou diferir apenas por 1 ( se n for ímpar).

Acho que podemos fazer isso no tempo pseudo-polinomial , onde é a soma dos números no conjunto.O(n2A)A

Posso fazer melhor que isso? Ou seja, existe um algoritmo de tempo pseudo-polinomial que é executado no tempo O(ncA) com c<2 ?

Desde já, obrigado!


1
Observe que, como um caso especial da mochila, ela possui um FPTAS . Veja, por exemplo, o ELLawler. Algoritmos de aproximação rápida para problemas de mochila .
— Mathieu Chapelle

1
@Oleksandr, por melhor, quis dizer que existe um algoritmo pseudo-polinomial que roda em O (nA). desculpe por não conseguir postar em látex.
— Firebrandt

4
Receio que esta questão esteja na fronteira de ser muito elementar. Por exemplo, "O problema da Partição com a restrição adicional de que os dois conjuntos devem ter cardinalidade igual ainda está completo-NP?" pode ser uma pergunta típica da lição de casa e tenho medo de que escrever a resposta possa ter um impacto negativo em alguns cursos de complexidade computacional.
— Tsuyoshi Ito 30/01

6
Como isso é muito elementar? A abordagem óbvia fornece , e a questão é se existe um algoritmo melhor em execução no tempo que . Meu palpite é que essa é uma pergunta em aberto. O ( n c A ) c < 2O(n2A)O(ncUMA)c<2
— quer

3
@Febrebrandt: Tomei a liberdade de editar sua pergunta original para adicionar minha versão do seu esclarecimento (alterar para com , pois acho que mesmo essa é provavelmente uma pergunta em aberto). Sinta-se à vontade para alterá-lo novamente para se desejar. Penso que a questão, conforme esclarecida pelos seus comentários, é claramente de nível de pesquisa. O ( n c A ) c < 2 O ( n A )O(nUMA)O(ncUMA)c<2O(nUMA)
— Peter Shor

Respostas:


7

Pode-se resolver o problema de decisão em .O~(nUMA)

Deixe que a sequência de números ser . Defina como um conjunto tal que se existir uma subsequência de de comprimento que seja igual a . Se , precisamos apenas de tempo adicional para completo para resolver o seu problema.F S ( i , j ) ∈ F S S j i F S O ( n A ) F SSFS(Eu,j)∈FSSjEuFSO(nUMA)FS

Se e são duas subsequências que particionam , entãoS 2 SS1S2S

FS=FS1+FS2

onde é a soma de minkowski e a adição entre as tuplas é definida em termos de coordenadas.UMA+B={uma+b|uma∈UMA,b∈B}

Reivindicação: Computar de e leva .F S 1 F S 2 ˜ O ( | S | A )FSFS1FS2O~(|S|UMA)

Prova: aplique convolução 2D em duas tabelas de tamanho.UMA×|S|

O algoritmo particiona a sequência em duas seqüências de tamanho igual, aplica recursão a cada uma e obtém a soma minkowski do resultado. Seja o pior caso de tempo de execução quando a entrada do algoritmo tiver elementos e for um limite superior da soma. Temos que mostra .TUMA(n)nUMA

TUMA(n)=2TUMA(n/2)+UMAO~(n)
TUMA(n)=O~(nUMA)

O escondidos fator é .log n log n Aregistroregistro⁡nregistro⁡nUMA


3

Se alguém se importa com os fatores de , com uma análise cuidadosa, podemos provar que a complexidade do tempo para o algoritmo de Chao é O ( n A log ( n A ) ) .registroO(nUMAregistro⁡(nUMA))

Prova. Na nona camada da árvore de recursão, dividimos o conjunto em dois conjuntos de tamanho igual S 1 e S 2 , o que fornece T e ( n , A ) = T o ( n / 2 , A ′ ) + T o ( n / 2 , A - A ′ ) + O ( n A log ( n A ) ) ,SS1S2

Te(n,UMA)=To(n/2,UMA′)+To(n/2,UMA-UMA′)+O(nUMAregistro⁡(nUMA)),
e na camada ímpar da árvore de recursão, particionamos o conjunto em dois conjuntos "igualmente somados" S 1 e S 2 . Para ser mais preciso, podemos particionar um conjunto S com a soma A em dois conjuntos S 1 e S 2 com cada um deles somando ≤ A / 2 , com no máximo um elemento restante. Podemos lidar com esse elemento com programação dinâmica trivial em O ( A ) . Isso fornece T o ( n , A ) = T eSS1S2SUMAS1S2≤UMA/2O(UMA) que n 1 = | S 1 | . Portanto, temos T ( n , A ) ≤ 4 ∑ i = 1 T ( n i ,
To(n,UMA)=Te(n1,UMA/2)+Te(n-n1,UMA/2)+O(nUMAregistro⁡(nUMA)),
n1=|S1| onde ∑ 4 i = 1 n i ≤ n , ∑ 4 i = 1 A i ≤ A , e ∀ i , n i ≤ n / 2 , A i ≤ A / 2 . Isso nos dará T ( n , A )
T(n,UMA)≤∑Eu=14T(nEu,UMAEu)+O(nUMAregistro⁡(nUMA)),
∑Eu=14nEu≤n∑Eu=14UMAEu≤UMA∀Eu, nEu≤n/2, UMAEu≤UMA/2 .T(n,UMA)=O(nUMAregistro⁡(nUMA))
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.