包围阶跃函数中的不连续性

计算科学
2021-11-30 10:00:11

我有这个功能

f(x)={0(x<a)1/2(x=a)1(x>a),

在哪里a是未知的。我可以计算任何值的函数x,并寻求确定a(在一定程度上准确)。

给定一个初始括号x0<a<x1,我通过定义细分括号

x2:=x0+x12

和计算f(x2). 然后我有x0<a<x2或者x2<a<x1. 我可以继续使用这种方法,直到括号值达到一定的准确性,从而解决a.

有没有更高效的算法?

2个回答

不。虽然这个问题是用浮点运算来表达的,但这本质上是一个关于二进制搜索的问题。二分搜索是依赖决策树的算法中的一种最优算法(例如,https ://stackoverflow.com/q/4571478/491171 )。任何数据结构和算法教科书都应该讨论这个问题。

直观地说,如果在每一步都可以做出二元决策(一次比较),那么通过划分搜索区域,您最多可以学习一位信息。最佳行为总是将搜索区域分成两半。如果a可以采取任何n=|highlow|/ϵmach值,任何(二元)决策树的深度,至少包含n叶子必须至少log2n. 二分搜索实现了这个界限log2n脚步。此分析适用于所有预期行为a的可能性相同,也适用于最坏情况的行为。

如果您有其他信息,那么有必要更准确地说明它的含义a“未知”,算法中允许哪些操作,以及“更高效”意味着什么。(事实上​​,我以传统方式解释它们。)

请参阅@Kirill 的答案,但根据您可用的硬件类型,您可能能够利用并行性更快地解决问题。例如,假设您有一种评估方法f为了P同时操作数 - 然后您可以反复将括号分成P+1间隔而不是2. 很难说这实际上是“更有效”还是更快,因为会有开销和效率的各种定义。