Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 没有“的定义;“正方形”;为什么这个函数较慢?_Scheme_Sicp - Fatal编程技术网

Scheme 没有“的定义;“正方形”;为什么这个函数较慢?

Scheme 没有“的定义;“正方形”;为什么这个函数较慢?,scheme,sicp,Scheme,Sicp,该问题位于SICP中(练习1.26) 它说,如果没有“正方形”的定义,它的运行速度会变慢。 它的目的是检查数字是否是素数。 这是更快的版本: 如果没有“正方形”的定义,请使用 据说是O(n)如果不使用平方,则需要计算(expmod base(/exp 2)m)两次。如果您使用let绑定结果并将其传递给square,那么它的复杂性将是相同的。如果您不使用square,则需要计算(expmod base(/exp 2)m)两次。如果将结果与let绑定,并将其传递给square,则其复杂性相同。使其

该问题位于SICP中(练习1.26) 它说,如果没有“正方形”的定义,它的运行速度会变慢。 它的目的是检查数字是否是素数。 这是更快的版本:

如果没有“正方形”的定义,请使用


据说是O(n)

如果不使用
平方
,则需要计算
(expmod base(/exp 2)m)
两次。如果您使用
let
绑定结果并将其传递给
square
,那么它的复杂性将是相同的。

如果您不使用
square
,则需要计算
(expmod base(/exp 2)m)
两次。如果将结果与
let
绑定,并将其传递给
square
,则其复杂性相同。

使其更快的不是
square
过程,而是中间值的缓存。使用
let
将使它同样快速:

(let ((tmp (expmod base (/ exp 2) m))) 
  (* tmp tmp))

关键是
(expmod base(/exp 2)m)
只执行一次

使它更快的不是
square
过程,而是中间值的缓存。使用
let
将使它同样快速:

(let ((tmp (expmod base (/ exp 2) m))) 
  (* tmp tmp))
关键是
(expmod base(/exp 2)m)
只执行一次