python - 如何获得代码的大 O 时间复杂度?
问题描述
我对大 O 表示法有很好的理解,但我对这个问题很困惑:
给定一个具有 N 个元素的排序列表,并且正在搜索的键在列表中重复 R 次,就 O 表示法而言 my_search() 的复杂性是多少?
def my_search( data, key ):
found = False
low = 0
count = 0
high=len(data)-1
while ( not found and low<=high):
guess = (high+low)//2
print('guess: ', guess)
if ( key == data[guess] ):
found = True
count = 1
k = guess - 1
while k>=0 and data [k] == key:
count += 1
k -= 1
k = guess + 1
while k < len(data) and data [k] == key:
count += 1
k += 1
else:
if (key < data[guess]):
high=guess-1
else:
low = guess+1
print('count:', count)
return count
此函数传递的参数是一个列表和一个键,该函数计算该键在列表中出现的次数,例如my_search([1,1,2,2,3,3,3,3,3,3,6,7], 1)
. 答案的关键是这段代码的时间复杂度是 ,他们是怎么得出这个答案的?
解决方案
在有序列表中搜索是 O(log(N)) (二分搜索)。找到要查找的元素后,您需要根据您搜索的项目检查(至少)R 元素。所以总共 O(log(N)) + R。
推荐阅读
- java - 线程“主”java.lang.ClassCastException 中的异常:类 [B 不能强制转换为类 [C([B 和 [C 在加载器“引导程序”的模块 java.base 中)
- python - ValueError:层顺序的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 1
- vba - 将波斯文文本从文件插入 PowerPoint
- python - pyspark 填充 spark 数据框中每个 id 的缺失数据
- svg - 在 Seed Rust 应用程序中为 SVG 文本元素调用 getBBox
- python - 在 python 中提取项目进行演示 - 我有一个从 Outlook 中获取的列表,但需要将这些项目分解为单独的字符串
- qt - 无法让 Qt Creator 调试在 Windows 10 上运行
- python - 基本的While循环迭代顺序?
- javascript - 如何使用 setAttribute 方法和 Selenium 和 Python 更改 Datepicker 的隐藏元素的日期?
- google-apps-script - 简单的 Google 表格脚本现在速度慢且不可靠