• 当算法问题给出时,其实也就相当于给出了函数的输入和输出,也就是整个函数的接口形式。

    • 比如通配符范式与字符串的匹配问题,
      bool match(const string& patterns, const string& str);
  • 一些特殊情况一定要考虑周全(if, if, if),不重不漏;

  • 穷举 + 动态规划:

    先利用穷举搜索法编写出检索所有答案的函数,然后利用制表的方法把算法变换成动态规划算法

1. 穷举搜索

  • 生成所有排列(permutation)

    N!N! ,仅适用于 N 不超过 10 的场景,11!=3991680011!=39916800;

  • 生成所有组合(combination):C++组合数(combination)的实现

  • 生成 2n2^n

    比如著名的 0/1 背包算法,当然时间复杂度会增加地十分迅速,并不是第一选择,仅提供一种理论上的可能性;

2. 分治:一刀两断

所谓一刀两断,将原始(针对于 nn 的)问题,从中间横竖一切,求 f(n)f(n) 与 f(n/2)f(n/2) 之间的数学关系,比如著名的 1+2+…+n,则可知:

f(n)=f(n/2)+n2n2f(n/2)

f(n)=f(n/2)+\frac n2\frac n2f(n/2)

3. 动态规划

  • 斐波那契
  • 二项式系数

4. 问题规模约简(deduction)的策略

  • 以每个数字为单位分割 f(n) ⇔\Leftrightarrow f(n-1)
  • 二等分(简单粗暴,横竖就是中间一刀)
    f(n) ⇔\Leftrightarrow f(n/2)

  • 对于有关一维问题(nn)的情况,

    • 分治:n ⇒ n/2
    • 动态规划(常常伴随递归):n ⇒ n-1
  • 对于有关二维问题((n,s)\left(n,s\right))的情况,

    • 动态规划(递归):(n−?,s−1)\left(n-?,s-1\right) 或者 (n−1,s−?)\left(n-1,s-?\right)

对于动态规划(常常伴随递归)问题的规模总是在不断减小,也即变成规模更小的子问题(subproblems),当然对于动态规划而言,子问题之间存在大量的重复计算,规模更小的子问题,具有相似的求解结构;

5. 旅行商问题

  • 维护结点(城市)是否被访问过;

    bool visited[n];

算法求解方法与思路的总结相关推荐

  1. Gibbs采样算法求解LDA

    1. Gibbs采样算法求解LDA的思路 首先,回顾LDA的模型图如下: 在Gibbs采样算法求解LDA的方法中,我们的α,η是已知的先验输入,我们的目标是得到各个,对应的整体,  的概率分布,即文档 ...

  2. LIS的三种求解方法

    1.  O(n^2) 传统的求解方法 ,思路为dp,状态转移方程为 dp[i]=max( dp[j]+1,1) 即到目前的i为止,对前面出现的a[j](j<i)进行遍历 ,如果出现了a[i]&g ...

  3. 水下目标检测算法赛方法总结与思路分享(已开源)

    水下目标检测算法赛方法总结与思路分享 我们团队在此分享下在 "2020年全国水下机器人(湛江)大赛 - 水下目标检测算法赛" 这一比赛中的实验过程及心得体会.不足之处,还望批评指正 ...

  4. C++ 算法设计:鸡兔同笼问题的多种求解方法

    问题: 今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?编程求雉兔各几何. 解法1:人肉计算机 手工解方程,程序直接输出答案,这是最短的程序,没有之一. #include <iostre ...

  5. 算法:最小公倍数的求解方法

    一 写在开头 1.1 本节内容 本文的主要内容是介绍一种两个数最小公倍数(Lowest Common Multiple)的求解方法. 二 最小公倍数求法 2.1 算法原理 两个数的公倍数可以是无限多个 ...

  6. 【路径规划】A*算法方法改进思路简析

    A*算法方法改进思路简析 0. 前言 1. A*算法的总体流程 2. A*算法的改进 2.1 启发函数的选择与优化 2.1.1 预估函数的选择 2.1.2 为启发函数增加权重系数 2.1.3 节点比较 ...

  7. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,优化收集方法的思路

    面试java中,jvm中的垃圾收集算法一般都会问一下,下面来总结一下这个经常提到的问题. 第一种:标记清除 它是最基础的收集算法. 原理:分为标记和清除两个阶段:首先标记出所有的需要回收的对象,在标记 ...

  8. 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc

    分治算法求解棋盘覆盖问题互动教学过程 分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大.对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引 ...

  9. GMM高斯混合模型学习笔记(EM算法求解)

    提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...

最新文章

  1. AI 如何推进全球可持续发展?
  2. 最近在学OpenGL和英语
  3. 时间序列研(part1)--随机过程
  4. P5180-[模板]支配树
  5. network 拦截不到东西是怎么做到的?_都说读中职院校学不到东西,中职学生到底是怎么学习的?...
  6. java之Stack详细介绍
  7. python 数学期望_(Python)零起步数学+神经网络入门
  8. LINUX下载编译libtheora
  9. 单片机原理及应用第四版林立课后选择题
  10. SPSS 随机区组秩和检验
  11. 苹果又开了一个“坏头”
  12. 设置定时器,持续调用接口
  13. 关于JavaScript继承与原型链的一些理解
  14. re.compile(r'xxx')中的r是什么意思
  15. cryptographic primitives(密码学原语 )
  16. 【转】MIT牛人解说数学体系
  17. hdu 4745 区间dp
  18. 双鱼座三:舞者与梦想家的一周
  19. mac 设置为允许来自任何来源都可以
  20. 什么是FIR filter?

热门文章

  1. vs调试linux多线程,VS2017多线程调试
  2. anno arm移植Qt环境后,编译正常,程序无法正常启动问题的记录
  3. 西安石油大学计算机学院于晓,西安石油大学计算机学院2009届本科毕业设计答辩.doc...
  4. 剑指offer面试题18. 删除链表的节点(双指针)(链表)
  5. OpenCV精进之路(零):core组件——绘制点、直线、几何图形
  6. OpenCV精进之路(一):图像处理知识点串烧
  7. 一个方法解决Warning: Permanently added 'gitee.com,180.97.125.228' (ECDSA) to the list of
  8. 自定义模块_Nginx自定义模块开发
  9. SpringBoot+Mybatis集成搭建
  10. 内网网络摄像机(RTSP/IPC/NVR)如何能在公网进行RTMP/HLS/HTTP-FLV直播