首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用二进制搜索在向量中找到最近的值

用二进制搜索在向量中找到最近的值
EN

Stack Overflow用户
提问于 2013-11-21 22:33:21
回答 7查看 31K关注 0票数 51

作为一个愚蠢的玩具例子,假设

代码语言:javascript
复制
x=4.5
w=c(1,2,4,6,7)

我想知道是否有一个简单的R函数可以在x中找到与w最接近的索引。因此,如果foo是该函数,foo(w,x)将返回3。函数match是正确的想法,但似乎只适用于精确匹配。

解决方案这里 (例如which.min(abs(w - x))which(abs(w-x)==min(abs(w-x)))等)都是O(n)而不是log(n) (我假设w已经排序了)。

EN

Stack Overflow用户

发布于 2015-04-11 07:01:17

为了在字符向量上这样做,Martin在R-帮助上建议了这个函数。

代码语言:javascript
复制
bsearch7 <-
     function(val, tab, L=1L, H=length(tab))
{
     b <- cbind(L=rep(L, length(val)), H=rep(H, length(val)))
     i0 <- seq_along(val)
     repeat {
         updt <- M <- b[i0,"L"] + (b[i0,"H"] - b[i0,"L"]) %/% 2L
         tabM <- tab[M]
         val0 <- val[i0]
         i <- tabM < val0
         updt[i] <- M[i] + 1L
         i <- tabM > val0
         updt[i] <- M[i] - 1L
         b[i0 + i * length(val)] <- updt
         i0 <- which(b[i0, "H"] >= b[i0, "L"])
         if (!length(i0)) break;
     }
     b[,"L"] - 1L
} 
票数 3
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20133344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档