方案中'assoc'功能的时间复杂度是多少?

时间:2009-06-23 21:22:14

标签: lisp scheme

这个漂亮的函数'assoc'的时间复杂度是多少?

1 个答案:

答案 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