二进制搜索 R 中函数为假的最高值
Binary Search the hightes value for which a function is false in R
我有一个可以用正整数调用的 expensiv 函数。从零开始,此函数 return 为假,在某个值(称为此值 y)时,该函数将 return 为真,并且对于所有高于 y 的输入值 return 也为真。
我尝试了什么:我定义了一个函数(实际上这个函数需要很长时间才能执行)
magicFun <- function(x) x > 10
detect (Package purrr
) 确实有效,但对于我的用例来说太慢了(记住在我的情况下 magicFun 需要很多时间)
> detect(0:100,magicFun)
[1] 11
binsearch (Package gtools
) 不起作用,因为它将 return 第一个值 return 为假(但我想要 最高 值)
binsearch(magicFun, range = c(0,100), showiter = T)
你需要自己写这个,因为你有不寻常的需求,即你不想传递一个向量给magicFun
,你只想传递标量,您希望传递尽可能少的标量,并且您没有典型的停止规则:您需要在 n
处停止,其中 magicFun(n)
是 TRUE
但 magicFun(n-1)
是 FALSE
.
你知道答案有多大吗?例如,如果您认为它会在 100 左右,您可以在 0 和 120 处开始二分查找。您需要准备好您的初始猜测是错误的,即可能 120 给出 FALSE
.
我让你自己写函数。
使用
binsearch(magicFun, range = c(0,100), showiter = T, target = 0.5)
这告诉搜索算法寻找 0.5,它位于 TRUE
和 FALSE
的中间。它将 return 最大的 FALSE
和最小的 TRUE
.
如果这仍然太慢,那么您将不得不优化昂贵的功能。
我有一个可以用正整数调用的 expensiv 函数。从零开始,此函数 return 为假,在某个值(称为此值 y)时,该函数将 return 为真,并且对于所有高于 y 的输入值 return 也为真。
我尝试了什么:我定义了一个函数(实际上这个函数需要很长时间才能执行)
magicFun <- function(x) x > 10
detect (Package purrr
) 确实有效,但对于我的用例来说太慢了(记住在我的情况下 magicFun 需要很多时间)
> detect(0:100,magicFun)
[1] 11
binsearch (Package gtools
) 不起作用,因为它将 return 第一个值 return 为假(但我想要 最高 值)
binsearch(magicFun, range = c(0,100), showiter = T)
你需要自己写这个,因为你有不寻常的需求,即你不想传递一个向量给magicFun
,你只想传递标量,您希望传递尽可能少的标量,并且您没有典型的停止规则:您需要在 n
处停止,其中 magicFun(n)
是 TRUE
但 magicFun(n-1)
是 FALSE
.
你知道答案有多大吗?例如,如果您认为它会在 100 左右,您可以在 0 和 120 处开始二分查找。您需要准备好您的初始猜测是错误的,即可能 120 给出 FALSE
.
我让你自己写函数。
使用
binsearch(magicFun, range = c(0,100), showiter = T, target = 0.5)
这告诉搜索算法寻找 0.5,它位于 TRUE
和 FALSE
的中间。它将 return 最大的 FALSE
和最小的 TRUE
.
如果这仍然太慢,那么您将不得不优化昂贵的功能。