python - Python函数复杂度
问题描述
我被问及此功能的最佳和最坏情况:
def is_palindromic(the_list):
result = True
the_stack=Stack()
for item in the_list:
the_stack.push(item)
for item in the_list:
item_stack=the_stack.pop()
if item != item_stack:
result = False
return result
此函数使用堆栈确定列表是否与其反向相同。我认为每种情况的时间复杂度都是相同的,但是当我测试时,如果列表确实与其反向相同,则运行时间会更长。谁能解释为什么?我有点困惑。
解决方案
两种情况都是O(n)
。你总是加载堆栈,这应该是一个O(n)
操作。在最好的情况下,第一个字符与最后一个字符不匹配,因此搜索应该立即终止。在最坏的情况下,所有字符都匹配,因此程序会再次n
弹出和比较。O(2n)
还在O(n)
。
请记住,即使在确定单词不是回文之后,当前代码也会进行相同的弹出和比较。该行result = False
应该return False
或至少后跟一个break
语句。使最坏情况运行速度变慢的原因可能是非回文单词会有很多不匹配,导致该if
块重复执行result
以False
一遍又一遍地设置。这不会改变复杂性,因为它是一个恒定时间操作。
推荐阅读
- javascript - Chrome 扩展开发 - 如何将 info/variables/data 从 content.js 传递到扩展?
- vb.net - 将不正确的值写入文本文件
- sql-server - 如何在 ssrs 报告中分别格式化日期和月份
- reactjs - 从 react-infinite-scroller 测试 InfiniteScroll 组件
- javascript - 当 prevProps 的数据类型是对象或数组时如何在 React Hooks 中访问 prevProps
- javascript - 从副作用调用调用 jest.spyOn 时不起作用
- flutter - 如何从颤动的小部件中使用的所有下拉字段中获取值?
- node.js - 如果存在子文档,则在其下添加对象
- java - 在 Spring Boot 中以什么顺序读取 application.yml?
- mongodb - mongodb 的 shell 日志记录