c++ 记忆化搜索_高级算法基础搜索

本文介绍了算法的基本概念,强调了学习算法的重要性。通过实例讲解了深度优先搜索(DFS)和宽度优先搜索(BFS)的原理,包括各自的实现方式和适用场景。文中还探讨了两种搜索算法的时空复杂度,并引入了记忆化搜索和动态规划的概念,以优化搜索效率。最后,讨论了搜索算法在更广泛问题中的应用。
摘要由CSDN通过智能技术生成

从这篇文章开始,如无特殊情况,我应该会持续更新面向纯小白的算法方面的文章

嗯,我尽量不出现让人看得都头大的代码

什么是算法

算法,顾名思义,就是计算的方法,或者按照百度百科上的定义,就是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令

为什么要学算法

确实,让我们求解二元或者三元方程组,我们可以用各种奇技淫巧;找一个简单初等函数的零点或极值点,我们可以画图然后一眼看出来;求出100以内的所有素数,我们可以一个一个背出来

但是如果要求解更多未知数的方程组呢?要找复杂函数的零点极值点呢?要求出10^9以内的所有素数呢?

这些活,人是不会去干的,一定会交给计算机

但是计算机不智能,它学不会我们的奇技淫巧,没法直接看图获取足够的信息,也存不下所有素数。它只会机械运算。因此,需要我们先用算法解决问题,再告诉计算机怎么一步一步用算法求解这些问题,比如高斯消元,比如牛顿迭代,比如欧拉线性筛

算法简单吗

不简单

www.cnblogs.com/Axjcy

这是我的博客,也只是我的博客

国内比我强的大佬成千上万,我根本排不上号

正片开始

首先从一道题目讲起

一个m*n的网格,从左上角的格子[1,1]开始,每次只能向右或者向下走,走到右下角的格子[m,n],有多少种走法

bfb9f00cf823caa9552adcf7e4473aaa.png

这是一个高中问题,你可能会说很简单啊,答案就是e61248ef85a6ac00fe63c20a5c7d14e0.png

但是如果其中几个格子不能走怎么办?

2d655bc6aaddd064362446d86ccd5e07.png

原来的方法不能用了,那就得另辟蹊径了

从0开始构建一个算法

假设你化身为一个小人,站在第一格,知道上下左右但不知道你在哪,也不知道哪几个格子不能走,你会怎么统计总路径数量?

也许这个还有点难,那就再降低点难度,不要求你统计总数了,只要找到一条路径就行

一个很自然的想法就是,向右一直走到底,然后向下;中间若碰到了死路就回头,在最近的一个能转向的地方转向

1f585659acbf032bde6d4e8ce1dc058b.png

比如像这样

按照这个方法,你找到了第一条路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值