Lisp '的时间复杂度是多少;协会';计划中的功能?

Lisp '的时间复杂度是多少;协会';计划中的功能?,lisp,scheme,Lisp,Scheme,这个漂亮的函数“assoc”的时间复杂度是多少?我假设assoc是O(n)*,假设相等?在使用函数时是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 *从技

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

我假设
assoc
是O(n)*,假设
相等?
在使用函数时是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
的大小,m是v的大小或关联列表中实际的平均键大小中较小的一个。@Svante:true,但最坏的情况是v比assoc列表中的每个键都小,所以它仍然有效