Алгоритм умножения для умножения числа г два Radix:Каково рекуррентное уравнение для этого алгоритма умножения?
0 <= x,y < r^n
x = x1 * r^(n/2) + x0
y = y1 * r^(n/2) + y0
, где x0
это половина x
, что содержит младшие цифры, и x1
составляет половину с наиболее значащими цифрами, и аналогичен для y
.
Так что если r = 10
и n = 4
, у нас есть x = 9723 = 97 * 10^2 + 23
, где x1 = 97 and x0 = 23
.
Умножение может быть сделано как:
z = x*y = x1*y1 + (x0*y1 + x1*y0) + x0*y0
Таким образом, мы теперь имеем четыре умножений половинного размера чисел (мы первоначально имели умножение п значных чисел, и теперь мы имеем четыре умножений n/2
значные номера).
Как я вижу это повторение для этого алгоритма:
T(n) = O(1) + 4*T(n/2)
Но, видимо, это T(n) = O(n) + 3T(n/2)
В любом случае, решение T(n) = O(n^2)
, и я могу видеть это, но мне интересно, почему существует термин O (n) вместо термина O(1)
?
Он очень похож на Карацуба (https://en.wikipedia.org/wiki/Karatsuba_algorithm). Сейчас я нахожусь в поезде и собираюсь потерять интернет-соединение; если вопрос до открытия через два часа, я доберусь до него.:) – blazs