【发布时间】:2019-10-12 23:27:32
【问题描述】:
我有一个名为字母数字的字符串,其中包含所有字母和数字。
alphanumeric = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
我想遍历单个字符的列表(其中一些是字母数字,一些只是标点符号)以找出哪些是字母数字。该行的时间复杂度是多少:
if character in alphanumeric:
是吗?我不确定字符串是否被视为时间复杂度的列表,因为在查看 Python wiki (https://wiki.python.org/moin/TimeComplexity) 时,操作“x in s”被视为 O(N)。
【问题讨论】:
-
请确保您确实想询问时间复杂度,并且您对一般实际性能不感兴趣。从字面上理解你的问题,答案是
O(1)仅仅是因为if character in alphanumeric:行中的长度变化输入不依赖。alphanumeric具有固定长度,character也是如此。 -
文档正在讨论列表
s的长度为N的情况。那么确实是O(N)。 -
就
in的时间复杂度而言,字符串不被视为列表。 (这并不是说这种情况是错误的——在带有in的字符串中搜索单个字符仍然是字符串长度上的O(n)。) -
如果您真的担心性能(即使性能听起来与您的具体示例无关),请使用集合而不是字符串来包含字母/数字。
-
""x in s" 被认为是 O(N).",不,不是,它被认为是 O(len S)
标签: python time complexity-theory