上一篇
在算法学习中,三分搜索算法是二分搜索的一种扩展,特别适用于单峰函数(unimodal function)的极值查找。本文将用通俗易懂的方式,带你从零开始掌握Python三分查找的原理、实现和实际应用,即使是编程小白也能轻松上手!
三分搜索(Ternary Search)是一种用于在单峰函数上寻找最大值或最小值的算法。所谓单峰函数,是指函数先单调递增后单调递减(或先减后增),只有一个“峰”或“谷”。
与二分搜索每次将区间分为两部分不同,三分搜索将区间分为三部分,通过比较两个中间点的函数值,逐步缩小搜索范围。
下面是一个使用三分搜索查找单峰函数最大值的完整示例。假设我们有一个函数 f(x) = -(x - 5)**2 + 10,它在 x=5 处取得最大值。
def ternary_search_max(func, left, right, precision=1e-9): """ 使用三分搜索查找函数 func 在区间 [left, right] 上的最大值 :param func: 目标函数 :param left: 搜索左边界 :param right: 搜索右边界 :param precision: 精度控制 :return: 极值点 x """ while right - left > precision: # 将区间三等分 mid1 = left + (right - left) / 3 mid2 = right - (right - left) / 3 # 计算两个中间点的函数值 f1 = func(mid1) f2 = func(mid2) # 如果 mid1 的值小于 mid2,说明最大值在 [mid1, right] if f1 < f2: left = mid1 else: # 否则最大值在 [left, mid2] right = mid2 return (left + right) / 2# 定义一个单峰函数def example_func(x): return -(x - 5) ** 2 + 10# 调用三分搜索result_x = ternary_search_max(example_func, 0, 10)print(f"最大值出现在 x ≈ {result_x:.6f}")print(f"最大值为 f(x) ≈ {example_func(result_x):.6f}") [left, right]。mid1 = left + (right - left)/3 和 mid2 = right - (right - left)/3。f(mid1) 和 f(mid2): f(mid1) < f(mid2),说明最大值在 [mid1, right],更新 left = mid1。[left, mid2],更新 right = mid2。✅ 适用场景:
⚠️ 注意事项:
通过本篇算法教程,你已经掌握了三分搜索算法的核心思想和Python实现方法。虽然它不如二分搜索常用,但在处理单峰函数极值问题时非常高效。建议动手运行代码,修改函数尝试不同场景,加深理解!
关键词回顾:三分搜索算法、Python三分查找、算法教程、二分搜索进阶。
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122992.html