微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 O 符号找到最坏情况的运行时间

如何解决使用 O 符号找到最坏情况的运行时间

我是 O-notation 的新手,我正在尝试使用这些给定界限中的 big-O 表示法确定最坏情况运行时间的最严格界限:

  1. O(1)
  2. O(log n)
  3. O(n)
  4. O(n log n)
  5. O(n**2)
  6. O(n**3)
  7. 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),其中sums1n 中元素的数量。详细说明:

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 两次。

连接两个列表,evenodd 也是线性的,O(n)。因为要连接两个列表,在最坏的情况下,您必须遍历第一个,直到找到它的最后一个元素。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。