博客
关于我
从NRUBS算法FindSpan看二分法
阅读量:269 次
发布时间:2019-03-01

本文共 771 字,大约阅读时间需要 2 分钟。

在阅读the nrub book时,遇到FindSpan函数的二分查找部分卡住了。这个函数的实现虽然能够处理一般情况,但在某些特定情况下可能会出现问题。

FindSpan(n, p, u, U)函数的目标是通过二分查找找到满足一定条件的索引mid,使得U[mid] <= u < U[mid+1]。函数的大致逻辑如下:

Int FindSpan(n, p, u, U) {    If (u == U[n + 1]) return(n);    low = p;    high = n + 1;    mid = (low + high) / 2;    while (u < U[mid] || u >= U[mid + 1]) {        If (u < U[mid]) {            high = mid;        } else {            low = mid;        }        mid = (low + high) / 2;    }    return(mid);}

需要注意的是,函数的条件判断是基于u < U[mid] || u >= U[mid+1]。这种判断方式虽然能够找到满足条件的mid,但会漏掉一种特殊情况:当u等于U[n+1]时,函数已经预先返回了n。

这种情况下,函数的逻辑是正确的,但如果u正好等于U[n+1],函数会提前返回结果,而不会进入循环继续查找。这在某些应用场景下可能会影响最终的结果。

如果需要更严格地控制查找范围,可以在循环的条件中添加额外的判断,确保当u等于U[n+1]时也能正确处理。例如,可以在循环开始时检查是否需要继续查找。

在实际应用中,可能需要根据具体的业务需求对函数的逻辑进行调整,以确保在所有情况下都能正确找到目标索引mid。

转载地址:http://doja.baihongyu.com/

你可能感兴趣的文章
MySQL迁移到达梦:如何轻松、高质量完成迁移任务
查看>>
mysql返回的时间和实际数据存储的时间有误差(java+mysql)
查看>>
mysql还有哪些自带的函数呢?别到处找了,看这个就够了。
查看>>
Mysql进入数据库
查看>>
mysql进阶 with-as 性能调优
查看>>
mysql进阶-查询优化-慢查询日志
查看>>
wargame narnia writeup
查看>>
MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)
查看>>
Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
查看>>
Mysql连接时报时区错误
查看>>
mysql逗号分隔的字符串如何搜索
查看>>
MySQL通用优化手册
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
mysql部署错误
查看>>
MySQL配置信息解读(my.cnf)
查看>>
Mysql配置文件my.ini详解
查看>>
MySQL配置文件深度解析:10个关键参数及优化技巧---强烈要求的福利来咯。
查看>>
Mysql配置表名忽略大小写(SpringBoot连接表时提示不存在,实际是存在的)
查看>>
mysql配置读写分离并在若依框架使用读写分离
查看>>