python-3.x - 我有一种简单的方法可以将数字分类到不同的范围吗?
问题描述
有一个清单:
ranges = [(0,11), (11, 20), (20, 35), (35, 40), (40, 50), (50, 62), (62,
75), (75, 83), (83, 90), (90, 100)]
例如,(7, 8) 表示 7<=x<8。现在有一个数字 n,我想将它分类为不同的范围。
我在想:
ranges = [(0,11), (11, 20), (20, 35), (35, 40), (40, 50), (50, 62), (62,
75), (75, 83), (83, 90), (90, 100)]
n = 22
for pair in ranges:
if pair[0] <= n < pair[1]:
print(f'{n} in the range:{pair}')
这个的时间复杂度是O(n),但是如果有一个要分类的数字列表,时间复杂度就变成了O(m*n)。在这种情况下,我们是否有一种简单的方法可以使时间复杂度为 O(m)?
任何答案都值得赞赏。
解决方案
我认为 O(m) 不可能,但是 O(mlogn) 可以通过二进制搜索(而不是你建议的线性搜索)来管理,因为你的范围列表是“排序的”
而且 O(mlogn) 仍然是可扩展的,因为 log 函数对于大 n 增长非常慢,在这种情况下,logn 和常数之间没有太大区别。
推荐阅读
- java - 基于 java/scala 中输入参数的序列号生成器
- haskell - 为什么 GHC 在这里推断出单态类型,即使禁用了 MonomorphismRestriction?
- c++ - 为什么需要双指针来更改 head 而不是链接列表中的其他地方
- android - Flutter Positioned Element 来flex吧,这个日志主要是什么?
- opencv - 如何在某些特定情况下修复 tesseract 无效输出?
- c# - c#和javascript正则表达式问题
- javascript - Angular 应用程序必须在新部署后清除缓存
- jquery - 将图像类复制到外部容器
- java - 检查 double/float 是否有超过 2 个十进制数
- linux - 如何在bash脚本中的IF函数中获取特定日期和时间