【发布时间】:2021-12-12 19:40:32
【问题描述】:
我对@987654321@ API 感到困惑。我正在寻找一种简单的方法来以log(n) 成本查找地图的一系列键。这是一个被称为“二分搜索”的基本概念,也可能是“二分法”。
我看到了这个奇怪的takeWhileAntitone 函数,我需要在其中提供一个“反调”谓词函数。这是我第一次遇到这个概念。
在阅读了有关该主题的 Wikipedia 之后,这似乎只是在说,当按键顺序应用于参数时,函数可能只有一个地方从 True 变为 False。这符合二分查找的要求。
由于 API 是用一种奇怪的(对我而言)语言记录的,我想在这里问一下:
- 如果我的理解是正确的,并且
- 这些函数不称为
bisect、binarySearch或类似名称是否有原因?
【问题讨论】:
-
您正在为您的特定用例寻找
split,或者可能是splitLookup,具体取决于您的范围是否包含在内。 -
@LouisWasserman,我认为
*Antitone函数非常适合此目的,除非您对我们其他人不了解的应用程序有所了解。这完全取决于所需的信息。 -
"A range of keys for the map" 表明 OP 只是在寻找 map 与一系列键 [a, b] 等的交集,并且 split 明确设计用于破坏映射到范围一侧的键。
-
@LouisWasserman,
split用于特定键两侧的独占范围,如果存在则将其删除。spanAntitone将所有条目留在其结果中。因此,您想要哪种取决于哪种行为对您有用。spanAntitone通常更灵活,因为它可以执行spanAntitone isLeft之类的操作。
标签: dictionary haskell containers