博客
关于我
从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数据库面试题(2021最新版)
查看>>
MySQL数据库高并发优化配置
查看>>
mysql数据恢复
查看>>
MySQL数据的主从复制、半同步复制和主主复制详解
查看>>
mysql数据碎片整理
查看>>
MySQL数据类型
查看>>
MySQL数据类型字节长度
查看>>
mysql数据被误删的恢复方案
查看>>
MySQL数据读写分离(MaxScale)上干货!!!
查看>>
mysql整库导入、导出
查看>>
mysql文本函数和数字函数
查看>>
Mysql新建用户和数据库并授权
查看>>
mysql日志文件
查看>>
mysql日志管理学习笔记
查看>>
MySQL日期时间函数大全
查看>>
mysql时间相减的问题
查看>>
mysql时间表示和计算
查看>>
mysql更新一个表里的字段等于另一个表某字段的值
查看>>
Mysql更新时间列只改日期为指定日期不更改时间
查看>>