将数字与范围内的数字列表进行比较的最快方法?

2024-04-24

有没有比这样做性能更快的方法:

var value = 2432; 

if (value >= 20 && value <= 31) return true;
else if (value >= 45 && value <= 47) return true;
else if (value >= 82 && value <= 86) return true;
...
else if (value >= 1052 && value <= 1065) return true;
else if (value >= 2400 && value <= 2500) return true;

条件语句包含不符合模式的数字。这个数字高达 65,000。而且范围是可变的并且不相互交叉。该范围存储在 SQL 数据库中:

columns: from, to
rows: [21, 59], [92, 280], etc...

我最初考虑创建一个查找表,其中包含范围之间的所有数字(例如,[20, 21, 21, 23, ... 31, -> 45, 46 47]).

有没有更好的办法?


因此,如果范围是唯一的并且彼此不相交。 我认为最快的检查方法是下一个算法:

  1. 制作一个 [start, end] 对列表,或者仅使用两个单独的列表作为起点和终点。
  2. 对它们进行排序(在 SQL 端可以很容易地完成)
  3. 使用二分查找首先找出start大于您的参考值的值
  4. 上一项只给出了您的单一范围,您应该对照您的参考号进行检查。

如果排序是在数据库端完成的,那么这个算法将是 O(logN),足够快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数字与范围内的数字列表进行比较的最快方法? 的相关文章

随机推荐