【发布时间】:2017-07-03 03:33:18
【问题描述】:
我必须通过在 c++ 中使用向量来执行乘法运算,例如,要将数字 123 和 528 相乘,我必须将每个数字存储在向量中并将它们相乘。我的导师提供了一个乘法算法。以下段落的第一行可能看起来有点混乱,但我想让您知道,我只是在重载 operator* 以使用向量执行两个数字之间的乘法。
ubigint::operator* 中的乘法通过分配一个新向量来进行,该向量的大小等于其他两个操作数的大小之和。如果 u 是大小为 m 的向量,v 是大小为 n 的向量,则以 O(mn) 速度,对一个参数执行外循环,对另一个参数执行内循环,将新的部分乘积添加到乘积 p就像你用手一样。该算法在数学上可以描述如下:
p ←Φ
for i ∈ [0, m):
c ← 0
for j ∈ [0, n):
d ← p_{i+ j} + u_iv_j + c
p_{i+ j} ← d % 10
c ← ceil(d÷10)
p_{i+n} ← c
注意区间 [a,b) 指的是集合 {x|a ≤ x
问题是我不明白这个算法是如何工作的。例如,什么是 u_iv_j?。有人可以解决这个问题吗?
【问题讨论】:
-
我相信这意味着
u_i × v_j -
你可能在很小的时候就被教过这个算法——但是以一种非正式的方式——并且已经使用了数百次。
-
什么是“向量乘法”?请定义或参考!你所说的与我所知道的两者没有任何共同之处。它们与数字乘法无关。顺便说一句,你把数字和数字混在一起了,你注意到了吗?