我们通过这节的讲解来了解一下什么是算法
生活中的算法
算法的定义:在有限步骤内解决数学问题的过程。
算法的条件:算法必须满足这5个特征(输入,输出,明确性,有效性,有限性);
流程图:是一种以图形符号来表示算法的通用方法。
那么算法和过程有何不同?与流程图又有什么关系呢?
算法和过程的区别主要体现在:算法是具有有限性特征的,但是过程是可以允许无限循环的,也正因如此流程图可以表示算法,但是不能表示过程。
时间复杂度O(f(n))
这就是判断一个算法好坏的一个标准,可以把某个算法执行步骤的计数来作为衡量运行时间的标准。
特性:(1).最大运行时间是时间复杂度的衡量标准(也就是要服从“宁可高估也不要低估”的原则,因此估计出来的是算法真正所需运行时间的上限)。
(2).分析算法的时间复杂度时,往往用函数来表示它的成长率,也就是说时间复杂度是一种“渐进表示法”
(3).O(f(n))可视为某算法在计算机中所需运行时间不会超过某一常数倍的f(n).。
(4).当n>=16的时候时间复杂度的优劣关系如下:O(1) < O(log2^n) < O(nlog2^n) < O(n^2) < O(n^3) < O(2^n);
4常见的算法介绍:
(1).分治法:核心思想:就是将一个难以直接解决的大问题依照相同的概念分割成俩个或更多的子问题,以便各个击破。Eg:快速排序法,递归算法,大整数乘法。
(2).递归法:一个函数或者子程序是由自身所定义或调用的就称为递归。(它至少要包含俩个条件:第一个是可以反复执行的递归过程,第二个是跳出执行过程的出口)
(3).贪心法:核心概念:又称为贪婪算法,从某一起点开始,就是在每一个解决问题步骤中使用贪心原则,即采取在当前状态下最有利或最优化的选择,不断地改进该解答,持续在每一步骤中选择最佳的方法,并且逐步逼近给定的目标,当打到某一步骤不能再继续前进时算法停止,以尽可能地求得更好的解。《贪心法的精神虽然是把求解的问题分成若干个子问题,不过不能保证求得的最后解是最佳的,因为贪心算法容易过早做决定,只能求满足某些约束条件可行的范围:经常用于最短路径,最小生成树》
(4).动态规划法:与分治法相类似:它的主要做法是:如果一个问题答案与子问题相关,就能将大问题拆解成各个小问题,其中与分治法不一样的地方是可以让每一个子问题答案储存起来,以供下次求解时直接取用。(优点:可以减少再次计算的时间,并可将这些解组合成大问题)
(5).迭代法:无法使用公式一次求解,而需要使用迭代。循环(变量初始值,循环条件判断表达式,调整变量增减值)
(6).枚举法:一般这种分析方法和解决问题的方法,得到的结果总是正确的,但是缺点就是速度太慢。核心概念:是将要分析的项目再不遗漏的情况下逐一列举出来,再从所列举的项目种找到自己所需要的目标对象。
(7).回溯法也是枚举法的一种,核心概念:特点是再搜索的过程种寻找问题的解,当发现不满足求解条件,就回溯,尝试别的路径,避免无效搜索。