python-3.x - 如果您有固定的列表大小,此代码是否为 O(1)
问题描述
例如,您正在遍历列表中的字母,但您必须检查标点符号。下面的代码仍然是 O(n),n 是一行中的最大字符吗?我认为这是因为标点符号列表是固定大小的,所以 if 语句仍然是 O(1) 对吗?
punctuation = [',', '.', '?', '!', ':', ';', '"', ' ', '\t', '\n']
for letters in line:
if letters not in punctuation:
word += letters
解决方案
是的,你是对的,因为标点符号列表的大小是固定的(并且不依赖于 N),所以你的代码的整体时间复杂度应该是 O(N)。正如其他评论员所指出的那样,O(N*M) 可能更精确,其中 N 是您正在阅读的字符总数,而 M 是标点符号字符的数量。
如果要在那里进行优化,可以将标点符号存储在 a 中set
,其中in
以恒定时间运行:
punctuation = {',', '.', '?', '!', ':', ';', '"', ' ', '\t', '\n'}
for letter in line:
if letter not in punctuation:
word += letter
推荐阅读
- r - 找到以新阈值评估的 RF 中最重要的变量
- android - 为什么使用 Glide 下载的位图在传递给另一个活动时会变为 NULL?
- c++ - 使用来自另一个类的 lineEdit 的路径创建文件
- python - 在 python 中生成对数刻度刻度
- java - 打开片段时Android开始动画
- reactjs - 如何测试 Redux 动作创建者
- c++ - 在 C++ 中使用 OpenMP 进行无竞争条件打印
- r - 如果列 (z) 大于另一列 (y) 中的数据,则使用另一列 (x) 中的数据填充列 (z)
- c# - 单击通知时阻止打开 UWP 应用
- python - WTF 选择字段在前端显示带有圆括号的值