OCaml中两个列表之间的比较复杂度是多少?

时间:2014-01-17 11:05:29

标签: ocaml

如果l1和l2是两个列表,l1 = l2费用为O(N)还是O(1)

更进一步的问题:

如果l1=l2,l1和l2会共享相同的物理内存吗?

字符串怎么样? s1 = s2费用为O(1)

1 个答案:

答案 0 :(得分:4)

对于结构比较=,你需要至少看到所有数据,所以它(几乎,见下面的注释)总是O(n)对于最坏情况下的列表和字符串(相等的值)。物理比较==是O(1)你只是比较指针。

但请注意,在您自己的数据结构中,可以通过在值构造期间确保没有两个结构上相等的值将使用不同的物理内存来实现结构比较作为物理比较。这称为哈希值,您可以在this论文(doi)中找到更全面的解释。

通常,对于列表,您无法从l1 = l2推断它们共享相同的物理内存,因为它取决于它们是如何构造的,因为OCaml不是哈希 - 缺点列表。这也适用于字符串。