Algorithm 以时间复杂性O(1)执行通电操作

Algorithm 以时间复杂性O(1)执行通电操作,algorithm,Algorithm,在下面的文章中,我试图理解如何实现时间复杂度为O(1)的power操作 算法: 常数时间函数使用对数,并受 浮点错误: (定义(功率常数be) (exp(*(logb)e))) >(跟踪功率常数) (功率常数) >(功率常数2 16) |(功率常数2 16) |65535.999999998 65535.99999998 有人能解释为什么这个算法有效吗? 为什么是O(1)?它是如何工作的: A=exp(ln(A))和ln(A^B)=B*ln(A),因此A^B(如A到B)等于exp(ln(A^B

在下面的文章中,我试图理解如何实现时间复杂度为O(1)的power操作

算法:

常数时间函数使用对数,并受 浮点错误:

(定义(功率常数be)
(exp(*(logb)e)))

>(跟踪功率常数)
(功率常数)
>(功率常数2 16)
|(功率常数2 16)
|65535.999999998
65535.99999998

有人能解释为什么这个算法有效吗? 为什么是O(1)?

它是如何工作的:
A=exp(ln(A))
ln(A^B)=B*ln(A)
,因此
A^B
(如A到B)等于
exp(ln(A^B))
,即
exp(B*ln(A))
;使用scheme/lisp的前缀表示法重写该函数将生成所示的函数。如果内存可用,这与使用的幻灯片规则相同(尽管它们也利用了
ln(a*b)=ln(a)+ln(b)
,我的想法是加法比乘法容易,但我接触的幻灯片规则仅限于一位古怪的高中物理老师和一位密码老师,他们用它来解释大数数学中的某些技巧

为什么是O(1):
我不同意这种说法,即对于任意大小的数字,这是O(1)。我已经很久没有研究过大数对数/幂运算的O复杂性了,但我很确定它们不是O(1)关于数字的大小,但另一方面,这些是用于无损数学的。对于受限于浮点数大小的数字,这些操作相当好地近似于O(1),但会失去精度。

其工作原理:
A=exp(ln(A))
ln(A^B)=B*ln(A)
,因此
A^B
(在A到B中)等于
exp(ln(A^B))
,这是
exp(B*ln(A))
;使用scheme/lisp的前缀符号重写它会产生所示的函数。如果内存可用,这与使用的幻灯片规则相同(虽然他们也利用了
ln(a*b)=ln(a)+ln(b)
,他们的想法是加法比乘法容易,但我接触的幻灯片规则仅限于一位古怪的高中物理老师和一位密码老师,他用它来解释大数数学的某些技巧。)

为什么是O(1):
我不同意这种说法,即对于任意大小的数字,这是O(1)。我已经很久没有研究过大数对数/幂运算的O复杂性了,但我很确定它们不是O(1)关于数字的大小,但另一方面,这些是用于无损数学的。对于受限于浮点数大小的数字,这些操作相当好地近似于O(1),但会失去精度。

其工作原理:
A=exp(ln(A))
ln(A^B)=B*ln(A)
,因此
A^B
(在A到B中)等于
exp(ln(A^B))
,这是
exp(B*ln(A))
;使用scheme/lisp的前缀符号重写它会产生所示的函数。如果内存可用,这与使用的幻灯片规则相同(虽然他们也利用了
ln(a*b)=ln(a)+ln(b)
,他们的想法是加法比乘法容易,但我接触的幻灯片规则仅限于一位古怪的高中物理老师和一位密码老师,他用它来解释大数数学的某些技巧。)

为什么是O(1):
我不同意这种说法,即对于任意大小的数字,这是O(1)。我已经很久没有研究过大数对数/幂运算的O复杂性了,但我很确定它们不是O(1)关于数字的大小,但另一方面,这些是用于无损数学的。对于受限于浮点数大小的数字,这些操作相当好地近似于O(1),但会失去精度。

其工作原理:
A=exp(ln(A))
ln(A^B)=B*ln(A)
,因此
A^B
(在A到B中)等于
exp(ln(A^B))
,这是
exp(B*ln(A))
;使用scheme/lisp的前缀符号重写它会产生所示的函数。如果内存可用,这与使用的幻灯片规则相同(虽然他们也利用了
ln(a*b)=ln(a)+ln(b)
,他们的想法是加法比乘法容易,但我接触的幻灯片规则仅限于一位古怪的高中物理老师和一位密码老师,他用它来解释大数数学的某些技巧。)

为什么是O(1):

我不同意这种说法,即对于任意大小的数字,这是O(1)。我已经很久没有研究过大数对数/幂运算的O复杂性了,但我很确定它们不是O(1)关于数字的大小,但另一方面,这些是用于无损数学的。对于限制为浮点数大小的数字,这些运算相当好地近似于O(1),但限制是您会失去精度。

我是编程实践的作者。感谢阅读!当然,您可以在Stack Overflow在这里提问,但也欢迎您在编程实践的评论部分提问。要回答您的问题:

首先,它是有效的,因为这是对数的数学定义。要将两个数字相乘,取它们的对数,将对数相加,然后取和的反对数;在编程术语中:x×y=exp(log(x)+log(y))。加电操作取基数的对数,将对数乘以指数,然后取乘积的反对数;在编程术语中,x y=exp(log(x)×y)

第二,只有当