【发布时间】:2013-06-10 23:57:53
【问题描述】:
考虑以下元组列表: [(5,4,5), (6,9,6), (3,8,3), (7,9,8)]
我正在尝试设计一种算法来检查列表中是否存在至少一个元组,其中该元组的所有元素都大于或等于给定的元组(针)。
例如,对于给定的元组 (6,5,7),算法应该返回 True,因为给定元组中的每个元素都小于列表中的最后一个元组,即 (7,9,8)。但是,对于给定的元组 (9,1,9),算法应该返回 False,因为列表中没有每个元素都大于给定元组的元组。特别是,这是由于给定元组的第二个元素 1 小于列表中所有元组的第二个元素。
一个简单的算法会一个一个地循环遍历列表中的元组,并循环遍历内部循环中元组的元素。假设有 n 个元组,每个元组有 m 个元素,这将给出 O(nm) 的复杂度。
我正在考虑是否有可能有一种算法来产生具有较低复杂性的任务。允许进行预处理或任何花哨的数据结构来存储数据!
我最初的想法是使用二进制搜索的一些变体,但我似乎无法找到一种数据结构,一旦我们根据第一个元素消除了一些元组,我就不会回到天真的解决方案,这意味着该算法最后也可能是 O(nm)。
谢谢!
【问题讨论】:
-
check whether [at least one tuple in the list has all corresponding elements greater than or equal to a given tuple (needle)我没有得到as every element in the given tuple islessthan the first tuple- 第二个和最后一个元组严格不小于。 -
(@WalterTross 我不认为这是那种的错字:以我上述评论中的第一个条件为确定性,应该回答第一针是的,只是不是针对第一个,而是针对第二个(和第四个)元组。)
-
这个问题在计算几何文献中被称为离线优势报告。有一些以小 m 闻名的好解决方案。
标签: algorithm search data-structures spatial-index