【问题标题】:Finding values between min and max in 1d array in Javascript在Javascript中查找一维数组中的最小值和最大值之间的值
【发布时间】:2018-12-26 12:30:55
【问题描述】:

我有一个包含值的数组,我需要找到最小值和最大值之间的所有值。我相信我需要构建某种搜索树,对吗?我想要类似的东西:

var values : number[] = tree.findBetween(min : number, max: number);

搜索的性能是主要标准。

此外,一旦构建树,我就不需要更改树(添加/删除值)。

我需要什么?二叉树?平衡的搜索树?静态搜索树?

我从哪里开始?

【问题讨论】:

  • 对数组进行排序并迭代最小值和最大值之间的值。
  • 不,您不需要将树构造为​​数据结构。二进制搜索直接在排序数组上工作。

标签: javascript binary-search-tree search-tree


【解决方案1】:

感谢@bergi的回答,我真的不需要构建搜索树来对排序数组执行二分搜索,所以我应该能够找到我的值并获取它们之间的数组部分.

出于好奇,我发现了一个interesting article 比较了二分搜索与普通搜索的性能 - 循​​环遍历数组。这篇文章不知何故错误地包括了将数组排序到搜索时间中的时间——只有当你有一个排序数组时才应该使用二进制搜索(如果你可以在性能关键期之前对其进行预排序)。我运行的代码最多包含 1e7 个项目,排序数组的二进制搜索需要 0 毫秒,而简单地循环数组需要几十毫秒。

最后,这是我能找到的最快的二分搜索实现。 https://oli.me.uk/2014/12/17/revisiting-searching-javascript-arrays-with-a-binary-search/

感谢大家的帮助。

【讨论】:

    【解决方案2】:

    哦,抱歉,我的 Globish 有时会捉弄我。不然我看不出太多这样一个问题的难点在哪里,但这里总是有新的答案(希望这次不会挨着盘子)

    除此之外: 还有什么比原生 js 方法更快的呢?

    const
      MaxValue = 50,
      MinValue = 10
      ;
    
    let
      ArrayOrigin = [12, 5, 8, 130, 44, 25, 14, 42, 36 ],
      ArrayInLimits = ArrayOrigin.filter( elm=>  elm>MinValue && elm<MaxValue)
      ;
    
      console.log( ...ArrayInLimits );

    【讨论】:

    • 你能把你的答案翻译成英文吗?这是一个English-only 网站。
    • @4castle : 好的,我已经翻译好了。这不值得负面点......(你的法语怎么样?)
    • 对不起,因此假设是错误的,这是其他人在没有解释的情况下投反对票,即使是法国人也可以做到! :)
    • 二分查找不会遍历所有元素,但 Array.filter 肯定会。由于数组的大小,它会明显变慢。
    • 好的,我要开始翻译这个主题的所有链接了,请给我时间;)
    猜你喜欢
    • 2019-03-31
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2016-01-31
    • 2015-02-01
    • 2018-05-03
    相关资源
    最近更新 更多