算法是计算机解决问题的步骤。研究算法分析很有意义。算法分析可以判断算法的好坏。算法分析主要看时间。算法分析也看空间。时间就是算法运行得快慢。空间就是算法占用内存的多少。
我们生活里就有算法的例子。比如你要在电话本里找一个名字。你可以一页一页翻。你可以从中间翻开。电话本里的名字是按顺序排的。从中间翻开后看看名字在哪一边。这样每次都能扔掉一半。一页一页找的方法很慢。从中间找的方法很快。这就是算法的区别。算法分析就是比较这两种方法。
写毕业论文需要选一个题目。算法分析的题目很多。你可以分析排序算法。排序就是把一堆数字排好顺序。排序算法有很多种。冒泡排序是一种简单的排序。它比较相邻的两个数字。如果顺序不对就交换它们。这样一遍一遍地做。直到所有数字排好。这种方法容易理解。但是它的速度很慢。特别是数字很多的时候。
还有一种排序叫快速排序。快速排序选一个数字当基准。把比它小的放左边。把比它大的放右边。然后对左右两边再做同样的事情。这种方法很快。数字很多的时候优势明显。算法分析就要比较它们的时间。
时间复杂度的概念很重要。它描述算法时间和数据量的关系。冒泡排序的时间复杂度是n的平方。数据量增加十倍。时间大概增加一百倍。快速排序的时间复杂度是n乘以logn。数据量增加十倍。时间增加十倍多一点。快速排序比冒泡排序好很多。
空间复杂度也要考虑。空间复杂度看算法需要多少额外内存。冒泡排序只需要一两个变量来交换。它的空间复杂度很小。快速排序需要递归。递归需要调用栈。它的空间复杂度比冒泡排序高。有时候空间很宝贵。就要选省空间的算法。
实际分析算法要做实验。你要写代码实现算法。你要用不同大小的数据去测试。你记录算法运行的时间。你记录算法占用的内存。你把数据做成表格。你把数据画成图表。图表可以直观地展示结果。你可以看到数据量变大时时间和空间的变化。
分析结果需要讨论。为什么这个算法快。为什么那个算法慢。算法快慢和数据结构有关。数组和链表不一样。数组访问元素很快。链表插入元素很快。选择合适的数据结构很重要。算法和数据结构是分不开的。
你还可以分析特定场景下的算法。比如实时系统要求很快的反应。算法必须保证最坏情况下的时间。有的算法平均情况很快。但最坏情况很慢。这就不适合实时系统。你要分析算法的最坏时间复杂度。
另一种场景是移动设备。移动设备的内存小。电池也有限。算法要省空间。算法也要省电。省电和计算次数有关。计算越多耗电越多。你要分析算法的计算量。
算法分析也可以研究近似算法。有的问题很难找到精确解。精确解需要太多时间。近似算法可以快速找到一个差不多的解。近似算法要分析近似比。近似比表示近似解和最优解的差距。有的问题允许近似解。这样能节省大量时间。
你的毕业论文要有自己的贡献。你可以改进已有的算法。你可以提出新的分析方法。你可以把算法用在新的问题上。你的工作要有创新点。创新点可以很小。但必须清楚说明。
写论文需要参考别人的工作。你要读很多相关的文章。你要知道别人做了什么。你要说明你的工作和别人的不同。你的方法有什么优点。你的结果有什么意义。
论文写作要清晰。每一段讲一个意思。句子要简短。用词要简单。图表要清楚。数据要准确。结论要基于你的分析和实验。不要夸大你的结果。
算法分析是一个实用的领域。好的算法能节省时间。好的算法能节省资源。研究算法分析有价值。你的毕业论文是这个研究的一部分。认真做会有收获。