davidmou 发表于 2023-9-8 16:13:35

大O 技法

def boll(word1, word2):
    list1= list(word1)
    a1 = len(word1)
    list2 = list(word2),
    a2 = len(word2)
    n = 0
    if a1 == a2:

      for each in list1:
         
            if each in list2:
               
                list2.remove(each)
            
                n += 1
            if n== a1:
                print("great")
      



boll("eweew","ewewe")

能将一下这段代码的数量级吗(大O技法)

isdkz 发表于 2023-9-8 16:13:44

这段代码的数量级是O(n),其中n是word1的长度。在代码中,我们首先将word1和word2转换为列表,并获取它们的长度。然后,我们使用一个循环遍历word1中的每个字符。在每次迭代中,我们检查该字符是否存在于word2中。如果存在,我们将其从word2中移除,并增加计数器n的值。最后,我们检查计数器n是否等于word1的长度a1。如果是,则打印"great"。

在最坏的情况下,我们需要遍历word1中的每个字符,并在word2中查找和移除相应的字符。因此,时间复杂度为O(n)。

陶远航 发表于 2023-9-9 07:53:51

这段代码的时间复杂度(大O记号)可以分析如下:

1. 首先,将两个字符串转换为列表,这个操作的时间复杂度是 O(m + n),其中 m 是第一个字符串的长度,n 是第二个字符串的长度。

2. 接着,获取两个字符串的长度,这两个操作的时间复杂度都是 O(1)。

3. 然后,进行了一个循环,循环的次数是第一个字符串的长度 a1。在循环内部,执行了一系列的操作,包括列表查找和删除操作。

   - 列表查找操作,在最坏情况下,需要遍历整个列表,时间复杂度是 O(m)。
   
   - 列表删除操作,在最坏情况下,需要将元素移动到列表末尾,时间复杂度是 O(m)。

   综合考虑,循环内部的操作的时间复杂度是 O(m)。

4. 最后,判断 n 是否等于 a1,这是一个常数时间操作,时间复杂度是 O(1)。

因此,总的时间复杂度可以表示为:

O(m + n) + O(1) + a1 * O(m) + O(1) = O(m + n + a1 * m)

这里 m 是第一个字符串的长度,n 是第二个字符串的长度,a1 是第一个字符串的长度。

需要注意的是,在实际情况中,这段代码的性能会受到具体输入数据的影响,最坏情况下的时间复杂度是 O(m + n + a1 * m),但在平均情况下可能会更快一些。
页: [1]
查看完整版本: 大O 技法