zoukankan      html  css  js  c++  java
  • 算法求解方法与思路的总结

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

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

    • 穷举 + 动态规划:

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

    1. 穷举搜索

    • 生成所有排列(permutation)

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

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

    • 生成 2n

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

    2. 分治:一刀两断

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

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

    3. 动态规划

    • 斐波那契
    • 二项式系数

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

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

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

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

      • 动态规划(递归):(n?,s1) 或者 (n1,s?)

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

    5. 旅行商问题

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

      bool visited[n];
  • 相关阅读:
    第十三周作业
    第十二周作业2
    第十二周作业
    第十一次作业
    第十周作业
    第九周作业
    第十五次作业
    十四周上机作业
    第十三周上机作业
    第十二周作业
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423901.html
Copyright © 2011-2022 走看看