【问题标题】:What is the space complexity of HashTable, Array, ArrayList, LinkedList etc(if anything more)HashTable、Array、ArrayList、LinkedList 等的空间复杂度是多少(如果还有的话)
【发布时间】:2010-06-23 18:05:28
【问题描述】:

我想知道流行语言中基本数据结构的空间复杂度。

【问题讨论】:

  • 您应该选择一种语言,并列出该语言的名称。 C++ 在其标准库中没有任何这样的类名:)
  • 您能否再解释一下您的目标是什么?顺便说一句,这听起来像是一个家庭作业问题,恕我直言:)
  • 要么将其限制为一种语言/框架,要么提出与语言无关的数据结构的问题。现在的措辞方式几乎不可能可靠地回答。
  • 我想要一个能够思考这类问题的程序员社区。​​span>
  • 好吧,我基本上是在 java 中寻找答案.....如果得到有关这些数据结构的实现、插入项目、删除项目等的时间复杂度的答案,将会很有帮助。 . 这不是一个家庭作业问题,而是渴望了解更多!

标签: c# java javascript c++ python


【解决方案1】:

所有这些都具有 O(n) 的空间复杂度。改变的只是系数,这完全取决于实现。尤其是当您开始处理诸如预先分配空间以降低时间复杂度之类的事情时。

例如,数组列表结构通常会预先分配额外的空间。因此,它们对于许多对象的确切复杂性实际上是一个完全取决于实现以及它们是如何创建和使用的范围。例如,如果我编写一个数组列表,它总是在需要更多空间时分配三个额外的空间,并且当有超过 5 个开放空间时总是释放到三个开放空间,那么 n 的实际复杂度将是 [n, n + 5] + overhead

编程时在这些项目之间进行选择的最大区别通常在于易用性以及它与您将如何使用它的匹配程度。例如,链表不适合随机访问,但很适合迭代。

【讨论】:

    【解决方案2】:

    对于 Java:(近似值)

    内存 O(x) |一般情况 数组 | n | n 数组列表 | n | 2 * n 链表| n | n *(节点大小) 哈希表 | n | 〜n 地图 | n | (n * key_size) + n

    【讨论】:

    • “一般”到底是什么意思?
    • @bdonlan 这是我对结构的一般实现的内存使用的最佳猜测。
    • 这并没有多大意义。对于数组,n 是否意味着 n 个字节?如果它意味着n个项目,那么linkedlist是n *节点大小*项目大小字节......?
    • @bdonlan 我认为它是 n = 项目数 * 它们的大小。因此,一个数组将占用 n 个元素。这不应该是官方文档...
    • 我的意思是,数学有些地方是错误的。 LinkedList = number of items * item size * node size 具有维度 byte^2。您与 n 的含义不一致,因此您给出的方程式毫无意义...
    【解决方案3】:

    几乎所有具有非平凡大小的数据结构都在 n 的 ORDER 上。

    • 数组 = 正好 n
    • ArrayList = 在n 和k*n 之间(默认k=2)
    • LinkedList = 正好 n
    • HashTable = 最差是 n/k(默认 k 是 0.75)

    【讨论】:

    • 链表正好是 n,'ay?哈希表需要更少的 n 空间来存储 n 个元素? :)
    • LinkedList 正好是 n。看看它的来源。它由一个标题条目和一个用于大小的 int 组成。也许我应该提到 int 大小?如果你对我的 HashTable 进行数学运算,你会看到 n/k,而不是 n*k。 - 例如,如果 n 为 1000,k 为 0.75,则 1000/.75 = 1334,显然大于 1000。
    • 如果这里要批评的话,那就是 ArrayList 和 HashTable 在你删除时不会缩小,所以 n 应该被解释为迄今为止最大的 n。
    猜你喜欢
    • 2019-02-02
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2015-06-06
    • 2020-03-10
    • 2018-07-23
    • 2011-09-25
    相关资源
    最近更新 更多