我有一个包含值的数组,我需要找到最小值和最大值之间的所有值。我认为我需要构建某种搜索树,对吗?我想要一些类似的东西:
var values : number[] = tree.findBetween(min : number, max: number);
搜索的性能是主要的标准。
此外,一旦构建了树,我就不需要更改它(添加/删除值)。
我需要什么?二叉树?一个平衡的搜索树?静态搜索树?
我从哪里开始?
感谢@bergi的回答,我真的不需要构造搜索树来对排序数组执行二进制搜索,所以我应该能够找到我的值并获得它们之间的数组部分。
出于好奇,我发现了一篇有趣的文章,将二进制搜索的性能与通过数组的普通搜索循环进行了比较。这篇文章错误地将数组排序的时间包含在搜索时间中——只有在有排序数组的情况下(如果可以在性能关键期之前对其进行预排序),才应该使用二进制搜索。我用多达1e7个项目运行代码,对排序数组进行二进制搜索需要0毫秒,而简单地循环数组需要几十毫秒。
最后,这是我能找到的最快的二进制搜索实现。https://oli.me.uk/2014/12/17/revisiting-searching-javascript-arrays-with-a-binary-search/
感谢大家的帮助。
哦,对不起,我的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 );