【问题标题】:What does "#+(n) = " means in case of algorithms complexity?在算法复杂的情况下,“#+(n) =”是什么意思?
【发布时间】:2021-12-11 17:19:51
【问题描述】:
我正在阅读 Alexander A. Stepanov 和 Daniel E. Rose 的《从数学到通用编程》一书,第二章包含对埃及乘法算法的描述。它的复杂性描述为#+(n) = [log n] + (ν(n) - 1)。一般来说,这是完全可以理解的,但“#+”是什么意思?它是数学函数的一种符号形式还是什么?
【问题讨论】:
标签:
algorithm
math
language-agnostic
big-o
complexity-theory
【解决方案1】:
'#' 常表示“个数”,'+' 号用作索引。所以我们有“加法数”。
【解决方案2】:
在给出方程式之前的那本书中,作者说,
multiply1 要做多少次加法?
每次调用该函数时,我们都需要在 a+a 中执行 + 指示的加法。
由于我们在递归时将值减半,因此我们将调用
函数logn 次。有时,我们需要做
结果+a中的+表示另一个加法。
所以加法的总数将是
#+(n) = ⌊log n⌋ + (ν(n) − 1)
int multiply1(int n, int a) {
if (n == 1) return a;
int result = multiply1(half(n), a + a);
if (odd(n)) result = result + a;
return result;
}
bool odd(int n) { return n & 0x1; }
int half(int n) { return n >> 1; }