算法简答题
1、解释什么是递归算法?递归算法的基本设计思路或者设计原理是是什么?递归算法适用于哪些情况?在使用递归算法中应注意哪些方面的问题?
-
递归算法是一种直接或者间接调用自身的算法的过程。
-
将整个问题分解为若干子问题,子问题有相同的求解方式并可再分为若干子问题,如此反复进行直到不能再划分子问题或已经可以求解为止。
-
适用于可将整个问题分解为有相同求解方式的若干子问题的情况。
-
一定要有终结条件,尽量减少不必要的递归调用。
2、 解释什么是蛮力算法?蛮力算法的基本设计思路或者设计原理是是什么?蛮力算法适用于哪些情况?在使用蛮力算法中应注意哪些方面的问题?
-
借用计算机运算速度快的特性,直接对问题所有状态一一尝试暴力求解。
-
对问题的所有可能状态一一测试,直到找到解或将全部状态都测试为止。
-
任何情况。
-
效率不高,注意时间空间消耗。
3、 解释什么是分治算法?分治算法的基本设计思路或者设计原理是是什么?分治算法适用于哪些情况?在使用分治算法中应注意哪些方面的问题?
-
采用递归的思想,把大问题分解为小问题,再由小问题的解构造出大问题的解。
-
将n规模的问题分解为k规模的子问题,若n规模较小则直接解决。递归求解子问题并将所有解合并得到原问题的解。
-
适用于可将整个问题分解为有相同求解方式的若干子问题的情况。
-
一定要有终结条件,尽量减少不必要的递归调用。
4、 解释什么是回溯算法?回溯算法的基本设计思路或者设计原理是是什么?回溯算法适用于哪些情况?在使用回溯算法中应注意哪些方面的问题?
-
穷举问题的所有解,当不满足求解条件时则回溯(回退),再尝试其他路径。
-
在递归的基础上以深度优先方式搜索解空间树,并在搜索过程中使用剪枝函数避免无效搜索。
-
适用于问题的求解状态(解空间)为树形结构的情况。
-
一定要有终结条件,尽量减少不必要的递归调用。
5、 解释什么是贪心算法?贪心算法的基本设计思路或者设计原理是是什么?贪心算法适用于哪些情况?在使用贪心算法中应注意哪些方面的问题?
-
贪心算法是一种典型的算法设计策略,用于求解问题的最优解。
-
从初始空解出发,采用逐步构造最优解的方法向给定目标前进。
-
待求解问题需满足“贪心选择性质”和“最优子结构性质”。
-
贪心法求局部最优解而不是全局最优解,但某些情况下局部最优解就是全局最优解。
6、 解释什么是动态规划?动态规划的基本设计思路或者设计原理是是什么?动态规划算法适用于哪些情况?在使用动态规划算法中应注意哪些方面的问题?
-
动态规划是将多阶段决策问题进行公式化的一种技术,也是算法设计方法之一。
-
通常基于一个递推公式及一个或多个初始状态,当前子问题的解将由上一个子问题的解推出。
-
适用于在求解过程中存在大量重复计算可以缓存中间值,简化后续求解步骤的情况。待求解问题需满足“最优子结构性质”、“无后效性”、“子问题重叠性质”。
-
并非任何问题都适合采用动态规划法求解。