【问题标题】:Time-complexity set-car! / set-cdr! in scheme时间复杂度设定车! /设置-cdr!在计划中
【发布时间】:2015-03-30 15:18:17
【问题描述】:

我想知道什么时间复杂度设置车!和设置-cdr!有在计划?我认为这是恒定的时间,但我可能错了,因为我不知道它们在内部是如何工作的。任何有想法的人?

【问题讨论】:

  • 这将取决于实现,因为它没有指定“它们如何在内部工作”。和你一样,我希望在大多数实现中它是恒定的时间。
  • 如果一个 Scheme 实现设法以某种方式实现它们,使它们不是恒定时间,我会觉得非常了不起。
  • @AlexisKing 在闭包方面,cons 的经典(教育)实现。如果词法闭包没有很好地实现,那么 set-cdr 和 set-car 可能会更慢。诚然,我不希望实现提供这些作为实际实现,但我可以在示例实现中看到这种情况。
  • @JoshuaTaylor 它可能会更慢,但它仍然是恒定时间,尽管具有更大的恒定因子。
  • @chris 它仍然取决于词法环境是如何实现的。如果这些是作为关联列表实现的,那么它很容易变得相当慢。

标签: scheme time-complexity sicp


【解决方案1】:

在任何合理的 Scheme 实现中,由于 conses 很常见,它们被实现为某种双字结构。在这样的实现中,car、cdr、set-car! 和 set-cdr! 都是恒定时间的。

正如 Alexis King 评论的那样,你必须有一个非常反常的实现,它才能不是恒定的时间。 (例如,如果将 cons 单元实现为 alist。)

【讨论】:

  • 没有恒定时间的唯一原因是您正在模拟数组/直接内存查找。我认为 shlisp 是一个,我的 Zozotez 是另一个。
猜你喜欢
  • 2012-03-17
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 2021-03-03
相关资源
最近更新 更多