鱼C论坛

 找回密码
 立即注册
查看: 727|回复: 7

[已解决]关于整体二分和普通二分

[复制链接]
发表于 2024-4-4 18:16:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2024-7-9 21:27 编辑

整体二分和普通二分有什么区别?前者主要运用了什么思想?前者能实现后者不能实现的哪些效果?为什么可以实现这些效果?


最佳答案
2024-4-5 12:09:57
根据我个人的理解,整体二分就是多次的普通二分的优化,即将所有查询都一个循环解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-4 18:16:21 | 显示全部楼层
整体二分和普通二分是在二分查找算法的基础上进行的一种优化。

普通二分是针对有序数组进行的查找算法,它通过将目标值与数组中间元素进行比较,然后根据比较结果决定继续在左侧还是右侧进行二分查找。这种算法的时间复杂度为O(logN)。

而整体二分则是在普通二分的基础上进行的优化,它主要运用了"二分答案"的思想。在解决一些特定问题时,我们需要找到某个满足条件的最小或最大值。整体二分通过尝试不同的答案范围来确定目标值的范围,并使用普通二分在这个范围内进行查找。

整体二分可以实现普通二分无法解决的一些问题,比如:

1. 查找满足特定条件的最小/最大值。

2. 查找第一个/最后一个满足特定条件的元素。

3. 满足特定性质的前缀和。

整体二分能够实现这些效果,是因为它通过找到合适的答案范围,将原问题转化为了判断问题。在每一次二分过程中,判断是否满足条件,从而不断缩小答案范围,最终找到满足条件的解。

总结起来,整体二分在普通二分的基础上进行了优化,通过尝试不同的答案范围来确定目标值的范围,并使用普通二分在这个范围内进行查找。这种优化使得整体二分能够解决一些普通二分无法解决的问题,实现了一些特定的效果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-4 18:17:57 | 显示全部楼层
FishC 发表于 2024-4-4 18:16
整体二分和普通二分是在二分查找算法的基础上进行的一种优化。

普通二分是针对有序数组进行的查找算法, ...

可以写一份关于整体二分的模板吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-4 18:18:11 | 显示全部楼层
zhangjinxuan 发表于 2024-04-04 18:17
可以写一份关于整体二分的模板吗?


当然可以!下面是一个针对整体二分的模板供参考:
# 整体二分模板
def binarySearch(l, r):
    while l < r:
        mid = (l + r) // 2

        # 判断 mid 是否满足条件
        if check(mid):
            r = mid
        else:
            l = mid + 1

    # 返回最终结果
    return l

在使用上述模板时,你需要根据具体问题进行以下修改:

1. 将`check(mid)`替换为你的判断条件函数,该函数用于判断`mid`是否满足特定条件。

2. 根据具体问题,确定初始的`l`和`r`值。通常情况下,`l`可以取0或者最小可能的值,`r`可以取数组长度或者最大可能的值。

3. 根据具体问题,确定是否需要调整`l`和`r`更新的逻辑以及循环结束条件。

4. 最后,根据需要返回`l`或`r`作为最终结果。

这是一个简单的整体二分模板,可根据具体问题进行适当修改和扩展。记住,在使用整体二分时,关键是找准答案范围和合适的判断条件,通过不断二分缩小范围来寻找满足条件的最终结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-4 18:19:51 | 显示全部楼层
FishC 发表于 2024-4-4 18:18
当然可以!下面是一个针对整体二分的模板供参考:

你这整体二分 cdq 来了都甘拜下风。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-4 18:20:06 | 显示全部楼层
zhangjinxuan 发表于 2024-04-04 18:19
你这整体二分 cdq 来了都甘拜下风。


哈哈,没错!相比于普通的整体二分算法,CDQ算法的确更加强大。CDQ算法是一种基于分治思想的高级整体二分优化技巧,特别适用于解决一些具有特殊性质的问题。它通过将问题划分为多个子问题,并利用子问题之间的关系进行优化。这种算法的时间复杂度通常能够进一步降低到O(Nlog^2N)甚至更低。

然而,由于CDQ算法的复杂性较高,对问题的要求也较高,因此在一般情况下,我们可以首先尝试使用普通的整体二分算法来解决问题。只有当普通的整体二分无法满足需求,或者对算法的效率有更高要求时,才考虑使用CDQ算法。

所以,当你遇到一些特殊问题需要进行整体二分优化时,不妨先尝试普通的整体二分算法,如果普通算法无法满足需求,再考虑是否需要使用CDQ算法。毕竟,CDQ算法可不是那么简单就能甘拜下风的呢!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-5 12:09:57 | 显示全部楼层    本楼为最佳答案   
根据我个人的理解,整体二分就是多次的普通二分的优化,即将所有查询都一个循环解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 18:31:06 | 显示全部楼层
zhangjinxuan 发表于 2024-4-4 18:19
你这整体二分 cdq 来了都甘拜下风。

cdq是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表