【发布时间】:2018-01-12 19:11:07
【问题描述】:
我正在尝试了解以下算法的时间复杂度(Big-O),该算法找到x 使得g^x = y (mod p)(即找到以 g 为模 p 的 y 的离散对数)。
这是伪代码:
discreteLogarithm(y, g, p)
y := y mod p
a := g
x := 1
until a = y
a := (a * g) mod p
x++
return x
end
我知道这种方法的时间复杂度是p 中的二进制位数的指数 - 但这意味着什么以及为什么它取决于 p?
我知道复杂度是由循环的数量决定的(until a = y),但是 p 是从哪里来的,这与二进制数字有关吗?
【问题讨论】:
-
对于正确的 g 值,a 将以狂野模式运行从 1 到 p-1 的所有值。因此,如果您尝试 y 的所有可能值,迭代次数将采用从 1 到 p-1 的所有可能值。平均而言,p/2。
标签: algorithm time-complexity big-o logarithm