我有一组S
类型T
的元素。类型<=
的元素有一个部分订单T
。众所周知,S
中的所有元素都没有排序。
然后,我需要一种方法来执行以下查询:具有e
类型的元素T
,在e'
中找到S
,以便e <= e'
< / em>的
是否存在允许有效执行此类查询的数据结构(没有S
的线性扫描)?
重要提示:T
是完整的格子。
答案 0 :(得分:0)
您可以对列表进行预处理,并查找不具有大于这些数字的任何其他元素的元素子集(假设您将所有数字表示为dag,您应该找到所有没有父项的元素)。一旦你有了这个子集,你需要做的就是对这个子集进行线性扫描。我认为你不能比这更好。
此外,您还可以按子集中每个元素的元素数量(按递减顺序)对此子集进行排序。并按顺序扫描元素。