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 ( n Um log( n A ) )
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 , A ) = To( n / 2 , A′) + To( n / 2 , A - A′) + O ( n Um log( n A ) ) ,
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≤ A / 2O ( A )
que
n 1 = | S 1 | . Portanto, temos
T ( n , A ) ≤ 4 ∑ i = 1 T ( n i ,To( n , A ) = Te( n1, A / 2 ) + Te( n - n1, A / 2 ) + O ( n A log( n A ) ) ,
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 , A ) ≤ ∑i = 14T( nEu, AEu) + O ( n Um log( n A ) ) ,
∑4i = 1nEu≤ n∑4i = 1UMAEu≤ A∀ i , n Eu≤ n / 2 , A Eu≤ A / 2 .
T( n , A ) = O ( n A log( n A ) )