zoukankan      html  css  js  c++  java
  • 记忆化搜索思想浅谈

    记忆化搜索

    第一步:搞清递归

    递归函数的执行流程分为两个阶段:递归前进段、递归返回段。

    这可以说一个很神奇的东西。总的来说就是:递归前进段就是你按它函数的顺序执行下去,直到碰到边界;递归返回段就是当你碰到了边界,你把刚刚所有递归嵌套的函数值算出来,一步一步返回值,返回给最初的值。

    这里有一个我很容易搞错的东西,也很难理解的东西:每递归调用一次函数,系统就会生成一个新的函数实例。这些函数实例有同名的参数和局部变量,但各自独立,互不干扰。流程执行到哪一层,那一层的变量就起作用,返回上一层,就释放掉低层的同名变量。这个需要深刻理解一下。

    递归构建有三个条件:1)参数;2)边界;3)范围。

    据此来分析递归过程如何写。

    1 参数:明确参数的意义以及当前的值;

    2 边界:一个递归函数一定要有边界,而且边界一定要考虑全面,不能漏,否则它就可能死循环;

    3 范围:就是你在递归时的选择往哪儿走,也就是说,你的递归调用的函数返回值。

    记忆化搜索:

    ① 定义好一个数组,用来存储递归所求出来的值;②在主程序里,memset一下,一般都是赋初值为-1,然后把这个数组的边界值设置好;③在递归函数里,首先加一句:if (这个数组的值>=0) return 这个值【如果赋初值为-1的话,一般都是>=0】;其次,在后面的递归调用中,先给这个数组赋值,再return

     

    NOIP2018 rp++
  • 相关阅读:
    YOLO V5
    YOLO系列(单阶段目标检测)
    优化算法
    算法总结
    图像分类算法
    ResNet网络(里程碑)
    GoogleNet网络(纵横交错)
    VGGNet网络(走向深度)
    AlexNet网络(开山之作)
    案例
  • 原文地址:https://www.cnblogs.com/brilliant107/p/9471222.html
Copyright © 2011-2022 走看看