def find_closest(data, target, key = lambda x:f(x))

这是我的函数定义,其中数据是一组值,我希望在尽可能少的计算中找到计算最接近目标的值,即abs(target-f(x))是最小值。f(x)是单调的。
我听说二进制搜索可以在o(log(n))时间内完成,python中有库实现吗?有没有更有效的搜索算法?
编辑:我希望在评估F(x)方面尽量减少复杂性,因为这是昂贵的部分。我想在数据中找到x,当用f(x)求值时,它最接近目标dataf范围内,targetf范围内是的,数据可以很快分类。

最佳答案

您可以使用bisect模块中的实用程序。不过,您必须在x上对data求值,即list(f(x) for x in data)才能得到一个单调/排序的列表。
我不知道标准库中直接在fdata上工作的二进制搜索。

07-27 19:50