【问题标题】:What is the time complexity of finding a letter in a string?在字符串中找到一个字母的时间复杂度是多少?
【发布时间】: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


【解决方案1】:

假设你的函数是这样工作的:

FindAlphaNumeric(s:string):string
1. alphanumeric = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
2. result = ""
3. for each c:character in s
4.  if c in alphanumeric then result.append("1") else result.append("0")
5. return result

在这种情况下,输入的长度为|s|,常量字符串的长度为|alphanumeric|。如果您使用线性搜索搜索c,则if c in alphanumeric then 行的时间复杂度为O(|alphanumeric|)。整个算法的整体复杂度为O(|s|*|alphanumeric|)。但是因为alphanumeric是一个常量字符串,它的长度也是常量,这个常量可以忽略:O(|s|)是时间复杂度。实际上,作为输入大小函数的渐近复杂度并不取决于常量字符串的长度,也不取决于确定成员资格的方式。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2020-07-31
    • 2021-05-04
    • 1970-01-01
    • 2020-06-09
    • 2020-07-15
    相关资源
    最近更新 更多