每天一道算法题--最长公共子序列和最长公共子串

【基础算法】求最长公共子序列 【基础算法】求最长公共子序列 时间限制: 1 Sec  内存限制: 64 MB 题目描述 一个给定序列的子序列是在该序列中删去若干元素(也可以不删去)后得到的序列。例如Z="BCDB" 就是X="ABCBDAB"的一个子序列,而Z="CBBD"则不是X的子序列。 给定三个序列 X,Y和Z,如果Z既是X的一个子序列又是Y的一个子串,则称Z是X和Y的公共子序列。 例如X=" 阅读详情

最近刷题遇到很多与最长公共子序列或者子串有关的题,这里回顾一下两者的求解过程以及怎么输出打印。

最长公共子串(Longest Common Substring)与最长公共子序列(Longest Common Subsequence)的区别: 子串要求在原字符串中是连续的,而子序列则只需保持相对顺序,并不要求连续。

问题描述:
给定两个序列:X[1…m]和Y[1…n],求在两个序列中同时出现的最长子序列的长度。
假设 X 和 Y 的序列如下:

str1:"ABCBDAB"
str2:"BDCABA"

经典的解法是使用动态规划来解:
假设Z=z1,z2,⋯,zk>是X与Y的LCS, 我们观察到
如果Xm=Yn,则Zk=Xm=Yn,有Zk−1是Xm−1与Yn−1的LCS;
如果Xm≠Yn,则Zk是Xm与Yn−1的LCS,或者是Xm−1与Yn的LCS。
因此,求解LCS的问题则变成递归求解的两个子问题。但是,上述的递归求解的办法中,重复的子问题多,效率低下。改进的办法——用空间换时间,用数组保存中间状态,方便后面的计算。这就是动态规划(DP)的核心思想了。
状态转移方程式如下:
这里写图片描述

其实用矩阵图来表示会更加清楚:
这里写图片描述

矩阵的最后的值就是最长公共子序列的长度,而在打印所有的最长公共子序列时,也是沿着最后一个点向上溯源找,如果str1.charAt(i) == str2.charAt(j),记录这个序列点,然后向斜对角线方向继续寻找。而当table[i-1][j] > table[i][j-1](这里的table指上面的二维数组),向左边方向继续寻找序列点;当table[i-1][j] < table[i][j-1],向上方向寻找序列点。而当存在table[i-1][j]==table[i][j-1]时,说明存在不同的最长公共子序列,则进一步递归寻找。

public class LongestCommonSubsequence {
    private String X;  
    private String Y;  
    private int[][] table;  // 动态规划表  
    private TreeSet<String> set = new TreeSet<String>();  

    /** 
     * 功能:带参数的构造器 
     */  
    public LongestCommonSubsequence(String X, String Y) {  
        this.X = X;  
        this.Y = Y;  
    }  

    /** 
     * 功能:求两个数中的较大者 
     */  
    private int max(int a, int b) {  
        return (a>b) ? a:b;  
    }  

    /** 
     * 功能:构造表,并返回X和Y的LCS的长度 
     */  
    private int lcs(int m, int n) {  
        table = new int[m+1][n+1]; // 表的大小为(m+1)*(n+1)    
        for(int i=0; i<m+1; ++i) {  
            for(int j=0; j<n+1; ++j) {  
                // 第一行和第一列置0  
                if (i == 0 || j == 0)  
                    table[i][j] = 0;  
                else if(X.charAt(i-1) == Y.charAt(j-1))  
                    table[i][j] = table[i-1][j-1] + 1;  
                else  
                    table[i][j] = max(table[i-1][j], table[i][j-1]);  
            }  
        }  
        return table[m][n];  
    }  

    /** 
     * 功能:回溯,求出所有的最长公共子序列,并放入set中 
     */  
    private void traceBack(int i, int j, String lcs_str) {  
        while (i>0 && j>0) {  
            if (X.charAt(i-1) == Y.charAt(j-1)) {  
                lcs_str += X.charAt(i-1);  
                --i;  
                --j;  
            }  
            else {  
                if (table[i-1][j] > table[i][j-1])  
                    --i;  
                else if (table[i-1][j] < table[i][j-1])  
                    --j;  
                else {  // 相等的情况  
                    traceBack(i-1, j, lcs_str);  
                    traceBack(i, j-1, lcs_str);  
                    return;  
                }  
            }  
        }  
        set.add(reverse(lcs_str));  
    }  

    /** 
     * 功能:字符串逆序 
     */  
    private String reverse(String str) {  
        StringBuffer strBuf = new StringBuffer(str).reverse();  
        return strBuf.toString();  
    }  

    /** 
     * 功能:外部接口 —— 打印输出 
     */  
    public void printLCS() {  
        int m = X.length();  
        int n = Y.length();  
        int length = lcs(m,n);  
        String str = "";  
        traceBack(m,n,str);  

        System.out.println("The length of LCS is: " + length);  
        for(String s : set) {  
            System.out.println(s);  
        }  
    }  

    /** 
     * 功能:main方法 —— 程序的入口 
     */  
    public static void main(String[] args) {  
        LongestCommonSubsequence lcs = new LongestCommonSubsequence("ABCBDAB","BDCABA");  
        lcs.printLCS();  
    }  
}  

而最长公共子串则强调连续的条件,因此其状态转移方程式为:
这里写图片描述

最长公共子串在二维数组中则表现为连续的对角线数值不为0。其中数值最大则为最长公共子串的长度。而在输出打印所有最长公共子串时,可以遍历寻找数值为最长公共子串的长度,之后沿着对角线遍历寻找最长公共子串。

public class LongestCommonSubstring {
    private String X;  
    private String Y;  
    private int[][] table;  // 动态规划表  
    private TreeSet<String> set = new TreeSet<String>();

    /** 
     * 功能:带参数的构造器 
     */  
    public LongestCommonSubstring(String X, String Y) {  
        this.X = X;  
        this.Y = Y;  
        int m=X.length();
        int n=Y.length();
        System.out.println("The length of the longest substring is "+lcs(m,n));
    }  

    /** 
     * 功能:构造表,并返回X和Y的LCS的长度 
     */  
    private int lcs(int m, int n) {  
        int result=0;//记录最长公共子串的长度
        table = new int[m+1][n+1]; // 表的大小为(m+1)*(n+1)    
        for(int i=0;i<=X.length();i++){
            for(int j=0;j<=Y.length();j++){
                if(i==0||j==0){
                    table[i][j]=0;
                }else if(X.charAt(i-1)==Y.charAt(j-1)){
                    table[i][j]=table[i-1][j-1]+1;
                    result=Math.max(table[i][j], result);
                }else{
                    table[i][j]=0;
                }
            }
        }
        traceBack(table, m, n, result);
        return result;  
    }  
    /** 
     * 功能:(用一个比较笨的方法,遍历array,找出result所在的位置,对角线遍历最长公共字串) 
     */  
    private void traceBack(int[][] lcsArray,int i, int j,int result) {  
        while (i>0 && j>0) {  
            if(lcsArray[i][j]==result){
                printLCS(lcsArray, i, j);
            }
            --i;
            --j;
        }   
    }  

    public void printLCS(int[][] lcsArray,int i,int j){
        String str="";
        while(i>0&&j>0&&lcsArray[i][j]!=0){
            str+=X.charAt(i-1);
            --i;
            --j;
        }
        System.out.println(reverse(str));
    }

    /** 
     * 功能:字符串逆序 
     */  
    private String reverse(String str) {  
        StringBuffer strBuf = new StringBuffer(str).reverse();  
        return strBuf.toString();  
    }  


    /** 
     * 功能:main方法 —— 程序的入口 
     */  
    public static void main(String[] args) {  
        LongestCommonSubstring lcs = new LongestCommonSubstring("ABCBDQIENAB","BDDCAQISBNA");  

    }  
 }
关于求解最长公共子序列的两种思路 一、题目描述 求取两个给定序列的最长子序列,仅需要求取出其中一个最长子序列即可。 比如序列 X 为 ABCBDAB ,序列 Y 为 BDCABA,则其公共最长子序列之一为 BCBA(可能不唯一)。 关于求解所有最长公共子序列的思路可以移步我的另一篇博文: https://blog.youkuaiyun.com/qq_40697071/article/details/89059844 二、解题思路 ... 阅读详情

相关推荐

求解最长公共子序列(Longest Common Subsequence,LCS)

    两个序列X和Y的公共子序列中,长度最长的那个,就是X和Y的最长公共子序列。最长公共子序列不要求连续,二最长公共子串要求连续。思路:  字符串X,长度为m;字符串Y,长度为n。Xi=&lt;x1,x2,......xi&gt;即X序列的前i个字符,Yj=&lt;y1,y2,...,yj&gt;即Y序列的前j个字符,LCS(X,Y)为字符串X和Y的最长公共子序列,即Z=&lt;z1,z2,.....

ma373的博客 2076

每日一题-两序列

现在给你两个长度为n正整数序列a与b。 让我们现在对序列a进行一次变换: 任意选择一个正整数k,保证 (0

暴力扬 838

每天一道算法题(5)——求2个字符串的最长公共子序列和最长公共子字符串

题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。        例如:输入两个字符串BDCABA 和ABCBDAB,字符串BCBA 和BDAB 都是是它们的最长公共子串,则        输出它们

攻城狮凌风 5180

软考知识点巩固 -程序语言基础

如可以采用蛮力法,对X的每一个子序列,判断其是否也是Y的子序列,最后求出最长的即可,该方法的时间复杂度为( D )。当两个无符号数进行比较,则在比较指令之后,可以根据CF标志位的状态来判断两个数的大小,如在“CMP AX,BX”中,当CF标志位置位时,则表示(AX<BX)解析:在题目中,0是初始状态,3是终止状态,通过选项中的字符串可以从初始状态到达终止状态,则说明该字符串能被题目中的自动机识别。2、VHDL中的子程序包含函数和过程两种,下列关于VHDL中的函数和过程的叙述错误的是( B )。

dreamexplorer_xlg的博客 918

大厂算法面试 7 天冲刺计划|附全套 Java 实战 & 系统设计干货

这是一个专为想要冲击大厂算法岗位的开发者设计的 7 天成长路线图,每天深挖一种核心数据结构 / 算法场景,从问题分析到多种解法实现,再到 Java 代码落地 + 面试场景还原,帮助你快速进阶,一站式掌握高频考点。

工一木子 1099

华为机试C++108题全解:核心算法与实战技巧精讲

算法是计算机科学的核心基础,它通过定义明确的计算步骤来解决特定问题,其效率由时间复杂度和空间复杂度衡量。掌握核心算法与数据结构,如动态规划、哈希表和二叉树遍历,能显著提升解决复杂工程问题的能力,在性能优化和系统设计中具有极高价值。这些技术广泛应用于搜索引擎、推荐系统、自动驾驶等场景。本文聚焦于华为机试这一高频技术考核场景,系统梳理了字符串处理、动态规划、二叉树等核心考点,并提供了C++ STL的实战应用技巧与详细的解题框架,旨在帮助开发者高效备考,建立扎实的算法思维。

weixin_29290863的博客 291

每天一道算法题:求两个字符串的最长公共子序列

最长子序列(LCS) 公共子序列是在整个字符串中只要按照顺序可以不用连续的,但是公共子串是指必须连续的字符串,举个例子: ABCBDAB BDCABA 最长公共子序列是 : BCBA 最长公共字串是 : AB 递归思路 先将两个字符串的第一个字符进行比较 如果第一个字符相同:再将剩下的字符进行比较 如果第一个字符不相同:与之对应有两种情况 将截取了一个字符的串1与完整的串2进行比较 将截取了一个字符的串2与完整的串1进行比较 根据这两种情况的返回结果进行比较,大的那个就是LCS 代码实现: pu

黑虎阿福的博客 3176

电荷灵敏前置放大器噪声优化策略:从理论到实践

本文深入探讨了电荷灵敏前置放大器的噪声优化策略,从理论分析到实践应用。文章系统解析了并联电流噪声与串联电压噪声的来源,并引入噪声等效原理与“冷电容”模型作为统一分析工具。通过详解a、b、c三类噪声的频谱特性,为实战优化提供了清晰指导。核心策略包括选用高跨导、低漏电流FET,优化静态工作点,采用共源-共基结构,精心设计反馈网络,以及实施严格的PCB布局、屏蔽与接地,旨在全面提升微弱信号检测系统的信噪比。

weixin_29292431的博客 467

动态规划求最长公共子串和子序列

想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注 1,最长公共子串 假如有两个字符串,s1=“people"和s2=“eplm”,我们要求他俩最长的公共子串。我们一眼就能看出他们的最长公共子串是"pl”,长度是2。但如果字符串特别长的话就不容易那么观察了。 1,暴力求解:暴力求解对于字符串比较短的我们还可以接受,如果字符串太长实在是效率太低,所以这种我们就不再考虑 2,动态规划:我们用一个二维数组dp[i][j]表示第一个字符串前i个字

数据结构和算法 861

人工智能顶会投稿指南:CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期与影响力解析

本文详细解析了CCF-A类会议ACL、ICML、NeurIPS、ICLR的投稿周期与影响力,涵盖各会议的投稿时间线、评审特点及录用率。ACL注重自然语言处理,ICML强调机器学习理论,NeurIPS覆盖神经信息处理,ICLR聚焦表征学习。文章还提供了实战投稿策略,帮助研究者提升投稿成功率。

weixin_29211309的博客 3347

泰山派RK3576开发板部署Qwen3-VL-4B多模态模型实战指南:从模型转换到板端推理全流程

本文提供了在泰山派RK3576开发板上部署阿里Qwen3-VL-4B多模态模型的完整实战指南。详细介绍了从环境准备、模型转换(包括视觉模型转换为.rknn格式和语言模型转换为.rkllm格式)、交叉编译到板端推理的全流程,重点讲解了如何利用RK3576的NPU进行硬件加速,实现高效的边缘AI应用。

weixin_30356433的博客 258

412,判断子序列

想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 示例 1: s = “abc”, t = “ahbgdc” 返回 true. 示例 2: s = “axc”, t = “ahbgdc” 返回 false. 双指针求解 这题让求的是s是否是t的子序列,我们可以使用两个指针,一个指向s的某个字符,一个指向t的某个字符,其中指向t的指针每次都会往右移一位,指向s的指针每次和指

数据结构和算法 279

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

LeetCode 刷题汇总(第一阶段,随机游走)

从 0 开始 LeetCode刷题 面临毕业,为了谋求一份工作,不得已走上了刷题之路。不追求解法的性能和代码的优雅,只追求在最短的时间内写出来。 很多人喜欢给各种各样的方法起一个奇奇怪怪的名字,比如说“回溯”、“滑动窗口”等等,不懂这些,也可以做呀。你最后自己想了一个方法做出来了,其实默默地也就用了这些所谓的方法。这些题目我做完了,别人和我聊起什么回溯,我也不懂什么意思。我只知道,暴力出奇迹,干就完了。 我们做计算数学的人的长处不在于刷题,奈何这个世界这么无奈。 其实,我一直在思考,用这些小算法题去考验一

LSEC小陆的博客 1151

从真题到策略:浙江工业大学计算机转专业机试全解析与备考指南

本文全面解析浙江工业大学计算机转专业机试的考试概况、典型真题和高频考点,提供详细的备考策略和面试准备建议。从机试题目类型到解题技巧,帮助考生高效备考,顺利通过这一竞争激烈的转专业关卡。

weixin_42524824的博客 421

NSGA-II 多目标优化 —— 理论、案例与交互式 GUI 实现

本文详细介绍了 NSGA-II 多目标优化算法的基本原理、数学模型和实现流程。从非支配排序、拥挤距离计算到遗传操作,NSGA-II 通过对种群进行分层和排序,能够有效求解多目标优化问题,获得 Pareto 前沿解集。通过机械结构优化、资源分配和控制参数调优等典型案例,我们展示了 NSGA-II 在实际工程中的广泛应用。为帮助工程师和研究者更直观地理解算法求解过程,本文提供了基于 Python 与 PyQt6 的交互式 GUI 演示系统代码示例。

闲人编程的博客 2120

合并的数组会有顺序么_咱就别按顺序刷题了,看看大佬怎么刷

1.碎碎念今天完成了体育测试,大学生活真的就快要将近了,未来什么时候还能和这些可爱的同学们聚一聚呢?祝大家都好吧!比较让我高兴的是,公众号终于有了一个粉丝,哈哈哈,非常感谢关注哇!每天都要好好敲代码呀!2. 刷前指南我在准备找工作的时候开始就是按顺序刷的题,不仅效率特别低而且不好进行归纳总结,我也是看了一些大佬归纳的刷题方法,才发现分类刷(刷完要总结)才是效果最好的,而且没有必要追求刷...

weixin_39579127的博客 273

《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记

软件工程任务:即时缺陷预测(涉及SE+AI知识)

weixin_43646592的博客 702

7天算法面试通关攻略(含JDK、Spring应用)——3W学习法

帮助你在7天内高效备战大厂算法面试,并结合。的实际应用,提升你的工程能力。

工一木子 1243

EMS案例:BMS传导发射超标整改案例

BMS作为新能源汽车的关键部件,其EMC性能直接影响整车的安全性和可靠性。本文通过一个实际的传导发射整改案例,详细展示了从问题定位、分析到解决方案实施的全过程。希望这些经验能够为从事类似产品设计的工程师提供有价值的参考,在未来的产品开发中避免类似问题,设计出更加可靠、稳定的BMS产品。EMC设计是一门结合理论与实践的艺术,只有通过不断积累经验、深入理解电磁场理论,并紧密结合实际应用场景,才能在复杂的电磁环境中设计出鲁棒性强的电子产品。

m0_56451176的博客 272

深度学习工具包 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")

拼多多2018校招内推编程题复盘:大数运算与背包DP高频考点解析

算法与数据结构是校招在线笔试的通用门槛,而电商业务的真实场景又让这些基础题有了更落地的考察方式。在大规模订单、库存和配送数据下,大数运算、背包问题、字符串动态规划与BFS等算法能力,成为衡量候选人基本功的核心标尺。其原理在于:有限资源选品对应背包模型,高精度金额计算对应大数处理,仓储路径规划对应广度优先搜索。理解这些模型,就能从业务包装中快速定位题目本质。对准备2025年秋招或想了解电商公司命题思路的开发者而言,通过对拼多多2018校招内推编程题的复盘,可以从经典题中提炼出可迁移的解题策略,提升笔试胜率。

weixin_30567225的博客 365

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

映客2020春招算法E卷复盘:KMP、LIS、LRU等经典题型解析

算法工程师的校招笔试,核心往往不在偏题怪题,而在于对经典数据结构和算法原理的扎实掌握。从KMP字符串匹配的next数组推导,到动态规划求解最长上升子序列,再到LRU缓存机制中哈希表与双向链表的组合设计,这些考点既检验理论基础,也考察工程实现能力。同时,机器学习基础、进程线程、TCP握手等知识同样在选择题中占据重要份额。直播、短视频等业务场景下的推荐、审核、音视频处理,都高度依赖这些底层算法素养。本文以映客2020春招算法E卷为样本,逐一复盘选择题、简答题与编程题的解题思路和易错点,为备战算法岗笔试的读者提供

weixin_30291791的博客 452

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

滴滴校招数据挖掘笔试解析:算法、SQL与业务场景全攻略

数据挖掘工程师是互联网行业中连接数据与业务决策的关键角色。其核心能力不仅在于掌握机器学习模型,更体现在从海量数据中提取有效信息并落地为可执行策略。在企业校招笔试中,这类岗位通常围绕算法编程、SQL数据处理、统计概率以及业务场景分析等维度综合考查。算法题检验逻辑思维与代码功底,SQL考察对真实业务表的操作能力,机器学习侧重模型原理与工程应用,而业务题则评估指标拆解与策略设计能力。理解这些考点背后的设计逻辑,有助于系统化备战数据挖掘岗位的校招笔试。本文以滴滴出行2018年校园招聘数据挖掘工程师笔试为例,剖析各模

weixin_33922670的博客 370

Golang 重返Leetcode战场之旅(Leetcode Go总结博客)

Golang 重返Leetcode战场之旅

Love 6's Private Blog 1177

2023去哪儿春招编程岗笔试复盘:题型详解与备赛策略

在线编程笔试作为互联网校招的第一道筛选关卡,其核心逻辑是通过算法题与基础选择题的组合,快速评估候选人的编码能力与计算机功底。在有限时间内,候选人既需要熟练运用动态规划、拓扑排序等经典算法解决实际问题,又需要掌握数据结构、计算机网络等八股知识,这本质上是对工程素养与临场效率的双重考验。这类笔试模式在OTA、电商等实时性强的业务场景中尤为常见,因为高并发、缓存一致性等问题要求开发者具备扎实的基础。本文以2023年去哪儿春招编程岗的实战经历为样本,还原了牛客网笔试的题型分布、三道编程题的完整思路、以及时间分配与环

weixin_34212762的博客 346
上一篇: http状态码详解
下一篇: 每天一道算法题--单链表的相关操作
yadicoco49
博客等级 码龄10年 6粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值