小编Osc*_*cía的帖子

为什么二分搜索算法适用于这个一维“寻峰”问题?

我正在研究麻省理工学院关于算法介绍的开放课件第一堂课,有些东西对我来说并不是很明显。你不能开始看在24:30的讲座在这里,并与一维峰值问题定义的所有细节的讲义和解决方案在这里

问题是:

对于“n”个整数元素的数组,找到一个峰值

并给出一个大小为 8 的示例数组: example = [6,7,4,3,2,1,4,5]

峰值的定义 对于example上面的数组example[1]example[7]它们是“峰值”,因为这些数字大于或等于它们的相邻元素,并且适用于数组最后一个元素的特殊条件,它只需要大于或等于前面的元素它。那是:

example[1] >= example[0] && example[1] >= example[2] #=> is true and therefore a peak
example[7] >= example[6] #=> is true and therefore a peak
Run Code Online (Sandbox Code Playgroud)

重要观察 从这个例子中,我们可以理解数组可能是未排序的,它可能包含重复项,并且它可能包含多个峰,根据我的解释,它甚至可能不包含任何单个峰。

到目前为止一切顺利,但当他争辩说在二叉搜索树中拆分数组的定义可以找到一个峰值时,我的麻烦就开始了,**这对那个班级的每个人来说可能非常明显,但对我来说不是,这似乎是任意的或者我没能理解一些非常重要的事情**

教授去用伪代码定义一个二分搜索算法来找到一个峰值:

二分查找算法的伪代码定义

我的问题/疑虑

  1. 鉴于上述条件,A 为什么要向左走?而不是权利?
  2. 鉴于上述条件B 为什么向右走?而不是左边?
  3. 二分搜索算法假设我们从一个已排序的数组开始,那么将它应用于可能未排序的数据为什么有意义呢?
  4. 该解决方案是否保证对于只有一个“峰值”的情况,我们最初不会丢弃包含该峰值的一半?如果是这样/为什么?

由于数组可以是未排序的并且它可能包含重复项我不明白哪里是保证如果条件AB 保持为真那么向右或向左寻找是有意义的,这对我来说似乎是任意的如果您选择错误,您可以丢弃实际上可能具有唯一峰值的阵列的一半

我错过了什么重要的东西吗?如果是什么?

谢谢大家关注这个问题。

algorithm binary-search

5
推荐指数
1
解决办法
303
查看次数

如何将承诺的解析值存储在变量中?

我正在使用 NodeJs v10.19.0 我已经阅读了大量的async/await文档和教程,但仍然无法正确理解。

I constantly make a get request to API that give me some JSON data I would like to have that data available at any time inside a variable

How do I do that?

So far I've tried as the example below shows but with no success

Thank you for your consideration

const rp = require('request-promise');
const myURL =  '{A_GET_URL_THAT_RETURNS_A_JSON}';
const options = {uri:myURL, json: true};

const data = ( async ()=>{
    try{
       return await …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise async-await

-2
推荐指数
1
解决办法
2395
查看次数