chapter_computational_complexity/time_complexity/ #18
Replies: 133 comments 203 replies
-
本页中n^2的讲解中,以「冒泡排序」为例,外层循环n-1 次,内层循环···次,平均为n/2次,因此时间复杂度为 ··· 。在这里计算的是最差时间复杂度,是不是描述应该为计算内层冒泡排序次数的等差数列求和,而不是平均n/2再乘以外层(n-1)的描述,感觉容易造成歧义。 |
Beta Was this translation helpful? Give feedback.
-
最差 O 平均 θ 最优 Ω |
Beta Was this translation helpful? Give feedback.
-
大佬好,界面是不是加一个“返回顶部”的按钮会更方便些呀; |
Beta Was this translation helpful? Give feedback.
-
大佬你好,我是一个算法小白,在看公式时就有了困难,比如这个公式T(n)= 3 +2n,文中也没有具体写是怎么推导出来的,不仅如此,其他公式的推导好像也没有太详细。不知我是不是还该继续看下去。 |
Beta Was this translation helpful? Give feedback.
-
指数阶, 那个代码里面应该是 return expRecur(n - 2) + expRecur(n - 1) + 1吧; |
Beta Was this translation helpful? Give feedback.
-
哈喽,k大,worst_best_time_complexity.cpp 代码编译时出错 ➜ chapter_computational_complexity git:(master g++ worst_best_time_complexity.cpp
worst_best_time_complexity.cpp: In function ‘std::vector<int> randomNumbers(int)’:
worst_best_time_complexity.cpp:17:21: error: ‘chrono’ has not been declared
17 | unsigned seed = chrono::system_clock::now().time_since_epoch().count();
| ^~~~~~
worst_best_time_complexity.cpp:19:5: error: ‘shuffle’ was not declared in this scope
19 | shuffle(nums.begin(), nums.end(), default_random_engine(seed));
| ^~~~~~~ 原因是在
添加后编译通过,运行正常 ➜ chapter_computational_complexity git:(master g++ worst_best_time_complexity.cpp -o worst_best_time_complexity
➜ chapter_computational_complexity git:(master ls worst_best_time_complexity*
worst_best_time_complexity worst_best_time_complexity.cpp
|
Beta Was this translation helpful? Give feedback.
-
看不明白,这章好像只是知道了时间复杂度的表示方式。 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
K神,阶乘阶的操作总数应该不是等于最底层结点数量吧,是所有结点中的操作总数之和吗? |
Beta Was this translation helpful? Give feedback.
-
指数阶这段没看懂count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1。为什么最后等于2^n - 1 |
Beta Was this translation helpful? Give feedback.
-
能看到这本书真的太好了 |
Beta Was this translation helpful? Give feedback.
-
我不太清楚是不是我的系统问题,这两天一直在看,前几天似乎没问题。今天起的教程似乎所有显示数学公式的地方都出了问题?比如2.2.4中的一段变成了这样: 以下示例展示了使用上述技巧前、后的统计结果。 Edge 和 Chrome 都有这样的显示问题 |
Beta Was this translation helpful? Give feedback.
-
学习数据结构画图太重要了,作者的图画的太棒啦,可以知道是什么软件画的吗 |
Beta Was this translation helpful? Give feedback.
-
/* 指数阶(递归实现) */
function expRecur(n: number): number {
if (n == 1) return 1;
return expRecur(n - 1) + expRecur(n - 1) + 1;
} 这是在求什么,为什么最后要+1。没懂这里,谢谢。如果不要+1应该是求最后一层树结点数量,再+1就不知道是求什么了。请问是我理解错了吗?能不能分析一下这个函数的复杂度,谢谢大佬。已经理解了,是求全部节点数量,即操作次数,没毛病。谢谢大佬。太巧妙了。 总结为:n层的总节点数是n-1层总结点数*2 + 1,第1层总数为1,所以可以这样递归写。 看完gpt的答案我也懂了,感觉可以参考gpt的回答改进一下。 上述函数的时间复杂度为指数阶(Exponential Time),记作O(2^n)。 在函数中,每次递归调用expRecur(n - 1)会导致另外两次递归调用,因此函数的递归深度将以指数级增长。每次递归调用的时间复杂度是常数级的,但由于递归的次数是指数级的,因此整体时间复杂度也是指数级的。 简单来说,随着输入n的增加,函数的执行时间将指数增长,导致非常低效。因此,这是一个效率较低的实现,特别是在处理大型输入时。如果需要更高效的实现,可以考虑使用其他算法或优化技巧来减少递归的次数。 |
Beta Was this translation helpful? Give feedback.
-
经过n次分裂后 2^0 +2^1 +2^n =2^n -1
T(n) =2^n - 1
用类比法,如下
T(1)=1
T(2)=2^2 - 1 =3
T(3)=2^3 - 1 =7
……
代码里
expRecur(n)=expRecur(n - 1) + expRecur(n - 1) + 1
expRecur(n)=2 * expRecur(n - 1) + 1
expRecur(1)=1
expRecur(2)=2 * expRecur(1) + 1=3
expRecur(3)=2 * expRecur(2) + 1 =7
…….
所以
expRecur(n)=T(n)=2^n - 1
代码可以去计算,经过n次分裂后的数据
就是用简单数学换算。
null
yimu ***@***.***>于2024年10月16日 周三23:05写道:
… 在指数阶运算的第三段代码中,return exp_recur(n - 1) + exp_recur(n - 1) +
1这里为什么加了两次exp_recur(n - 1)啊
—
Reply to this email directly, view it on GitHub
<#18 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AVZFKIP35JTJTMOULQKSF2TZ3Z6DTAVCNFSM6AAAAAASLISNF6VHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTAOJWGEZDENA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
好迷茫啊 以后全栈还是大前端
null
yimu ***@***.***>于2024年10月17日 周四19:57写道:
… 嗷嗷,这样啊,明白了,谢谢
—
Reply to this email directly, view it on GitHub
<#18 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AVZFKIMG2EQE7GNYWCMXPRLZ36Q3LAVCNFSM6AAAAAASLISNF6VHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTAOJXGA3TCNA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
兄弟 指点一下
null
beihuxiansheng ***@***.***>于2024年10月24日 周四15:19写道:
… 全栈已经提了快10年了,谁听谁惨,不要走技术方面的全栈
—
Reply to this email directly, view it on GitHub
<#18 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AVZFKIJDQC2PIB5XBO6ZAVLZ5CNOZAVCNFSM6AAAAAASLISNF6VHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTCMBTG4ZTMOI>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
由于输入数组是被打乱的,因此元素 1 |
Beta Was this translation helpful? Give feedback.
-
在指数阶运算的第三段代码中,return exp_recur(n - 1) + exp_recur(n - 1) + 1这里为什么要加1啊 |
Beta Was this translation helpful? Give feedback.
-
就是等比数列求和的变形
s(n)= 2^n - 1
s(n)= 2 * s(n-1) + 1
同理,你也可以整出其他花样
null
LI Jiaxing ***@***.***>于2024年11月15日 周五20:36写道:
… 在指数阶运算的第三段代码中,return exp_recur(n - 1) + exp_recur(n - 1) + 1这里为什么要加1啊
—
Reply to this email directly, view it on GitHub
<#18 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AVZFKIJBNOLPZ6HEEW7SO6D2AXTD3AVCNFSM6AAAAAASLISNF6VHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTCMRWGY2TCNQ>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
学习了,终于知道算法里的时间复杂度是什么东西了,之前只是说一个算法比另外一个算法快,但是完全不知道是怎么回事,现在才理解到有算法复杂度这回事 |
Beta Was this translation helpful? Give feedback.
-
这样讲解好,终于明白点了。 |
Beta Was this translation helpful? Give feedback.
-
在2^n复杂度的递归树图中,我个人认为有点模糊重点。指数阶的代码是一个线性代码,没有递归调用,不适合使用递归树分析。递归树的子节点应该是上一个父节点的分裂出来的调用,例如斐波那契中f(n),分裂成f(n-1)和f(n-2)。 2^n的算法指数阶是一个嵌套循环,而非递归算法。所以它的递归式应该是 它的递归树更像是这样:
|
Beta Was this translation helpful? Give feedback.
-
数学不怎么好的人....开始有点晕晕的了 |
Beta Was this translation helpful? Give feedback.
-
图 2-7 算法 A、B 和 C 的时间增长趋势。图表设计的有点问题,XY轴原点不一样,划线的句子说:当n=0时,算法A更慢,但乍眼一看图表,运行时间是一样的。后面才发现是图标画的有些误解。 |
Beta Was this translation helpful? Give feedback.
-
Alexury打卡 day2 |
Beta Was this translation helpful? Give feedback.
-
x=2; |
Beta Was this translation helpful? Give feedback.
-
可否增加一个评论区时间或热度排序功能,或者通过点赞量实现?另外一级评论下的二级评论不能互相回复,这点可以参考下知乎或b站的评论区机制,提个小建议,以上。 |
Beta Was this translation helpful? Give feedback.
-
chapter_computational_complexity/time_complexity/
动画图解、一键运行的数据结构与算法教程
https://www.hello-algo.com/chapter_computational_complexity/time_complexity/
Beta Was this translation helpful? Give feedback.
All reactions