【发布时间】:2012-03-24 22:42:33
【问题描述】:
我正在寻找类似于 Python 的 bisect_left() 和朋友的 Haskell 中的 bisect 操作。输入将是一个下限、一个上限、一个非递减函数 (Ord a)=>(Int->a) 必须为下限和上限之间的所有整数定义,以及一个搜索值。返回值是最大整数i,其中lower <= i <= upper 和f(i) < search_term。性能应该是 O(log(n))。
为此进行搜索:
(Ord a)=>(Int->a)->Int->Int->a->Int
不会产生任何结果。
在某处的库中是否有标准、通用的二分搜索运算符?
【问题讨论】:
-
Int -> a函数是否假定为单调递增/非递减? -
@jwodder 函数应该是非递减的 -- 编辑添加约束
-
您可能还喜欢手指树,它旨在高效搜索单调谓词。
标签: haskell