【问题标题】:Finding proper data structure c++找到合适的数据结构 c++
【发布时间】:2012-10-19 14:36:41
【问题描述】:

我正在寻找一些简单的实现数据结构,可以在最短的时间内满足我的需求(在最坏的情况下):-

(1)弹出第 n 个元素(我必须保持元素的相对顺序不变)
(2)访问第 n 个元素 .

我不能使用 array 因为它不能弹出,我不想在删除第 i 个元素后有间隙。我试图通过将第 n 个元素与 next 再次与 next 直到 last 交换来消除差距,但这证明时间效率低下,尽管数组的 O(1) 是无与伦比的。

我尝试使用向量并使用 'erase' 来弹出弹出窗口和 '.at()' 来访问权限,但即使这样在时间效率上也并不便宜,尽管它比数组更好。

【问题讨论】:

  • 堆栈不适合这个吗?
  • @BhanuKaushik 你打算如何使用堆栈来完成其中的任何一个?
  • 我的错。我想我误解了。道歉!
  • @BhanuKaushik ,堆栈显然在这两种情况下都更糟糕,也比具有 O(n),O(n) 复杂性的数组和向量最差,而数组提供 O(n) 和 O(1)和向量提供 O(t-n) & O(1) :这里的堆栈和队列简直是最糟糕的!
  • std::deque 怎么样?虽然我真的不知道。

标签: data-structures


【解决方案1】:

您可以尝试的是skip list - 它支持您在 O(log(n)) 中请求的操作。另一种选择是tiered vector,它实现起来稍微容易一些,并且需要 O(sqrt(n))。这两种结构都很酷,但可惜不是很受欢迎。

【讨论】:

  • 是的,我知道分层也可能是一个不错的选择,我会试试看:)
  • @izomorphuis ,可以给出一个显示“分层向量”实现的链接,它真的很有趣
  • 前段时间我已经实现了,相信我已经使用了我发给你的smae文章。如果您知道如何在数组分层向量中执行循环队列,那就很简单了。我也许能找到我的源代码,但我不确定它是否是“供公众使用”;)
【解决方案2】:

好吧,我认为在数组上实现的分层向量最适合您的目的。虽然分层向量的概念一开始可能是知道的并且有点难以理解,但是一旦你得到它,它就会打开很多问题,你会得到一个方便的武器来非常有效地处理许多问题的数据结构部分。 所以建议你掌握分层向量的实现

【讨论】:

    【解决方案3】:

    数组将为您提供O(1) 查找但O(n) 删除元素。 列表将为您提供O(n) 查找错误O(1) 删除元素。

    二叉搜索树将为您提供O(log n) 查找和O(1) 删除元素。但它不保留相对顺序。

    与列表结合使用的二叉搜索树将为您提供两全其美的效果。将节点插入列表(以保持顺序)和树(快速查找)。删除将是O(1)

    struct node {
       node* list_next;
       node* list_prev;
       node* tree_right;
       node* tree_left;
    
       // node data;
    };
    

    请注意,如果使用索引作为排序值将节点插入树中,您最终将得到另一个链表假装是一棵树。 tree can be balanced however in O(n) 时间一旦构建,您只需承担一次。

    更新

    考虑更多,这可能不是最适合您的方法。我习惯于查找数据本身而不是它在集合中的相对位置。这是一种以数据为中心的方法。一旦删除节点,使用索引作为排序值就会中断,因为“更高”的索引需要更改。

    【讨论】:

    • 好的,我会试试看 :),但有一个问题,我不需要在第 n 次弹出后一次又一次地排序吗?
    • 是的,我更新了我的帖子。我刚刚阅读了@izomorphius 提到的分层向量,这可能更合适。
    【解决方案4】:

    警告:不要认真对待这个答案。

    理论上,你可以在 O(1) 中做到这两个。假设这是您要优化的唯一操作。以下解决方案将需要大量空间(并且会泄漏空间),并且创建数据结构需要很长时间:

    使用数组。在数组的每个条目中,指向另一个相同的数组,但删除了该条目。

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2014-06-18
      • 1970-01-01
      相关资源
      最近更新 更多