本博文简单介绍了算法的相关概念(包括:算法设计模式、算法性质、描述方式、评价方法等)以及时间复杂度分析。
1 导学
1.1 算法的基本概念
算法设计模式:
- 暴力求解(Brute force)
- 分治法(Divide and conquer)
- 贪婪算法(Greedy approach)
- 动态规划(Backtracking)
- 回溯法(Branch and bound)
- 分支界限法(Randomized algorithm)等
算法:算法是借助计算机解决问题的方法,是有限条确定性指令的序列
算法的性质:输入、输出、确定性、有限性
算法的描述方式:自然语言、数学公式、流程图、伪代码、程序设计语言
算法的评价方法:正确性、有效性、易理解、易实现、通用性
例子:最大公约数
暴力解法:取min(a,b),从大到小尝试,直到两个数均可被整除。
欧几里得:max%min==0?result=min : result=(max%min和min的最大公约数)
1.2 算法复杂度
算法复杂度分析的三种情形:
- 最好情形(Best case)
- 最差情形(Worst case)
- 平均情形(Average case)
例如:二分查找(Binary search)的时间复杂度,在三种情况依次为Θ(1)、Θ(log2n)、Θ(log2n)
1.2.1 时间复杂度
评价标准:
- 运行时间
- 优点:最直接反映
- 缺点:机器依赖、缺乏解释
- 运算次数
- 优点:机器无关、具有解释力
- 缺点:统计繁琐、规模较大时关键在于增长量级
- 增长量级
近似表示
例子:Fibonacci
递归算法:O(2n)
1 | public static long GetByRecursion(long n){ |
迭代算法:O(n)
1 | public static long GetByIteration(long n){ |
1.3 算法思维
算法思维:现实问题——>形式化描述——>设计算法——>方案实施——>现实问题