考虑一个整数数组(假设是排序的);我想以最快的方式找到最接近给定整数的整数的数组索引。在有多种可能性的情况下,算法应该识别所有。
示例:考虑T =(3,5,24,65,67,87,129,147,166),如果给定的整数是144,那么代码应该将147标识为最接近的整数,并给出数组索引7对应于该条目。对于66的情况,算法应识别65和67.
是否有O(1)或至少O(log N)算法才能执行此操作?直接搜索算法(二进制搜索,树搜索,散列等)实现将不起作用,因为那些将需要完美匹配。有没有办法可以修改这些来处理近似搜索?
我正在开发一个C代码。
由于
答案 0 :(得分:6)
进行二元搜索,直到找到单个元素。 如果有比赛,沿着你的邻居走,找到其他比赛。 如果没有匹配项,请查看您的邻居以找到最接近的匹配项。
答案 1 :(得分:2)
正确实施binary-search
应该可以解决问题 - 只要您确定搜索范围仅减少到两个项目的时刻。然后你只需选择最近的一个。复杂性:O(log n)。