对于这个问题,我们给出了一个函数f,它以标准方式计算第n个斐波纳契数:
f(n)
{
if(n == 0)
return 0;
if(n == 1)
return 1;
else return f(n-1) + f(n-2);
}
然后我负责计算函数对输入n执行的算术运算的数量。我知道每次调用f都会执行3次操作(2次减1次加法),然后我尝试通过扩展函数来尝试查找某种递归关系,然后计算完成了多少算术运算。但后来我陷入困境,因为这不是正确的答案。
正确答案是f对输入n进行3f(n + 1)-3次算术运算。请有人向我解释一下吗?这很重要,因为我们后来被要求以此为起点找到时间复杂度。
非常感谢, Niamh
答案 0 :(得分:2)
算法的时间复杂度接近2 ^(n)。因此它是 O(2 ^ n) 以下是n = 6
时算法将如何解决的示例
你算法做T(n) = T(n-1) + T(n-2) + O(1)
。
T(n-1)= T(n-2)+ T(n-3)+ O(1)
T(n-2)= T(n-3)+ T(n-4)+ O(1)
。 。
T(2)= T(1)+ T(0)+ O(1)
T(n)= T(n-1)+ T(n-2)+ O(1)等于
T(n)= O(2 ^(n-1))+ O(2 ^(n-2))+ O(1)= O(2 ^ n)
答案 1 :(得分:0)
可能执行了n / 2次附加操作;
library(tidyverse)
library(magrittr)
#remove non-unique genres
books %<>% mutate(genre = map(str_split(genre, ', '), ~ paste(unique(.x), collapse = ',')))
#separate into columns
books %>%
separate(col = 2, into = paste0('genre', seq(max(str_count(books$genre, ',')) + 1L))
, sep = ',')
# # A tibble: 3 x 6
# title genre1 genre2 genre3 genre4 genre5
# <chr> <chr> <chr> <chr> <chr> <chr>
# 1 Harry Potter 1 Fantasy Young Adult Magic NA NA
# 2 To Kill A Mockingbird Classics Fiction Historical Historical Fiction Academic
# 3 The Hunger Games 1 Young Adult Fiction Science Fiction Dystopia NA
输出:0112。
注意:如果n为奇数,则加法运算(n / 2)+1次;
注意:如果n为偶数,则执行(n / 2)次加法运算;
!如果我错了,请纠正我!