03 2023 档案
NP问题的算法设计技术
摘要:概述 用计算机来求解人类所面临的各种问题,问题本身的内在复杂性决定了求解这个问题的算法的计算复杂性 Turing论题 一个问题是可计算的当且仅当它在图灵机上经过有限步骤最后得到正确的结果 Turing论题把人类面临的所有问题划分成两类: 可计算问题 不可计算问题 Turing论题中“有限步骤”是一个
广度优先遍历
摘要:概述 广度优先搜索的设计思想 广度优先搜索以顶点 u 为起始点,依次访问和 u 有路径相通且路径长度为 1、2、…的顶点。 广度优先搜索的基本思想是 访问顶点 u,然后依次访问 u 的各个未被访问的邻接点 v1、v2、…、vk, 分别从 v1、v2、…、vk 出 发依次访问它们未被访问的邻接点 至图
深度优先搜索
摘要:深度优先搜索概述 假设从顶点 u 出发,深度优先搜索的基本思想是:访问顶点 u,然后从 u 的未被访问的邻接点中选取一个顶点 v,再从 v 出发进行深度优先搜索,直至图中所有和 u 有路径相通的顶点都被访问到。 算法:DFS 输入:起始顶点 u 输出:搜索过程中访问的顶点序列 1. 访问顶点 u;
动态规划法
摘要:概述 动态规划在计算机科学领域,成为一种通用的算法设计技术用来求解多阶段决策最优化问题 最优化问题 有 n 个输入,问题的解由这 n 个输入的一个子集组成,这个子集必须满足某些事先给定的约束条件,满足约束条件的解称为问题的可行解 为了衡量可行解的优劣,通常以函数的形式给出一定的评价标准,这些标准函数
贪心法
摘要:概述 贪心法把一个复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前解的一个扩展,直至获得问题的完整解。 求解过程 应用贪心法的关键是确定贪心选择策略,这种贪心策略只是根据当前信息作出最好的选择,不去考虑在后面看来这种选择是否合理 贪心法即使不能得到整体最优解,通常也是最优解的很好近似
减治法
摘要:概述 减治法把一个大问题划分为若干个子问题,但是只需求解其中的一个子问题,也无需对子问题的解进行合并。所以,严格地说,减治法应该是一种退化了的分治法 求解过程 将问题分解为若干个子问题 原问题的解只存在于其中一个较小规模的子问题中; 原问题的解与其中一个较小规模的解之间存在某种确定的对应关系 例题
分治法
摘要:概述 分治法将一个难以直接解决的大问题划分成一些规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解 求解过程 划分 把规模为 n 的原问题划分为 k 个(通常 k = 2)规模较小的子问题 求解子问题 分别求解各个子问题 合并 把各个子问题的解合并起来 启发式原则 平衡子问题 子问
蛮力法
摘要:概述 蛮力法(brute force method,也称穷举法或枚举法),是一种简单直接地解决问题的方法,采用一定的策略依次处理待求解问题的所有元素,从而找出问题的解 蛮力法的关键 依次处理所有元素 确定穷举的范围 保证处理过的元素不再被处理 蛮力法的设计思想 找出枚举范围 分析问题所涉及的各种情况
递推法
摘要:概述 递推法是一种根据递推关系进行问题求解的方法,常用来进行序列计算 根据初始条件,按照一定的规律逐项进行计算,直到得到结果 递推法正推和逆推 正推 小规模问题的解递推到大规模问题的解 逆推 大规模问题的解递推到小规模问题的解 例题 猴子吃桃 题目:猴子每天吃一半多一个的桃子,第十天只有一个桃子,问