“assoc”的时间复杂度是多少? 方案中的函数?

发布于 2024-07-26 02:14:02 字数 31 浏览 2 评论 0原文

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

What is the time complexity of this nifty function 'assoc'?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

屌丝范 2024-08-02 02:14:02

我假设 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

* 技术上等于? 是 O(n),其中 n 是较小输入的大小,因此如果您使用 assoc 比较巨大的列表结构,您的运行时间将为 O (n*m),其中 n 是提供给 assoc 的列表的大小,mv 的大小>。

I would assume that assoc is O(n)*, assuming that equal? is O(1) in your usage of the function. This is because it's trivial to write your own version of assoc:

(define (my-assoc v lst)
  (cond ((null? lst) #f)
        ((equal? v (caar lst)) (car lst))
        (else (my-assoc v (cdr lst)))))

You can see this simply slides down the list lst until a match is found. If none is found, #f is returned.

* technically equal? is O(n) where n is the size of the smaller input, so if you're comparing huge list structures using assoc, your runtime will be O(n*m) where n is the size of the list provided to assoc and m is the size of v.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文