O que você tentou? Qual máquina e modelo de custo você assume?
Raphael
Respostas:
12
Usando a transformação rápida de Fourier, as multiplicações nos números de bits de podem ser feitas no tempo (onde o til significa que estamos ignorando os fatores polilogarítmicos). Ao quadrado repetido, podemos calcular com multiplicações, e cada multiplicação envolve nenhum número maior que , que possui aproximadamente bits. Portanto, a quantidade total de tempo necessária é .˜ O ( k ) n n 2 O ( log n ) n n 2 n 2 log 2 n ˜ O ( n 2 ( log n ) 2 ) = ˜ O ( n 2 )kO~(k)nn2O(logn)nn2n2log2nO~(n2(logn)2)=O~(n2)
Editado em resposta a comentários
O tempo para calcular pode ser decomposto no tempo necessário para calcular f 1 ( n ) = n 2 e no tempo necessário para executar n f 1 ( n ) . Assumirei que multiplicar um número de m bits por um número de n bits leva exatamente m n tempo pelo método do livro escolar; adições, etc. são de tempo constante. Como resultado, a computação n 2 leva o log 2f(n)=nn2f1 1( n ) = n2nf1 1( N )mnmnn2tempo.log22(n)
Suponha que usamos exponenciação binária para calcular . A exponenciação binária realiza dois tipos de operações na computação de : quadratura do produto atual e multiplicação do produto atual por n , dependendo se o bit atual na expansão binária de n 2 é 0 ou 1. No pior caso, n 2 é uma potência de dois, de modo que a exponenciação binária esquadria repetidamente seu produto atual até chegar à resposta. Observe que n 2 tem m ′ = ⌈ 2 log 2 ( n ) ⌉f ( n )f(n)f(n)nn2n2n2m′=⌈2log2(n)⌉bits, de modo que o número desses quadrados seja . Este é o caso que analisamos mais adiante.m=m′−1
O primeiro quadrado leva tempo, resultando em um produto o 1 = 2 log 2 ( n ) -bit. O segundo quadrado recebe dois números de 1 o bit e é executado em t 2 = o 2 1 vez, resultando em um produto de o 2 = 2 o 1 bits. Continuando, a i- ésima etapa leva t i = 4 i - 1 logt1=log22(n)o1=2log2(n)o1t2=o21o2=2o1itempo e emite umoi=2ilog2(N)produto de bits. Esse processo para nam-ésima etapa; como resultado, leva tempoti=4i−1log22noi=2ilog2(n)m
. Texp=∑[1..m]ti=log22(n)∑[1..m]4i=4m−13log22n
Quando o custo quadrático inicial é incluído, achamos que precisamos de tempo no máximo
Texp+log22n
Nota
Omiti alguns pisos e tetos nos cálculos, esperando que eles não afetassem materialmente a resposta.
Omiti deliberadamente uma análise baseada em em favor de um limite superior exato, apenas para ser rigoroso.
O
O raciocínio acima também deixa claro por que minha análise anterior foi falha. O notação foi utilizado de uma forma solta rápido-e-e-lo convenientemente omitido constantes de modo que, por exemplo, Σ t i mágica tornou-se O ( log n ) .
O∑tiO(logn)
As multiplicações podem ser sempre aceleradas pela FFT e outros métodos.
Como você obteve a complexidade para o cálculo de n 2 ? O(1)n2
4
Eu vou dizer que a multiplicação de dois números de bits leva tempo O ( log n ) em vez de tempo O ( 1 ) , você precisa entender isso também no custo da exponenciação binária. nO(logn)O(1)
27612 Mark Dominus
2
n2log2nn2log2nO(logn)
Ponto justo, eu vou tomar nota
PKG
11
@ Thomasmasndrews: Isso depende da máquina e do modelo de custo. Não é incomum assumir um modelo de RAM com custo constante para adições.
Respostas:
Usando a transformação rápida de Fourier, as multiplicações nos números de bits de podem ser feitas no tempo (onde o til significa que estamos ignorando os fatores polilogarítmicos). Ao quadrado repetido, podemos calcular com multiplicações, e cada multiplicação envolve nenhum número maior que , que possui aproximadamente bits. Portanto, a quantidade total de tempo necessária é .˜ O ( k ) n n 2 O ( log n ) n n 2 n 2 log 2 n ˜ O ( n 2 ( log n ) 2 ) = ˜ O ( n 2 )k O~(k) nn2 O(logn) nn2 n2log2n O~(n2(logn)2)=O~(n2)
fonte
Editado em resposta a comentários O tempo para calcular pode ser decomposto no tempo necessário para calcular f 1 ( n ) = n 2 e no tempo necessário para executar n f 1 ( n ) . Assumirei que multiplicar um número de m bits por um número de n bits leva exatamente m n tempo pelo método do livro escolar; adições, etc. são de tempo constante. Como resultado, a computação n 2 leva o log 2f(n)=nn2 f1 1( n ) = n2 nf1 1( N ) m n mn n2 tempo.log22(n)
Suponha que usamos exponenciação binária para calcular . A exponenciação binária realiza dois tipos de operações na computação de : quadratura do produto atual e multiplicação do produto atual por n , dependendo se o bit atual na expansão binária de n 2 é 0 ou 1. No pior caso, n 2 é uma potência de dois, de modo que a exponenciação binária esquadria repetidamente seu produto atual até chegar à resposta. Observe que n 2 tem m ′ = ⌈ 2 log 2 ( n ) ⌉f ( n )f(n) f(n) n n2 n2 n2 m′=⌈2log2(n)⌉ bits, de modo que o número desses quadrados seja . Este é o caso que analisamos mais adiante.m=m′−1
O primeiro quadrado leva tempo, resultando em um produto o 1 = 2 log 2 ( n ) -bit. O segundo quadrado recebe dois números de 1 o bit e é executado em t 2 = o 2 1 vez, resultando em um produto de o 2 = 2 o 1 bits. Continuando, a i- ésima etapa leva t i = 4 i - 1 logt1=log22(n) o1=2log2(n) o1 t2=o21 o2=2o1 i tempo e emite umoi=2ilog2(N)produto de bits. Esse processo para nam-ésima etapa; como resultado, leva tempoti=4i−1log22n oi=2ilog2(n) m
.Texp=∑[1..m]ti=log22(n)∑[1..m]4i=4m−13log22n
Quando o custo quadrático inicial é incluído, achamos que precisamos de tempo no máximo
Nota
fonte