博客
关于我
从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/

你可能感兴趣的文章
Neo4j(2):环境搭建
查看>>
Neo4j(3):Neo4j Desktop安装
查看>>
Neo4j(4):Neo4j - CQL使用
查看>>
Neo图数据库与python交互
查看>>
NEO改进协议提案1(NEP-1)
查看>>
Neo私链
查看>>
NervanaGPU 项目使用教程
查看>>
Nerves 项目教程
查看>>
nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Nessus漏洞扫描教程之配置Nessus
查看>>
Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
查看>>
nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
查看>>
nestesd exception is java .lang.NoSuchMethodError:com.goolge.common.collect
查看>>
nestJS学习
查看>>
net core 环境部署的坑
查看>>
NET Framework安装失败的麻烦
查看>>
Net 应用程序如何在32位操作系统下申请超过2G的内存
查看>>
Net.Framework概述
查看>>
NET3.0+中使软件发出声音[整理篇]<转>
查看>>
net::err_aborted 错误码 404
查看>>