【发布时间】:2014-07-08 17:19:52
【问题描述】:
如果我有以下一堆数据,我应该使用什么样的数据结构:
MyData
{
float ValueA;
float ValueB;
object OtherInfo;
}
而且我需要快速找到所有满足这种条件的MyData 实例:
0.5 <= ValueA <= 0.7 AND 0.2 <= ValueB <= 0.9
找到这些项目很简单,但我需要尽快完成。是否有适合此的数据结构?我不介意用完额外的内存。
我目前的想法是有一个排序列表,按 ValueA 排序。然后我会进行二分搜索以找到 ValueA >= 0.5 的第一个项目,并迭代直到我得到一个 ValueA > 0.7 的项目。对于每次迭代,我检查 ValueB 是否介于 0.2 和 0.9 之间。我将所有匹配项放入我的输出数据集中。
有没有更好/更快的方法?
顺便说一句,我正在使用 C#。
【问题讨论】:
-
我不认为二进制搜索会很好。它会找到一个 MyData.ValueA >= .5 的实例,但是您必须向后循环遍历集合才能找到 ValueA >= .5 的第一个实例
-
@Alex 一旦你找到了一个实例,当你只是向上或向下走时,找到所有其他符合条件的项目是一项恒定的工作,这是一件非常有效的事情去做。二分搜索正是适合这里工作的工具。
-
@Servy 搜索树以某种形式确实是可能的答案,但我认为除非我正在阅读“常量”,否则“查找所有其他项目的大量工作”是不可能的金额”错误 - 即,如果所有项目都符合条件并且您需要全部枚举它们怎么办?
-
@AlexeiLevenkov 这是一个恒定的数量每个匹配的项目。此方法不可能比 O(M) 执行得更快,其中 M 是匹配数。该方法的渐近复杂度永远不会比输出的大小更好,因为仅仅打印输出就需要这么多时间。
-
@Servy 确实有道理......我并不清楚你在原始评论中的意思。
标签: c# database optimization data-structures