从这篇文章开始,如无特殊情况,我应该会持续更新面向纯小白的算法方面的文章
嗯,我尽量不出现让人看得都头大的代码
什么是算法
算法,顾名思义,就是计算的方法,或者按照百度百科上的定义,就是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令
为什么要学算法
确实,让我们求解二元或者三元方程组,我们可以用各种奇技淫巧;找一个简单初等函数的零点或极值点,我们可以画图然后一眼看出来;求出100以内的所有素数,我们可以一个一个背出来
但是如果要求解更多未知数的方程组呢?要找复杂函数的零点极值点呢?要求出10^9以内的所有素数呢?
这些活,人是不会去干的,一定会交给计算机
但是计算机不智能,它学不会我们的奇技淫巧,没法直接看图获取足够的信息,也存不下所有素数。它只会机械运算。因此,需要我们先用算法解决问题,再告诉计算机怎么一步一步用算法求解这些问题,比如高斯消元,比如牛顿迭代,比如欧拉线性筛
算法简单吗
不简单
www.cnblogs.com/Axjcy
这是我的博客,也只是我的博客
国内比我强的大佬成千上万,我根本排不上号
正片开始
首先从一道题目讲起
一个m*n的网格,从左上角的格子[1,1]开始,每次只能向右或者向下走,走到右下角的格子[m,n],有多少种走法
这是一个高中问题,你可能会说很简单啊,答案就是
但是如果其中几个格子不能走怎么办?
原来的方法不能用了,那就得另辟蹊径了
从0开始构建一个算法
假设你化身为一个小人,站在第一格,知道上下左右但不知道你在哪,也不知道哪几个格子不能走,你会怎么统计总路径数量?
也许这个还有点难,那就再降低点难度,不要求你统计总数了,只要找到一条路径就行
一个很自然的想法就是,向右一直走到底,然后向下;中间若碰到了死路就回头,在最近的一个能转向的地方转向
比如像这样
按照这个方法,你找到了第一条路径
那