鱼C论坛

 找回密码
 立即注册
查看: 1780|回复: 2

大O 技法

[复制链接]
发表于 2023-9-8 16:13:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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技法)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

在最坏的情况下,我们需要遍历word1中的每个字符,并在word2中查找和移除相应的字符。因此,时间复杂度为O(n)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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),但在平均情况下可能会更快一些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表