关于图论
来源:1-2 图论到底有什么用?
qq_慕莱坞4316410
2023-03-18
老师,这应该是我购买老师的第4门课,还有算法和数据结构的体系课程,但是总感觉学几个月课程感觉用代码有思路写出来,但是如果半年或者5个月不接触,有的比较复杂的算法可能又不清楚了,但是回看视频又可以写出来,是不是我的方法不对啊。就是课程是不是会讲图的最短路径啊,因为在学习Viterbi算法的时候有涉及到图的最短路径,但是这个理解不是很深,导致我对Vitebi算法理解上总是很迷糊,还有就是很多人都建议不要使用递归,说递归会影响性能,但是在之前学习分词的时候,感觉没有递归很多算法会变得贼复杂,可能是我对递归和非递归在性能上理解不深。但是还是感谢老师的课程,让我入门数据结构和算法
1回答
-
1
“但是如果半年或者5个月不接触,有的比较复杂的算法可能又不清楚了”
这太正常了。比如我们在大学学习的课程,基本上都是以半年为一个单位的。你认为你在这个学期末,参加上个学期末学科的考试,能得多少分?说实话,5,6 个月以后,还是只是复杂的算法,觉得不清楚了,已经很不错了。2 个月的时间忘的一干二净,在我看来都是正常的。
2
“是不是我的方法不对啊”
如果你想熟练应用,关键就是不断地接触和使用。这本身就是方法。这个世界上没有什么神奇的方法,能够让你过目不忘的。
3
“但是回看视频又可以写出来”
实际上这本身就是学过了,并且学到了的意义和标志。
学习不是把所有的知识牢牢地印在脑子里,而是你知道了原来有这么一种方法,可以解决这么一类问题。再遇到类似的问题的时候,你会知道,我可以使用哪个方法解决。具体这个方法的细节,你可能记不清楚了,但没关系,细节一查就是。但是通过学习,你扩展了自己的知识,增加了经验,对编程的理解更深刻了,等等等等,这一切才是更重要的。
有一句话:学习就是学完以后,大多数知识忘掉了以后,剩下的东西,大致就是这个道理。
4
“课程是不是会讲图的最短路径”
会。无权图的最短路径和有权图的最短路径都是图论的重点。
5
“很多人都建议不要使用递归,说递归会影响性能”
递归肯定会影响性能。但是这个对性能的影响是否在你的具体实践中需要考虑,是根据领域而定的。
比如对于嵌入式等性能局限性非常强的领域,或者你的数据可能会导致递归栈过深等情况,就应该避免递归。如果没有这类特殊考量的话,对于在现代计算机上的很多场景的编程编程,这类递归对性能的影响可以不考虑。
6
“但是在之前学习分词的时候,感觉没有递归很多算法会变得贼复杂”
实际上当你有这个认识的话,一定程度说明你对递归的理解是深刻的。很多没有完全理解递归的同学,会觉得递归好复杂。
(当然,他么也大概率没有接触过更复杂的问题,所以没有认识到:对于很多问题,递归是比非递归简单的多的。)
但整体,递归算法转化为非递归算法是有“很套路”的方式的。你只需要先写出递归算法,然后设立一个栈,用你自己设立的栈,模拟递归算法执行的过程的系统栈即可。如果你对这一部分体会不深,可以在网上稍微搜索一下,应该有很多介绍这方面的文章。但你首先需要学习理解系统是如何执行递归的,计算机执行一段递归程序,本质这个过程,就是在把递归逻辑转换成了非递归指令去执行的。(因为计算机只能顺次执行指令)。
另外值得一提的是:递归的过程可以理解成是在一棵树上(递归树)做 dfs,而对于任意树,也一定可以做 bfs,所以将对递归树的访问改为 bfs 的访问,也是一个系统地将递归转为非递归的方式。
dfs 和 bfs 也是图论这个课程的重点,学习完这个课程,你应该对此有更深刻的认识。
继续加油!:)
012023-03-20
相似问题