在Javascript中在一维数组中查找最小值和最大值之间的值

时间:2018-12-26 12:30:55

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

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

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

搜索的性能是主要标准。

此外,构造树后,无需更改树(添加/删除值)。

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

我从哪里开始?

2 个答案:

答案 0 :(得分:1)

感谢@bergi的回答,我真的不需要构造搜索树来对排序后的数组执行二进制搜索,因此我应该能够找到我的值并获得数组的一部分它们之间。

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

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

感谢大家的帮助。

答案 1 :(得分:1)

哦,对不起,我的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 );