博客
关于我
从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的on duplicate key update 的使用
查看>>
MySQL的Replace用法详解
查看>>
mysql的root用户无法建库的问题
查看>>
mysql的sql_mode参数
查看>>
MySQL的sql_mode模式说明及设置
查看>>
mysql的sql执行计划详解
查看>>
mysql的sql语句基本练习
查看>>
Mysql的timestamp(时间戳)详解以及2038问题的解决方案
查看>>
mysql的util类怎么写_自己写的mysql类
查看>>
MySQL的xml中对大于,小于,等于的处理转换
查看>>
mysql的下载安装
查看>>
Mysql的两种存储引擎详细分析及区别(全)
查看>>
mysql的临时表简介
查看>>
MySQL的主从复制云栖社区_mysql 主从复制配置
查看>>
MySQL的事务隔离级别实战
查看>>
mysql的优化策略有哪些
查看>>
MySQL的使用
查看>>
mysql的全文检索的方法
查看>>
mysql的函数DATE_ADD()
查看>>
mysql的函数操作
查看>>