这个漂亮的函数'assoc'的时间复杂度是多少?
答案 0 :(得分:6)
我假设assoc
是O(n)*,假设equal?
在函数的使用中是O(1)。这是因为编写自己的assoc
版本
(define (my-assoc v lst)
(cond ((null? lst) #f)
((equal? v (caar lst)) (car lst))
(else (my-assoc v (cdr lst)))))
您可以看到这只是向下滑动列表lst
,直到找到匹配项。如果未找到,则返回#f
。
*技术上equal?
是O(n),其中n是较小输入的大小,因此如果您使用assoc
比较大型列表结构,则运行时将为O(n * m) )n
是提供给assoc
的列表大小,m
的大小是v
。