查看: 952| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] 96题的时间复杂度求分析

🔗
匿名用户-6JWPF  2020-7-31 11:17:59 |倒序浏览

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
如题,跪求分析时间复杂度~    (我知道这题应该用DP, 但是为了学习目的,我还是想知道这个时间复杂度是多少~)

  1. class Solution {

  2.     public int numTrees(int n) {
  3.          
  4.        return dfs(1, n);            
  5.      
  6.     }
  7.    
  8.     public int dfs(int left, int right){
  9.         
  10.         int res = 0;
  11.          
  12.         if(left >= right) return 1;  // base case
  13.         
  14.         for(int i = left; i <= right; i++ ){
  15.       
  16.             int L = dfs( left, i - 1 );
  17.             
  18.             int R = dfs( i+1,  right );

  19.             res += L*R;
  20.         }
  21.    
  22.         return res;  
  23.    
  24.     }
  25. }

  26.   
复制代码



如题,跪求分析时间复杂度~


补充内容 (2020-8-2 01:48):
---

为何时间复杂度是 O(n!)更准确点?  (大神告诉我的,但我不知道原因,而我自己粗暴分析是2^n)

补充内容 (2020-8-2 03:08):
--

大神说搞错了,说应该是 4^n    大家能分析下吗?

上一篇:如果面试时碰到原来做过的题,需要告诉面试官?
下一篇:网上面试的话,公司用什么视频软件?加米
🔗
yihong15 2020-7-31 11:33:36 | 只看该作者
全局:
复杂度是指数级别的。

令f_n为right-left+1=n时的迭代次数,根据你的计算,有

f_n=2 \sum_{k=0}^{n-1} f_k,可以自己用python算一下这个值是多少。

作为一个下界估计,有

f_n >= 2 f_{n-1},从而

f_n >= 2^(n-1)。
回复

使用道具 举报

🔗
zurich.hill 2020-7-31 11:50:18 | 只看该作者
全局:
yihong15 发表于 2020-7-31 11:33
复杂度是指数级别的。

令f_n为right-left+1=n时的迭代次数,根据你的计算,有

大神说是O(n!)哦
回复

使用道具 举报

🔗
yihong15 2020-7-31 12:07:29 | 只看该作者
全局:

我只说是指数级别的啊。

以及准确的计算应该是O(3^n),

按照f_0=1来进行递推,不难验证

f_n=2*3^(n-1) 对于任意 n>=1成立。
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-6JWPF  2020-8-2 01:39:07
yihong15 发表于 2020-7-31 12:07
我只说是指数级别的啊。

以及准确的计算应该是O(3^n),

我还是不懂啊~  能做一个详细视频看看吗?  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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