我有一个带有值的数组,我需要找到最小和最大之间的所有值。我相信我需要构建某种搜索树,对吗?我想要类似的东西:
var values : number[] = tree.findBetween(min : number, max: number);
搜索的性能是主要标准。
此外,构造树后,无需更改树(添加/删除值)。
我需要什么?二叉树?平衡的搜索树?静态搜索树?
我从哪里开始?
答案 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 );