O algoritmo de multiplicação de Schönhage-Strassen funciona transformando multiplicações de tamanho em muitas multiplicações de tamanho com uma transformação teórica numérica e recorrendo. Pelo menos eu acho que é o que faz, porque há alguma outra inteligência e eu realmente não a entendo o suficiente para resumir com precisão. Ele termina em .
Uma transformação teórica numérica é exatamente como uma Transformada Discreta de Fourier , exceto que é feita no campo finito do número inteiro módulo . Isso torna as operações muito mais baratas, uma vez que a transformação de Fourier se multiplica por raízes da unidade, e as raízes da unidade de são todas potências de 2, para que possamos mudar! Além disso, números inteiros são muito mais fáceis de trabalhar do que números complexos de ponto flutuante.
De qualquer forma, o que me confunde é que é muito grande. Se eu fornecer um elemento aleatório de , são necessários bits para especificá-lo. Portanto, a adição de dois elementos deve levar tempo . E a DFT faz muita adição.
Schönhage – Strassen divide a entrada em grupos com bits . Esses grupos são os valores de que ele transformará. Cada passagem do DFT terá adições / subtrações, e há . Portanto, com base na adição que leva tempo , parece que o custo de todas essas adições deve ser , que é assintoticamente o mesmo que .
Podemos fazer um pouco melhor que isso ... porque os valores começam muito pequenos, as adições são muito escassas. As adições da primeira passagem realmente custam apenas cada, e a segunda passagem 'custa cada, e a i-ésima passagem' custa cada, mas isso ainda totaliza um terrível .
Como Schönhage – Strassen está tornando as adições baratas? Quanto eles custam no geral?
É porque o algoritmo realmente usa (com garantido que é uma potência de 2)? Há bastante e alemão empilhados no jornal que eu realmente não tenho certeza. Por outro lado, não acho que isso garanta raízes de unidade suficientes para que as coisas funcionem.