【问题标题】:Data structure with O(n) initialization and O(logn) insertion具有 O(n) 初始化和 O(logn) 插入的数据结构
【发布时间】:2017-01-21 08:45:45
【问题描述】:

是否有任何数据结构可以让我初始化运行时间为 O(n) 并插入到 O(logn) 中??

【问题讨论】:

  • 是否需要处理其他操作?如果不是,则在初始化时不执行任何操作并忽略所有插入的结构会在 O(1) 中完成所有操作。
  • 没有。如果插入是 O(lgn),那么插入 n 个元素(或初始化)是 n* O(lgn) 或 O(nlgn)。
  • 它需要处理 findmin - O(1) & deletemin - O(logn)
  • @Natezone 我认为您正在寻找一个堆。

标签: algorithm data-structures


【解决方案1】:

HashMap O(1) 用于插入和随机访问

【讨论】:

  • 对该响应的一个简短补充,HashMap 对于插入和随机访问具有 平均 O(1)。
  • 我不能使用HashMap,因为它是O(1),插入必须是O(logn)
【解决方案2】:

C++ std::set 需要 O(nlog(n)) 来初始化和 O(log(n)) 来插入/删除。
查找最小/最大元素需要 O(1) 使用:beginend,它将迭代器返回到排序集中的第一个/最后一个元素。

【讨论】:

    【解决方案3】:

    在 O(n) 中初始化,在 O(logn) 中插入,findmin (peek) - O(1) 和 deletemin - O(logn) 的结构是 Min-Heap - https://en.wikipedia.org/wiki/Binary_heap

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多