database - 存储分段函数的数据结构
问题描述
我想实现一个功能:
f(x) = a0 -inf < x < b0
a1 b0 <= x < b1
a2 b1 <= x < b2
...
an bn-1 <= x < bn
an+1 bn <= x < +inf
而不是简单的 if-else 实现。
def func(x):
if x<b0: return a0
elif x<b1: return a1
.....
我有更好的数据结构来组织它吗?
另外,在给定两个序列 {an}、{bn} 的情况下,我如何编写一个返回优化的“func(x)”的“元函数”。
解决方案
如果n
很大,则要减少if
语句数。在 Python 中,这可以通过将数据存储在字典中来完成:
fx = {b0: a0, b1: a1, b2: a2, ..., bn: an, math.inf: an+1}
对于给定的值x
,对字典的键值进行二进制搜索。这为您提供了适当的键来使用,然后使用字典本身来获取相关值。如果您的语言不允许inf
作为键,您可以将值an+1
与字典分开,也许将两者都保存在 2 元组中。
这将最大测试次数从 减少n
到log2(n)
。
“元函数”在 Python 中很容易,因为函数是 Python 中的一等对象。您没有说明首选语言:如果您需要 Python 中的“元函数”示例,请告诉我。
推荐阅读
- mysql - MySQL(低于 8.0 的版本):SELECT WHERE 多列和按最大级别分组
- python - python从单词中提取元音
- regex - 如何在文本文件中进行多行模式匹配
- c++ - 带有 void* 参数转换的函数指针
- reactjs - 离子反应动态获取屏幕宽度
- php - 需要使用 www.mydomain.com/filename/ 而不是 www.mydomain.com/file.php?id=1
- javascript - 如何使用 SinonJs 监视异步调用的数量而无需等待
- reactjs - 使用 react-pdf 生成 USING 目录
- google-cloud-platform - HTTPS 负载均衡器后端 URL 映射无法加载呈现页面
- java - LinkedList(从头开始构建)add()不起作用