【发布时间】:2016-10-27 15:28:10
【问题描述】:
所以,在分治法课程中,我们学到了:
- Karatsuba 乘法
- 快速求幂
现在,给定 2 个正整数 a 和 b 是 operator::* 比 karatsuba(a,b) 快或比 pow(a,b) 快
int fast_expo(int Base, int exp)
{
if (exp == 0) {
return 1;
}
if (exp == 1) {
return Base
}
if (exp % 2 == 0) {
return fast_expo(Base, exp / 2) * fast_expo(Base, exp / 2);
}
else {
return base * fast_expo(Base, exp / 2) * fast_expo(Base, exp / 2);
}
}
我问这个是因为我想知道它们是否只是为了教学目的,或者它们已经在 C/C++ 语言中实现了基础
【问题讨论】:
-
ints 不够高,不足以让这些东西有用。int乘法中的疯狂优化都是由英特尔等公司的人员进行的电气工程。 -
所以它们只有在我需要使用非常大的数字时才有用?
-
这是教授算法和边界条件的一个很好的例子。编译器的实际输出针对运行代码的 CPU 架构进行了高度优化。
-
没有语言 C/C++。如果您指的是两种不同的语言 C 和 C++,请选择 一种 (我改为 C++,因为您使用 C++ 表示法作为运算符)并澄清您的问题。并正确格式化这个烂摊子!
-
“最佳”在不了解上下文(即正在解决的问题)的情况下并没有真正的意义。