二分查找不仅可以用于查找数组中的元素,还可以用于查找方程的根和单调(递增或递减)函数的值。
给我们一个单调函数 f 和这个函数的一些值 C 。找到此函数的 x 参数的值,例如 \(f(x)=C\)。
递增单调函数的例子:
我们选择函数值恰好大于和恰好小于给定值的边界。让我们选择该段中间的值。如果它小于给定的,那么我们将左边界移动到线段的中间。否则,我们将移动右边界。接下来,我们重复缩小边界的过程。但是有个问题就是什么时候停止搜索。阅读更多 此处。
例如,考虑求数字x 的平方根的问题。 x 的平方根(由 \(\sqrt x\) 表示)是一个数字 y 使得\(y^2 = x\).
让我们将问题表述如下:对于给定的实数 x ( \(x >= 1\)) 找到平方根,精度不少于点后 5 个字符。
选择段的边界进行搜索
由于我们无法检查整个无穷大的数字,因此我们需要定义搜索根的边界。首先,让我们找到左边界,选择任意负点(例如:-1)。我们将它加倍,直到它里面的值大于给定的值。为了找到正确的边界,我们选择任意一个正点(例如:1)。我们将它加倍,直到此时函数的值小于指定值。
或者,如果我们确切地知道搜索的边界,我们可以将 1 作为左边界,并将数字本身设为 x 。
之后,我们将当前段一分为二,中间平方,如果大于x,则替换上面,否则 底部。
最终实施:
在哪里,
eps - 必须寻求解决方案的准确性,
x - 给定的数字,我们正在寻找其平方根,
m - 算法执行后存储 结果的数字。
|