如何解决使用 O 符号找到最坏情况的运行时间
我是 O-notation 的新手,我正在尝试使用这些给定界限中的 big-O 表示法确定最坏情况运行时间的最严格界限:
- O(1)
- O(log n)
- O(n)
- O(n log n)
- O(n**2)
- O(n**3)
- O(2**n) 作为实践,我在所有代码的注释中添加了最严格的界限,但我无法弄清楚哪些情况将与抽象列表函数一起使用。例如,我在下面有两个简单的代码来求和:
示例:
def sums1(L):
even = list(filter(lambda x: x%2==0,L))
odd = list(filter(lambda x: x%2==1,L))
return even + odd
def susm2(L):
if L == []:
return 0
s1 = sum(L)
s2 = sums2(L[1:])
s3 = sums2(L[2:])
return s1+s2+s3
根据我的理解,第一个代码将运行 O(n^2) 次,因为添加了两个抽象列表,而第二个将运行 O(2^n)。但是,我在网上找不到任何类似的代码来查看我是否正确,所以我想我会在这里问。非常感谢任何有关将运行多少次的指导。 :D
解决方法
关于PIL %>%
rownames_to_column('abbrev') %>%
extract(abbrev,c('PIL','abbrev','num'),'(PIL\\d?)\\.(PILK\\d+)\\.\\.(\\d+)\\.') %>%
left_join(lookup,by = 'abbrev') %>%
group_by(prozess_name,num) %>%
summarise(across(gering:Summe,sum,na.rm = TRUE)) %>%
ungroup
# prozess_name num gering hoch `keine Angabe` mittel `sehr gering` `sehr hoch` Summe
# <chr> <chr> <int> <int> <int> <int> <int> <dbl> <dbl>
#1 Prozess1 1 15 52 15 46 18 40 186
#2 Prozess1 2 19 65 36 50 11 5 186
#3 Prozess2 1 24 45 22 35 31 29 186
#4 Prozess2 2 9 63 47 52 3 12 186
#5 Prozess3 1 19 67 19 33 29 19 186
#6 Prozess3 2 15 62 41 51 6 11 186
,我相信您的复杂度为O(n),其中sums1
是n
中元素的数量。详细说明:
L
创建 def sums1(L):
even = list(filter(lambda x: x%2==0,L)) # O(n)
odd = list(filter(lambda x: x%2==1,L)) # O(n)
return even + odd # O(n)
和 odd
列表需要 O(n),因为您需要遍历 L 两次。
连接两个列表,even
和 odd
也是线性的,O(n)。因为要连接两个列表,在最坏的情况下,您必须遍历第一个,直到找到它的最后一个元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。