【问题标题】:copying data structures and space complexity复制数据结构和空间复杂度
【发布时间】:2014-10-11 00:12:03
【问题描述】:

我经常被要求编写函数,这些函数采用某种类型的参数(例如字符串)并以某种方式对其进行操作,如果它是某种其他数据结构会容易得多。我是否可以将字符串转换为字符数组并将字符串设置为 null,同时考虑我的函数占用 O(1) 空间,或者即使我立即删除另一个副本,复制所有元素也会使其变为 O(N)?我以字符串为例,因为它们是不可变的。在另一种情况下,我会尝试从一个结构中删除数据,同时将其添加到另一个结构中。

我只是在这里使用 String 和 char[] 作为示例。一般来说,我想知道即使我正在删除另一个副本,复制我的数据是否会降低算法的空间复杂度。

【问题讨论】:

    标签: algorithm space-complexity


    【解决方案1】:

    复制会降低您的空间复杂性,因为原始文件和副本同时在内存中(即使只是短暂的情况),因此您需要有额外的可用内存。即使您没有更多可用内存,内存中的算法也能够执行。

    【讨论】:

    • 如果我可以在构建另一个结构时从一个结构中删除,我是否认为我的函数只需要 O(1) 空间?就像我可以在从堆栈中删除时添加到数组列表一样?
    • @user137717 这是正确的,假设您有一个用于数组列表的恒定大小缓冲区(而不是当前大小的某个百分比的缓冲区)
    • @user137717 我需要修改该注释 - 当调整数组列表的大小时,它通常需要执行另一个副本(例如,您有一个数组列表大小 n,您分配了一个新的数组列表大小 @987654322 @ + 10,将旧数组复制到新数组,并释放旧数组),这意味着复制需要线性空间。为了让它需要恒定的空间,您需要复制到类似分块列表(数组链表)的东西中。请注意,像 C 这样的语言可能允许使用 realloc 就地调整数组大小(尽管这取决于 realloc 实现)
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2016-04-08
    相关资源
    最近更新 更多