zoukankan      html  css  js  c++  java
  • 浅谈设计算法的思想

    标准的分治策略

    注:标准的分治策略的定义里面就包含的递归;

    解决问题的步骤

        将问题分解为若干小问题,且每个小问题与大问题同型;

        递归解决这些小问题;

        将子问题的解答合并,获得大问题的解答;    

    计算效率的方法

      递归表达式 —将抽象的表达式用图形的方式展开,便于理解—>递归树

        替换解法:先猜一个答案,归纳法验证,解决表达式中的常数;

        大师解法:将抽象的递归表达式进行展开,分解合并;将其分为两部分:比较两者的大小(大于,等于,小于,无法比较);  

    典型问题: 求乘方运算,矩阵乘法,斐波那契序列,VLSI布线;

    动态规划思想:

    主要目的:优化,即:以最优方式解决问题;

    与分治策略的不同点

    虽也将大问题分解为小问题,且小问题中有许多是重复的,这样有表格存储结果,省的重复计算,从而提高效率;动态规划是对分治思想的一种改善,在

    发现分解出来的子问题有重叠时,使用自底向上的策略避免重复计算;

    注:动态规划的英文叫Dynamic Programming,其中programing指的是表格查询法;

    分治策略解决问题的步骤

          分析出最优解决方案的结构

      递归定义这个方案

      由底至上构建方案;

    典型问题: 流水线问题,最长公共子序列,最优二叉搜索树

    动态规划和线性规划、非线性规划(静态规划)的关系:

    动态规划的核心是找出一个问题包含的子问题及其表现形式;

    动态规划比静态规划更容易获得最优解;

    动态规划可以得到一组最优解(原问题及子问题的最优解),而非线性规划只能得到全过程的一个最优解;

    注:在特定的条件下,动态规划和静态规划是可以相互转换的;

    贪婪选择思想: 只考虑眼前,每一步都最优,通过局部最优达到全局最优;

         最小生成树:

             Kruskal算法:选边

             Prime算法:选点

         霍夫曼树和编码:

         霍夫曼编码:按照符号出现的频率编码;频率越高,其编码越短;频率越低,其编码越长;

         霍夫曼树:为了方便生成霍夫曼编码,构建一棵带权重的总长为最小的树,即:将频率高的结点置于离树根较近的位置上;

    将“树”转换为“码”:将树中所有左边分支赋为0,右边分支赋为1,符号的编码为根到达它所经过的路径标号;

    标准分治、动态规划、贪婪选择比较:

    标准分治

    动态规划

    贪婪选择

    问题类型

    通用问题

    优化问题

    优化问题

    子问题结构

    每个子问题不同

    很多子问题重复

    只有一个子问题

    子问题数

    全部都要解决

    全部都要解决

    只需解决一个

    选择与求解次序

    先选择后解决子问题

    先解决子问题后选择

    先选择后解决子问题

    随机化思想:

    目的

    1.为了防止最差结果出现;

    2.解答我们不能确定性解答的问题;

    拉斯维加斯算法:为第一种目的而设计的算法;

    蒙特卡罗算法:为第二种目的而设计的算法;

    拉斯维加斯保障计算结果的正确性,但不保障算法的时间效率;

    蒙特卡罗算法保障了时间效率,但不保障计算结果的正确性;

    经典问题:素性测试,矩阵乘积验证器,随机化最小生成树,随机数的生成;

  • 相关阅读:
    centos7 安装配置手册
    常用mysql统计信息(mysql5.6)
    yum将需要安装的软件依赖下载到本地
    impala使用指南
    redis集群配置
    VIM
    Vim自动补全插件----YouCompleteMe安装与配置
    vim中自动格式化代码
    vscode_插件_shell格式化工具安装
    Anaconda+vscode 搭建开发环境
  • 原文地址:https://www.cnblogs.com/zhaojinxin/p/6636919.html
Copyright © 2011-2022 走看看