chapter_computational_complexity/time_complexity/ #18
Replies: 114 comments 177 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.
-
log n 递归树那里,返回参数为 n/2,是不是会出现浮点数的情况。 |
Beta Was this translation helpful? Give feedback.
-
图2-7和2.3.2函数渐进上界写的不太严谨。首先,2.3.2里int a = 1算操作数+1,但是int i = 0没算。其次,i < n判断操作没算。最后,T(n)应该是等于5+3n,多了int i = 0(操作+1)和判断操作i < n(操作+n+1)。图2-7的算法运行时间只考虑了打印时间,怎么看都和下面2.3.2的内容不搭。 |
Beta Was this translation helpful? Give feedback.
-
随机打乱为啥只能选i之前的数进行替换,第二行为啥不用const r = Math.floor(Math.random() * n); |
Beta Was this translation helpful? Give feedback.
-
最重要是记住时间复杂度那幅图:
|
Beta Was this translation helpful? Give feedback.
-
我是一位视障程序员,我在网上找了很多数据结构和算法的资料,很多都用图片展示代码片段,后来发现Hello算法非常1接地气,也很无障碍,阅读了几节之后,遇到一个问题,希望作者能考虑修改一下。我在使用PDF和在线版本的时候 |
Beta Was this translation helpful? Give feedback.
-
我猜测你可能看到的是 https://www.hello-algo.com/chapter_computational_complexity/time_complexity/#1 这一节的内容,我用 edge 自带的「大声朗读」测试了下,这种基于 mathjax 的行内公式是可以被阅读的,但行间公式也就是公式块的确无法阅读,稍微查了下 mathjax 上的无障碍支持,似乎开启了也只支持英文、西班牙语等,并不支持中文。 把相关的配置放在这里,期待开发者有更好的解决方案:https://www.osgeo.cn/mathjax/basic/a11y-extensions.html#a11y-extensions。 |
Beta Was this translation helpful? Give feedback.
-
发自 Zhang JunJun 我目前使用NVDA这款开元屏幕阅读器来阅读浏览器中的网页内容,当然我猜Mac的旁白和Windows的讲述人表现和NVDA也差不多,我有一个非常简单的解决方案,当然不一定能快速应用到项目中。可以在网页渲染的时候,使用aria这种html属性标注公式块,将公式的父元素的aria-label设置为ascii math文本,这样我就可以读到公式的每一个字符,例如n的平方就是n^2,希望能采纳。至于PDF如何解决这个问题,目前还没想到方法。感谢!在 2024年5月5日,11:05,Ocean ***@***.***> 写道:
我猜测你可能看到的是 https://www.hello-algo.com/chapter_computational_complexity/time_complexity/#1 这一节的内容,我用 edge 自带的「大声朗读」测试了下,这种基于 mathjax 的行内公式是可以被阅读的,但行间公式也就是公式块的确无法阅读,稍微查了下 mathjax 上的无障碍支持,似乎开启了也只支持英文、西班牙语等,并不支持中文。
把相关的配置放在这里,期待开发者有更好的解决方案:https://www.osgeo.cn/mathjax/basic/a11y-extensions.html#a11y-extensions。
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
麻了对数概念全忘光, 对数相关内容看得云里雾里的, 真就是知识重新丢回给了老师 |
Beta Was this translation helpful? Give feedback.
-
看到有位视障程序员和我们一起学习,很感动!希望我们的社区越来越有爱。也希望作者能看到这位程序员的需求。同时想,有没有利用AI来做无障碍阅读的产品?尤其是可以处理富文本图片等等的。希望能帮到他。 |
Beta Was this translation helpful? Give feedback.
-
使用 aria-label 的确可以无视各种环境限制,将源码作为图片的 alt 显示,但这种方式并不是可访问性最佳的方法,阅读效率上会非常低。 |
Beta Was this translation helpful? Give feedback.
-
对于一般的图表,例如文中的其他图片,使用 alt 是没有问题的,这样这些描述文字就不会被其他不使用屏幕阅读器的读者看到 |
Beta Was this translation helpful? Give feedback.
-
感谢大家对无障碍问题的关注,现在我学到树结构了,我遇到时间复杂度、空间复杂度的公式的时候,就只能靠猜,还好的是,了解了基本概念自己是能算出来的,但如果能读到公式,就能确认自己想的是否正确,学的会更自信一些。 |
Beta Was this translation helpful? Give feedback.
-
k神,2.3.2中,【我们将线性阶的时间复杂度记为O(n)】,这里会不会产生一个歧义,非线性阶时间复杂度不是大O表示法呢? |
Beta Was this translation helpful? Give feedback.
-
我在想渐进上界的定义是不是不充分(虽然我查到的定义也是这样)。按这个定义,本来为O(n)复杂度的程序,也可以说e^n是渐进上界,但这并没有体现“渐进”和增长趋势相同。我粗略想了一个可能的定义:在在原来的基础上,加上存在c2>0,使c2 * f(n) <= T(n) <= c * f(n)。 |
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