博客
关于我
从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数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>