Fibonacci函数执行的算术运算数

时间:2014-11-25 23:07:12

标签: time-complexity fibonacci

对于这个问题,我们给出了一个函数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

2 个答案:

答案 0 :(得分:2)

算法的时间复杂度接近2 ^(n)。因此它是 O(2 ^ n) 以下是n = 6

时算法将如何解决的示例

Working of fibonacci

你算法做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)

查看Fibonacci time complexity

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)次加法运算;

!如果我错了,请纠正我!