Lisp '的时间复杂度是多少;协会';计划中的功能?
这个漂亮的函数“assoc”的时间复杂度是多少?我假设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
是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列表中的每个键都小,所以它仍然有效