Que has intentado ¿Qué modelo de máquina y costo asume?
Raphael
Respuestas:
12
Al usar la transformada rápida de Fourier, las multiplicaciones en los números de bits se pueden hacer en el tiempo (donde la tilde significa que estamos ignorando los factores polilogarítmicos). Al cuadrar repetidamente, podemos calcular con multiplicaciones, y cada multiplicación no implica un número mayor que , que tiene aproximadamente bits. Entonces, la cantidad de tiempo total requerida es .˜ 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 en respuesta a comentarios
El tiempo para calcular se puede descomponer en el tiempo requerido para calcular y el requerido para realizar . Asumiré que multiplicar un número de bits por un número de bits requiere exactamente tiempo por el método del libro escolar; adiciones, etc. son tiempo constante. Como resultado, calcular lleva tiempo.f(n)=nn2f1(n)=n2nf1(n)mnmnn2log22(n)
Supongamos que usamos exponenciación binaria para calcular . La exponenciación binaria realiza dos tipos de operaciones al calcular : cuadrar el producto actual y multiplicar el producto actual por , según si el bit actual en la expansión binaria de es 0 o 1. En el peor de los casos , es una potencia de dos, de modo que la exponenciación binaria cuadra repetidamente su producto actual hasta que alcanza la respuesta. Tenga en cuenta que tiene bits, de modo que el número de tales cuadrados es . Este es el caso que analizamos más adelante.f(n)f(n)nn2n2n2m′=⌈2log2(n)⌉m=m′−1
La primera cuadratura lleva tiempo, lo que da como resultado un producto -bit. La segunda cuadratura realiza en dos números de bits y se ejecuta en tiempo, resultando en un producto bits. Continuando, el -ésimo paso lleva tiempo y genera un producto -bit. Este proceso se detiene en el -ésimo paso; Como resultado, lleva tiempot1=log22(n)o1=2log2(n)o1t2=o21o2=2o1iti=4i−1log22noi=2ilog2(n)m
Texp=∑[1..m]ti=log22(n)∑[1..m]4i=4m−13log22n .
Cuando se incluye el costo inicial de cuadratura, descubrimos que necesitamos tiempo como máximo
Texp+log22n
Nota
Omití algunos pisos y techos en los cálculos, con la esperanza de que no afectarían materialmente la respuesta.
Deliberadamente omití un análisis basado en a favor de un límite superior exacto solo para ser riguroso.
O
El razonamiento anterior también deja en claro por qué mi análisis anterior fue defectuoso. La notación se usó de manera rápida y flexible, y convenientemente omitió constantes para que, por ejemplo, se convirtiera mágicamente en .
∑ t i O ( log n )O∑tiO(logn)
Las multiplicaciones siempre se pueden acelerar con FFT y otros métodos.
¿Cómo ha obtenido la complejidad para el cálculo de ? n 2O(1)n2
44
Voy a decir que la multiplicación de dos números de bits requiere tiempo lugar de tiempo , también debe calcular eso en el costo de la exponenciación binaria. O ( log n ) O ( 1 )nO(logn)O(1)
Mark Dominus
2
Tenga en cuenta que el resultado final tiene bits. Es muy difícil calcular bits en el tiempo . n 2 log 2 n O ( log n )n2log2nn2log2nO(logn)
Punto justo, tomaré nota
PKG
1
@ThomasAndrews: Eso depende de la máquina y el modelo de costo. No es inusual suponer un modelo de RAM con un costo constante para las adiciones.
Respuestas:
Al usar la transformada rápida de Fourier, las multiplicaciones en los números de bits se pueden hacer en el tiempo (donde la tilde significa que estamos ignorando los factores polilogarítmicos). Al cuadrar repetidamente, podemos calcular con multiplicaciones, y cada multiplicación no implica un número mayor que , que tiene aproximadamente bits. Entonces, la cantidad de tiempo total requerida es .˜ 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)
fuente
Editado en respuesta a comentarios El tiempo para calcular se puede descomponer en el tiempo requerido para calcular y el requerido para realizar . Asumiré que multiplicar un número de bits por un número de bits requiere exactamente tiempo por el método del libro escolar; adiciones, etc. son tiempo constante. Como resultado, calcular lleva tiempo.f(n)=nn2 f1(n)=n2 nf1(n) m n mn n2 log22(n)
Supongamos que usamos exponenciación binaria para calcular . La exponenciación binaria realiza dos tipos de operaciones al calcular : cuadrar el producto actual y multiplicar el producto actual por , según si el bit actual en la expansión binaria de es 0 o 1. En el peor de los casos , es una potencia de dos, de modo que la exponenciación binaria cuadra repetidamente su producto actual hasta que alcanza la respuesta. Tenga en cuenta que tiene bits, de modo que el número de tales cuadrados es . Este es el caso que analizamos más adelante.f(n) f(n) n n2 n2 n2 m′=⌈2log2(n)⌉ m=m′−1
La primera cuadratura lleva tiempo, lo que da como resultado un producto -bit. La segunda cuadratura realiza en dos números de bits y se ejecuta en tiempo, resultando en un producto bits. Continuando, el -ésimo paso lleva tiempo y genera un producto -bit. Este proceso se detiene en el -ésimo paso; Como resultado, lleva tiempot1=log22(n) o1=2log2(n) o1 t2=o21 o2=2o1 i ti=4i−1log22n oi=2ilog2(n) m
Cuando se incluye el costo inicial de cuadratura, descubrimos que necesitamos tiempo como máximo
Nota
fuente