一组部分有序元素的持久数据结构是什么?


15

我需要存储类型为a的元素集。类型a是部分排序的,因此比较和可以返回更小,更大,相等或不可比的结果。一种1个一种2

哈希表的一个问题是,两个相等的元素可以用不同的方式表示,并且我无法访问与相等一致的哈希函数。

比较两个元素可能是一个漫长的过程,因此最小化比较会很有趣。如果需要,可以记住对比较运算符的调用。我现在意识到,我只需要存储反链(或者假设是这样)。更准确地说,我将需要执行的操作如下:

  • 从反链中删除一个元素;
  • 尝试添加一个元素。如果元素小于成员,则不要添加它,否则,添加它并删除所有小于它的元素。

我还可以用两个整数来绑定每个元素,因此,如果我知道和,那么知道立刻给我。当然,并不意味着 ...与完整的元素比较相比,找到整数范围是一个相对便宜的操作。一世1个<一种<一世2一世3<b<一世4一世2<一世3一种<b一世2一世3一种b


1
我认为我们需要了解更多信息,才能明智地回答您的问题。您是否存储了元素并且可以轻松地计算偏序?或者您是否还在某种查找表中存储了部分顺序?您打算如何使用偏序?您是否希望以与线性顺序存储集相同的方式使用它(例如在搜索树中)?
安德烈·鲍尔

既然我意识到我只会有反链,那么我不确定有什么比将结果存储在列表中的天真的解决方案更好的了。如果是这样,对不起,麻烦!
阿卜杜拉

如果您认为您的问题现在有争议,也许您应该将其标记为删除/结束?
Suresh Venkat

1
集合中的任何两个元素都是无与伦比的,但这并不意味着幼稚的表示是您可以做的最好的事情。例如,考虑按包含顺序排序的有限多重集(=具有除数顺序的整数):根据数据表示(使用基数,使用支持集,…),存在很大的优化潜力。这些优化将在很大程度上取决于订单关系的性质。然后是另一个问题,即决定是否值得保留有关现在删除的元素的信息:您是否经常将它们与新添加的元素进行比较?
吉尔(Gilles)'所以

好的谢谢。因此,我添加了一些可能导致优化的信息(整数包围可能性)。
阿卜杜拉

Answers:


8

Daskalakis,Karp,Mossel,Risensefield,Verbin于2008年发表的论文“ PoSet中的排序和选择”描述了基于反链的PoSet的动态表示。

您可能也对最近在Arxiv上发表的Niroson 的Munro,Nicholson撰写的论文“ Succinct Posets”及其书目感兴趣。它们的数据结构是静态的,但我认为下一步就是要建立动态的数据结构。


Posets中的Sorting and Selection很好地了解了数据结构所需的内容,但是算法假设在Posset中元素的标签(例如,我们首先要解决的问题!)在Oq n 查询中建立数据结构后,计算O1 )中两个元素之间的关系。因此,本文假设对两个元素之间的关系的查询是昂贵的,而对姿态图的映射元素的查询是微不足道的,而地图数据结构通常假定前者的反面才能解决后者。Ø1个Ø1个Øqñ
塞巴斯蒂安·格拉夫

将图表示为链的(最小)分解是很好的洞察力。但是,通过删除保留不变性是棘手的。
塞巴斯蒂安·格拉夫

4

Ølgñ


1
请注意,这仅涵盖“树状”的部分顺序,例如,见面语义,其中所有小于或等于某个元素的元素e形成一条链。
塞巴斯蒂安·格拉夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.