算法的效率与什么有关
A. 算法分析:如何分析一个算法的效率好坏
1. 当我们讨论算法分析时,我们在关注算法的效率:算法分析涉及对算法在使用时间和存储空间方面的效率进行评估。具体来说,这包括时间复杂度和空间复杂度。
2. 资源关注点的变迁:在计算机早期,时间和空间资源都非常宝贵。尽管现在计算机性能大幅提升,空间效率不再是重点,但时间效率的重要性依然不减。
3. 分析算法的时间效率:在评估算法时,我们主要关注其时间效率。可以通过分析算法的基本操作次数来衡量时间效率,这些基本操作对算法性能有决定性影响。
4. 输入规模的影响:算法的时间效率受输入规模的影响。随着输入规模的增加,算法运行时间通常会增长。分析时需根据具体问题确定输入规模。
5. 最优与最差效率:算法的执行效率不仅受输入规模影响,还取决于输入参数的具体细节。最优效率指在最佳输入下的效率,最差效率指在最坏输入下的效率。
6. 平均效率的计算:在现实场景中,输入数据通常不是最优也不是最差,因此需要计算平均效率。平均效率的计算不应简单地取最优和最差效率的平均值,而应基于特定假设进行。
7. 算法研究的复杂性:研究算法的平均效率比研究最优和最差效率更为复杂,需要将输入规模划分为不同类型,确保同类型输入下算法执行次数相同。
8. 算法的重要性:算法是计算机科学的核心,未来将继续更新算法相关内容。对算法感兴趣的读者可以关注博客,并参与留言讨论。
9. 数据时代的相关兴趣:对数据处理感兴趣的读者可以查看有关利用Python进行数据分析的系列文章。
10. 参考资料:提及《算法分析:设计与分析》第三版,Anany Levin着。
B. 影响算法设计的因素有哪些
影响算法设计的有以下因素:
针对机器:空间复杂性和时间复杂性。
针对程序员:算法表达和实现的简单性。
针对问题:算法对问题及问题输入规模的普适性。
影响算法效率的因素
1、从大的方面来讲,所选择的语言对算法的效率影响很大。一般来说,使用越高级的语言所需要的时间和空间就越大。另外,不同编译器产生的代码质量不同,这对算法的效率也会有影响。
2、存储结构
数据的存储结构,分为顺序存储结构和链式存储结构。顺序存储结构的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;链式存储结构则是借助指示元素存储地址的指针表示数据元素之间的逻辑关系。不同的问题求解选用不同的存储结构。
3、指针操作
在使用指针时,指针的有秩序扫描非常重要。例如在模式匹配中,如果直接进行匹配,当有不完全匹配时,主串的指针需要回溯。
在KMP算法中,我们先可以求出每个元素的next函数值,从而在发生不完全匹配时,主串的指针不必要回溯,只需要模式串的元素回到当前元素的next函数值所指的元素再进行匹配即可。当主串和模式串有很多不完全匹配时,KMP算法可以大大提高效率。
4、查找的效率
有很多快速查找的算法都可以提高查找的效率,如建立索引,折半查找等,都是在记录和关键字之间进行比较,从而寻求关系。这一类查找建立在比较的基础之上。查找的效率依赖于查找过程中所进行的比较次数。
在哈希表中,使得记录的存储位置和关键字之间建立一个确定的存储关系,因而在查找时,只需要根据这个对应的关系f 找到给定值K 的像f(k)。用这个思想建立哈希表。如在基因组匹配时,用哈希表非常方便。
5、数据类型的选择
数据类型的选择也会影响算法效率,在对时间和空间要求非常严格时,尽可能的使用占用空间较小的数据类型。使用动态开辟空间会使得效率降低,所有在能确定或估计出需要的空间大小的情况下尽量使用静态数字。个人觉得用vector虽然方便,但是效率并不高。
6、存储方式
用堆操作还是用栈操作,对于不同的问题需要仔细选择。在串和队列的有关操作中用堆操作合适,在树的操作中用栈操作合适,如建立二叉树中序遍历的递归算法或非递归算法,用栈操作好。