Python 关于程序的时间复杂性

Python 关于程序的时间复杂性,python,string,time-complexity,Python,String,Time Complexity,我在一次竞争性考试中做了一道题,但我正在努力找出程序的时间复杂性,即在python 3中是O(n)还是O(n^2)。有人能帮我吗 我问了我的一个朋友,他们中的一些人告诉我这是O(n^2),他们中的一些人告诉我这是O(n^2),所以我完全被这些答案弄糊涂了 s = input() #reading base string b = input() #reading reference string for i in s: if i in b: print(i, end='')

我在一次竞争性考试中做了一道题,但我正在努力找出程序的时间复杂性,即在python 3中是O(n)还是O(n^2)。有人能帮我吗

我问了我的一个朋友,他们中的一些人告诉我这是O(n^2),他们中的一些人告诉我这是O(n^2),所以我完全被这些答案弄糊涂了

s = input() #reading base string
b = input() #reading reference string
for i in s:
    if i in b:
        print(i, end='')
样本输入:

 polikujmnhytgbvfredcxswqaz  #base string
 abcd  #refernce string
样本输出:

 bdca
在哪里

n=len(s)
m=len(b)

您的代码将随时间复杂度而扩展

O(m*n)
因为在最坏的情况下,您循环整个基本字符串并执行
m
最大恒定时间if操作。N在理论上经常用作占位符,但对于代码没有任何意义。

其中

n=len(s)
m=len(b)

您的代码将随时间复杂度而扩展

O(m*n)

因为在最坏的情况下,您循环整个基本字符串并执行
m
最大恒定时间if操作。N在理论上经常用作占位符,但对代码没有任何意义。

根据我的经验,在初学者中常见的误解是,在big-O符号中只能有一个变量。这似乎是因为大多数介绍性示例都是用单个输入显示的。当您有多个独立的输入时,您可以有多个变量,因为当其中一个输入发生变化时,复杂性将独立扩展

一个普遍存在的例子是图形。图有节点和边。节点的数量可能会对边的数量设置上限,但两者实际上是相当独立的。因此,大多数图形算法都是根据
V
E
来分析的,而不是单个变量
N


这对你们来说意味着,你们有两个独立的量。比如说
s=len(s)
B=len(B)
。外部循环执行
S
迭代。b中的操作员在最坏情况下执行
b
操作。如果你假设
print
以恒定时间运行一个字符,结果是
O(S*B)

根据我的经验,初学者普遍存在一个误解,即在big-O符号中只能有一个变量。这似乎是因为大多数介绍性示例都是用单个输入显示的。当您有多个独立的输入时,您可以有多个变量,因为当其中一个输入发生变化时,复杂性将独立扩展

一个普遍存在的例子是图形。图有节点和边。节点的数量可能会对边的数量设置上限,但两者实际上是相当独立的。因此,大多数图形算法都是根据
V
E
来分析的,而不是单个变量
N


这对你们来说意味着,你们有两个独立的量。比如说
s=len(s)
B=len(B)
。外部循环执行
S
迭代。b中的操作员在最坏情况下执行
b
操作。如果假定
print
对单个字符以恒定时间运行,结果是
O(S*B)

什么是
n
?您的代码根据两个值
len(s)
len(b)
进行缩放。一旦你开始这样想,你的代码应该是
O(len(s)*len(b))
你在这里得到了有用的答案。你为什么不把一个答案标记为已被接受呢?向上投票会很好。什么是
n
?您的代码根据两个值
len(s)
len(b)
进行缩放。一旦你开始这样想,你的代码应该是
O(len(s)*len(b))
你在这里得到了有用的答案。你为什么不把一个答案标为被接受呢?投票表决也不错