算法是一种解决问题的思路和方法,它是计算机科学中的重要分支。算法分类是算法学习中的基础,能够更好的了解算法的特点和应用范围。本文将从多个角度分析常见算法分类。
一.按照时间复杂度分类
时间复杂度指执行算法所需的计算时间。TC是关于问题规模n的函数,记做:T(n)=O(f(n)),读作算法的渐进时间复杂度为f(n)。按照时间复杂度分类,可以将算法分为以下几类:
1.常数阶O(1)。此类算法的运行时间是固定的,不随问题规模n的增大而增加,如数组索引、队列和栈等算法时间复杂度均为O(1)。
2.对数阶O(logn)。此类算法时间复杂度随问题规模n的增大而增加,但是增长率趋缓,如二分查找、快速排序、归并排序等算法的时间复杂度均为O(logn)。
3.线性阶O(n)。此类算法的时间复杂度随问题规模n的增大而增加,增长率和n成正比,如简单查找、选择排序和冒泡排序等算法的时间复杂度均为O(n)。
4.线性对数阶O(nlogn)。此类算法时间复杂度随问题规模n的增大而增加,增长率略高于O(n),如归并排序、快速排序等算法的时间复杂度均为O(nlogn)。
5.平方阶O(n^2)。此类算法时间复杂度随问题规模n的增大而增加,增长率远高于O(n),如插入排序和冒泡排序等。
6.立方阶O(n^3)。此类算法的时间复杂度随问题规模n的增大而增加,增长率远高于O(n^2),应尽量避免使用该类算法。
7.指数阶O(2^n)。此类算法的时间复杂度随问题规模n的增大而急剧增加,目前尚未出现实际应用的算法。
8.阶乘阶O(n!)。此类算法的时间复杂度随问题规模n的增大而急剧增加,应尽量避免使用该类算法。
二.按照空间复杂度分类
空间复杂度指算法在执行过程中所需的内存空间,常用的指标是算法所需的额外存储空间。按照空间复杂度分类,可以将算法分为以下几类:
1.原地排序。原地排序算法不需要额外的存储空间,如插入排序、冒泡排序、选择排序等算法均为原地排序算法。
2.借助额外的存储空间。借助额外的存储空间实现的算法,包括归并排序、快速排序等。
三.按照算法策略分类
1.贪心算法。贪心算法是指在每一步选择中都采取当前状态下最好或最优的选择,以期达到全局最优解。贪心算法比较高效,但是不能保证每次都能得到最优解,比如霍夫曼编码。
2.分治算法。分治算法是指将复杂的问题分成两个或多个相同或相似的子问题,然后递归解决这些子问题,最后将子问题的解合并成原问题的解。分治算法常用于排序算法,如归并排序和快速排序。
3.回溯算法。回溯算法是一种搜索算法,它通过不断地搜索解空间中的状态,来寻找问题的解。回溯算法常用于最优解问题。
4.动态规划算法。动态规划算法是用来求解最优化问题的一种算法思想。它的基本思想是通过各个子问题的最优解,推导出原问题的最优解。动态规划算法常用于背包问题和最短路径问题等。
五.
扫码咨询 领取资料