【发布时间】:2014-09-03 01:18:39
【问题描述】:
我目前正在阅读由 Hailperin、Kaiser 和 Knight 撰写的 Scheme 书籍“具体抽象”。我已经编写了相同算法的递归和迭代版本,如下所示。该算法用于对数量或事物执行 n 次操作。所以,一般来说,一起复制(操作n件事)。例如,我可以找到 3 个像这样的立方体,一起复制 (* 3 3) 或 3 个平方的一起复制 (* 2 3)。
递归版本:
(define together-copies-of-linrec
(lambda (combine quantity thing)
(define together-iter
(lambda (combine start thing)
(if (= start quantity)
thing
(combine (together-iter combine (+ start 1) thing)
thing))))
(together-iter combine 1 thing)))
迭代版本:
(define together-copies-of-linit
(lambda (combine quantity thing)
(define together-iter
(lambda (combine start newthing)
(if (= start quantity)
newthing
(together-iter combine (+ start 1) (combine newthing thing)))))
(together-iter combine 1 thing)))
现在,我需要编写这个算法的对数时间版本,但我真的不知道从哪里开始。在这种情况下,我看不出如何减少每个实例的操作以使其成为对数时间。
【问题讨论】:
标签: algorithm scheme time-complexity