深度优先搜索入门

DFS——深度优先搜索的简单易懂入门心得 这个DFS是什么意思啊? DFS是深度优先搜索(Depth First Search)的简写。看看百度这个老妖怪的说法:…算了,不看了,它这个妖怪都不知道在说什么。 推荐这个视频,比较好入门。 https://v.qq.com/x/page/j052354oe8o.html?start=22 为什么它要回头走啊? 这就是这个算法最大的特点:“不撞南墙不回头”! 它就像是一个记性很好的憨憨,这... 阅读详情

深度优先搜索


1.判断点是否能到终点

int main()
    {
        将所有点标记为新点;
        起点 = x;
        终点 = y;
        cout << dfs(起点);    
    }

    bool dfs(V)
    {
        //边界条件
        if(v是终点)
            return true;
        if(v是旧点)
            return false;

        将v标记为旧点 表示要访问
        for(跟v相邻的所有的点u)
        {
            //返回true表示u能到终点 所以v也可以到终点
            if(dfs(u) == true)  
                return true;          
        }

        //一直到循环了所有的相邻的点 不能到达终点 所以v也不能到
        return false;           
    }


2.记录路径

//要记录路径,可以开一个数组,路径最长就是点的个数。

    Node path[MAX_LEN];    
    int depth;            //表示深度,也就是路径长度,初始为0        
    int main()
    {
        将所有点都标记为新点
        depth = 0;

        if(dfs(起点) == true)
        {
            //从0到depth,path[i]就是路径上第i步的点
            for(int i = 0;i <= depth; i++)
            {
                cout<<path[i]<<endl;
            }
        }
    }

    bool dfs(v)
    {
        //边界条件
        if(v为终点)
        {
            path[depth] = v;
            return true;
        }   

        if(v是旧点)
            return false;

        将v标记为已经访问过
        path[depth] = v;      //尝试把v放入到path
        depth++;              //深度应该加1

        for(与v相邻的所有点u)
        {
            if(dfs(u) == true)
                return true;  
        }

        //如果u到不了终点 那么说明路径上v不合适
        depth--;                  //直接将depth--即可,下一次更新path数组时直接覆盖

        return false;
    }


3.遍历所有的点(不连通也可以)

    int main()
    {
        将所有点标记为新点
        while(图中能找到v是新点)
        {
            dfs(v);
        }
    }

    void dfs(v)
    {
        if(v是旧点)
            return ;

        将v标记为旧点
        for(v相邻的所有的点u)
        {
            dfs(u);
        }
    }


例题练习

题目1:城堡问题 OpenJ_Bailian - 2815

描述:

  1   2   3   4   5   6   7  
   #############################
 1 #   |   #   |   #   |   |   #
   #####---#####---#---#####---#
 2 #   #   |   #   #   #   #   #
   #---#####---#####---#####---#
 3 #   |   |   #   #   #   #   #
   #---#########---#####---#---#
 4 #   #   |   |   |   |   #   #
   #############################
           (图 1)

   #  = Wall   
   |  = No wall
   -  = No wall

图1是一个城堡的地形图。请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。城堡被分>割成mn(m≤50,n≤50)个方块,每个方块可以有0~4面墙。

输入:
程序从标准输入设备读入数据。第一行是两个整数,分别是南北向、东西向的方块数。在接下来的输入行里,每个方块用一个数字(0≤p≤50)描述。用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。城堡的内墙被计算两次,方块(1,1)的南墙同时也是方块(2,1)的北墙。输入的数据保证城堡至少有两个房间。

输出:
城堡的房间数、城堡中最大房间所包括的方块数。结果显示在标准输出设备上。

样例输入:

4 
7 
11 6 11 6 3 10 6 
7 9 6 13 5 15 5 
1 10 12 7 13 7 5 
13 11 10 8 10 12 13 

样例输出:

5
9

思路分析:

  • 首先由题目可以知道,抽象为模型,一个点可以到另一个点那么这两个点之间就有一条边,那么一个房间就是一个连通子图;而这道题求得就是最大连通子图的个数,以及其中点最多的最大连通子图的顶点个数。

  • 其次,题目中说用一个数字表示方块周围的墙,1表示西墙,2表示北墙,4表示东墙,8表示南墙。每个方块用代表其周围墙的数字之和表示。我们知道1,2,4,8的二进制表示分别是0001,0010,0100,1000.也就是说这些数字的和(有哪些墙的组合)有一个规律:相应位置上的二进制为1,那么就表示有对应的方向的墙。比如13这个数字的二进制是1101,那么就表示有西墙、东墙和南墙。那么我们用 & 就可以看是否有对应的墙。

  • 知道哪些方向有墙后,就能遍历整个图,那么我们用染色的思想,一个联通子图就染成一个颜色(用数字表示),最后就可以通过看有几种颜色,每种颜色有多少种来得到答案了。

AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;

    int x,y;               //x,y表示南北向,东西向的方块数
    int map[55][55];       //用map存放城堡的地图
    int color[55][55];     //用color数组来表示每个点是否访问过以及分组
    int area,maxArea = 0;  //表示当前子图的面积以及最大的面积 
    int num = 0;           //房间数 

    void dfs(int i,int j)
    {
        //若已经访问过
        if(color[i][j] != 0)
            return;  

        area++;                //该房间可走且未走过,所以面积++ 
        color[i][j] = num;     //让改点的color为num房间号,染色

        //然后访问与i,j相邻的所有可以访问点
        if((map[i][j] & 1) == 0) dfs(i,j-1);      //西边无墙
        if((map[i][j] & 2) == 0) dfs(i-1,j);      //北边无墙
        if((map[i][j] & 4) == 0) dfs(i,j+1);      //东边无墙
        if((map[i][j] & 8) == 0) dfs(i+1,j);      //南边无墙
    }

    int main()
    { 
        scanf("%d %d",&x,&y);
        for(int i = 0;i < x; i++)
            for(int j = 0;j < y; j++)
                scanf("%d",&map[i][j]);

        memset(color,0,sizeof(color));      //标记所有点为新点
        for(int i = 0;i < x; i++)
        {
            for(int j = 0;j < y; j++)
            {
                if(color[i][j] == 0)
                { 
                    /*当该点未被访问过,那么说明一定是一个新的联通子图,
                    房间数++;*/
                    num ++;
                    area = 0;  //当前房间面积设置为0      
                    dfs(i,j); 
                    if(maxArea<area) 
                        maxArea = area;
                }
            }
        }

        //遍历完图,房间数和最大面积也就得出
        printf("%d\n",num);
        printf("%d\n",maxArea); 

        return 0;
    }


例题练习

题目2:踩方格 OpenJ_Bailian - 4103

描述:

有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:
a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;
b. 走过的格子立即塌陷无法再走第二次;
c. 只能向北、东、西三个方向走;
请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。

输入:

允许在方格上行走的步数n(n <= 20)

输出:
计算出的方案数量

样例输入:

2

样例输出:

7  

思路分析:

  • 首先根据题目,我们可以得出是要我们求出第i,j个位置走n步有多少种走法,其中只能向三个方向走

  • 然后其实这个题也是用到了深度优先搜索,首先我们的起始状态就是(X0,Y0,N),表示我们在第X0行第X0列上,还要走n步的不同走法。我们的结束状态是(Xi,Yi,0),也就是到了某一个位置,还要走0步。我们要求得就是从初始状态到结束状态总共有多少种方法,其中每一个状态(Xi,Yi,Ni)就代表一个点。

  • 而(Xi, Yi, Ni) = (Xi + 1, Yi, n - 1) + (Xi, Yi - 1, n - 1) + (Xi, Yi + 1, n - 1); 即从一个状态可以到其他三种状态,而该状态的值就是其他三种状态的值的和。

AC代码


    #include<iostream>
    #include<cstdio>
    using namespace std;

    int num = 0;                //方案数

    //确定map的大小 因为最多一个方向连走n步(n<=20) 所以上下25,左右50(从中间开始) 
    int map[25][50]={0};        
    int N;                      //要走多少步 

    int dfs(int i,int j,int n) 
    {
        //边界条件 当要走的是0步时,那就是不走这一种方案 
        if(n == 0)
            return 1;   

        map[i][j] = 1;          //表示现在要访问这一个点

        /*接下来是状态的转移  
        之前在递归函数开头判断该点是否可走 现在是可走再递归*/
        int x = 0;
        if(map[i+1][j] == 0) x += dfs(i + 1, j, n - 1);
        if(map[i][j+1] == 0) x += dfs(i, j + 1, n - 1);
        if(map[i][j-1] == 0) x += dfs(i, j - 1, n - 1);

        /*把map[i][j]重新置为0,因为表示不要这一步不要访问这个点了 
        要退回去 让这一步变成访问其他的点*/ 
        map[i][j] = 0; 
        return x; 
    }

    int main()
    {
        scanf("%d",&N);
        //表示从第0行,第25列走n步的总共走法
        printf("%d",dfs(0,25,N));         
        return 0;
    }


拓展

深搜最短路径+剪枝POJ1724:RODES

深搜+剪枝POJ1190:生日蛋糕

搜索入门之BFS深度优先搜索.ppt 搜索入门之BFS深度优先搜索.ppt 搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。 搜索过程实际上是根据初始条件和扩展规则构造一棵解答树并寻找符合目标状态的节点的过程。 立即下载

相关推荐

vos如何对接okcc(保姆级教程)

1.添加账户 点击 系统->账户管理 [图片] 2.创建费率 系统->费率管理 点击添加

qq_46333281的博客 3453

【算法入门】深度优先搜索(DFS)

深度优先搜索(DFS) 【算法入门】 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。 你可以跳过

raphealguo 8万+

Java 开发 修改【冒险岛 079 私服】完整学习流程

第 1-2 天:环境搭建 + 运行原版 079 服务端,能正常登录游戏;第 3-4 天:纯配置文件修改,掌握倍率、属性、怪物、道具的修改,改出第一个「百倍经验私服」;第 5-10 天:Java 代码基础修改,掌握 Player/Skill/Monster 核心类的修改,实现技能无冷却、一刀秒怪、升级满属性;第 11-20 天:Java 代码进阶修改,掌握业务逻辑修改,实现死亡不掉经验、自动捡物、装备强化无失败;第 21-30 天。

萧曳丶 3888

深度优先搜索

深度优先搜索(DFS:Depth First Search) 算法实现如下: 从当前初始状态开始深度搜索,能往下走就往走,不能走就返回上一层,继续寻找没有被访问的结点,直至所有结点都被访问为止。 1.使用栈实现(相关算法) 将初始结点压栈; while(栈非空) { 取出栈顶点,暂时存储这个结点node_t信息; 访问该节点,并标示已访问; 将栈顶元素

yinhaijing_ss的专栏 269

学术规范与论文写作(雨课堂)研究生 全部答案

1:如何造就优秀的学术论文 论文语法判断题 :全部是错的 2:如何撰写学术论文 3: SCI论文写作经验分享 4:论文写作与投稿技巧 5:学术伦理道德 答案仅供参考,研究生生活不易,大家如果有时间的话,还是可以学习学习的,毕竟老师讲的不错。加油,希望读研的每一个人都能顺利毕业! ...

Always-Learning 13万+

OPC UA 协议详解

OPC UA(统一架构)是新一代工业自动化标准通信协议,替代传统OPC Classic,具有跨平台、高安全性、标准化等优势。基于TCP协议,支持全平台部署,采用面向对象架构组织数据,提供实时读写、事件订阅、历史数据访问等功能。作为工业4.0核心协议,适用于智能制造、数字孪生等场景,能实现多品牌设备统一接入。相比Modbus和MQTT,OPC UA协议更规范安全但复杂度较高,是大型工业集群互联的主流选择。

eastyuxiao的专栏 723

万能的搜索——深度优先搜索Depth-First-Search

『什么是搜索』 百度百科的定义 搜索算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。 【搜索树】 将搜索的过程中每一步的状态变成树的一个结点 根结点为搜索的初始状态 搜索是不断拓展这棵树,直到找到目标状态为止 『深度优先搜索』 顾名思义,优先向搜索树"深"层搜索的搜索的算法.其过程简要来说是对每一个可能的分支路径深入到不...

Miserable_ccf的博客 440

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

1142-图的遍历——深度优先搜索

题目描述 深度优先搜索遍历类似于树的先根遍历,是树的先根遍历的推广。其过程为:假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可以从图中的某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。 其算法可以描述如下: 在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法遍历所有顶点,输出遍历顶

weixin_45768308的博客 664

沙猫群优化算法(SCSO)详解:从沙漠生存智慧到全局优化引擎

本文详细介绍了沙猫群优化算法(SCSO),这是一种新型元启发式优化算法,灵感来源于沙猫在沙漠环境中的卓越狩猎行为。SCSO通过模拟沙猫的低频探测能力和精确攻击策略,将优化问题转化为搜索和捕获"猎物"的过程。算法核心包括探索阶段(全局搜索)和开发阶段(局部精细搜索),通过灵敏度范围模型和自适应控制参数实现两者的平衡。SCSO具有参数简单、收敛性能好等优点,适用于解决复杂全局优化问题。

qq_42212808的博客 200

直击高频编程考点:字符串知识及经典算法题总结

字符串相关基本练习题总结(最长公共子串、最长回文子串、最长无重复字符子串、最小覆盖子串、字符串相乘、中文数字表达转实际数字格式等)

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

第九章:广度优先和深度优先搜索的一些总结

图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) 阅读本文前,请确保你已经掌握了递归、栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作。 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search,简称 BFS)是图论中两种非常重要的算法,也是进行更高的算法阶段学习的最后一道门槛。搜索算法频繁出现在算法竞赛题中,尤其是深度优先搜索,在竞赛中,它是用来进行保底拿分的神器! 本文将..

WANGHAOXIN364的博客 5089

【Linux命令大全】006.网络通讯之netstat命令(实操篇)

本文详细介绍了Linux系统中netstat网络诊断命令的实用技巧。主要内容包括:1) 基本功能与参数详解,展示如何查看网络连接、路由表和接口统计;2) 安装方法及基础用法,如查看TCP/UDP连接、显示进程信息和路由表;3) 高级应用技巧,包括监听端口检查、连接状态统计和实时监控。文章通过表格和代码示例,系统性地呈现了netstat在系统管理中的核心应用场景,是网络故障排查和性能监控的实用指南。

yuhuasheng1997的博客 705

DFS(深度优先搜索)入门

dfs实际上总结下来只有三个字 ---- “搜到底”

m0_73604362的博客 1257

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

深度优先搜索_快速入门深度优先搜索

深度优先搜索(Depth-First-Search),简称 DFS。最直观的例子就是“走迷宫”。假设你站在迷宫的某个岔路口,然后想找到出口。你随意选择一个岔路口来走,走着走着发现走不通的时候,你就回退到上一个岔路口,重新选择一条路继续走,直到最终找到出口。这种走法就是一种深度优先搜索策略。下面看一个图的深度优先搜索示例图:实线箭头➡️表示便利,虚线箭头➡️表示回退,S为我们起始顶点,t是我们目标顶...

weixin_39923157的博客 129

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度优先搜索思想入门!

深度优先搜索思想

makefuture 844

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深度优先搜索(入门详解)——DFS

深度优先搜索过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次,就是找到与某个节点相关联的所有情况,从中找出最优解。 以一个例子来讲解这种算法的基本思路 描述 1 2 3 4 5 6 7 ############################# 1 # | # ...

远方的博客 2034

深度优先搜索(DFS):从入门到精通!

深度优先搜索(DFS)是一种经典的图遍历算法,在解决路径查找、迷宫问题、拓扑排序等问题中发挥着重要作用。无论你是编程小白还是有一定经验的开发者,这篇文章都将带你一步步掌握 DFS 的核心概念和实现方法!它的核心思想是尽可能“深入”访问图的每个节点,直到无法继续前进为止,然后再回溯到之前的节点继续遍历。拓扑排序是将有向无环图(DAG)中的节点按某种顺序排列,使得对于每一条有向边 u → v,u 在排列中出现在 v 之前。为了避免递归带来的栈溢出问题,我们可以通过栈数据结构实现非递归版本的 DFS。

Leaton的博客 3581

深度优先搜索DFS 入门

它的基本思想是从一个起始状态开始,尽可能深入地探索可能的状态,直到达到目标状态或无法继续前进为止。在实际应用中,需要根据问题的特点进行适当的优化,如使用记忆化搜索、剪枝等技术,以提高算法的效率和性能。这次的dfs函数多了一个参数start,用来记录每次从哪开始枚举,因为这次是组合型枚举,顺序不同其实是同一种,利用start来避免重复枚举。使用了记忆化搜索来避免重复计算。这个示例枚举每个数字的选或不选情况,并通过递归构建所有可能的组合。这个示例枚举每个位置可以填充的数字,并通过递归构建所有可能的排列。

weixin_73567058的博客 521

图解深度优先搜索:小白也能懂的算法入门

深度优先搜索(DFS)是算法学习中的经典内容,但很多初学者会被递归和调用栈的概念劝退。最近我在学习时,尝试用可视化工具来理解DFS,效果意外地好。下面分享我的学习笔记,用最直观的方式拆解这个算法。它的代码编辑器内置AI辅助功能,遇到问题可以实时获取提示,还能一键部署分享给同学测试。特别是部署功能,点个按钮就直接生成可访问的网页链接,省去了服务器配置的麻烦。对于算法新手,我强烈推荐这种可视化+实践的学习方式。当你能亲眼看到算法每一步的执行过程,那些抽象的概念会变得非常具体。

CyanWave34的博客 721
上一篇: Mysql中子查询的常用语句
下一篇: 深搜最短路径+剪枝——POJ1724:ROADS
WaveBridge
博客等级 码龄10年 8粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值