Python二分枚举

部署运行你感兴趣的模型镜像

二分枚举算法结合了二分查找和枚举的思想,主要用于在有序数据可二分性质的问题中高效寻找解决方案。

一、基本概念

二分查找 (Binary Search)

  • 核心思想:在有序数组中,通过不断缩小搜索范围来快速定位目标
  • 时间复杂度:O(log n)
  • 前提条件:数据必须是有序的

枚举 (Enumeration)

  • 核心思想:系统地尝试所有可能的候选解
  • 二分枚举是对传统枚举的优化,利用问题的单调性减少尝试次数

二、标准二分查找实现

问题:寻找第一个等于目标的元素

def first_occurrence(arr, target):
    left, right = 0, len(arr) - 1
    result = -1
    
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] >= target:
            right = mid - 1
            if arr[mid] == target:
                result = mid
        else:
            left = mid + 1
    
    return result

问题:寻找方程近似解

## 区间内只有一个解
def find_root(f, low, high, epsilon=1e-6):
    while high - low > epsilon:
        mid = (low + high) / 2
        if f(mid) * f(low) < 0:
            high = mid
        else:
            low = mid
    return (low + high) / 2

问题:平方根计算

def my_sqrt(x):
    if x < 2:
        return x
    
    left, right = 1, x // 2
    while left <= right:
        mid = (left + right) // 2
        if mid * mid == x:
            return mid
        elif mid * mid < x:
            left = mid + 1
        else:
            right = mid - 1
    
    return right  # 返回整数部分

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值