滑动窗口常用技巧总结

时间序列预测(十七)——滑动窗口的使用 滑动窗口是一种常用的技术,它通过使用固定大小的窗口来创建训练样本,以便捕捉时间序列中的模式。适用于多种时间序列模型,包括 LSTM、GRU 和其他类型的递归神经网络(RNN),因为这些模型能够处理输入的时间依赖性。注意:在使用滑动窗口生成训练样本之前,通常需要对数据进行标准化或归一化,以提高模型的收敛速度和预测准确性。输出预测结果时也要反归一化。 阅读详情

概述

在解决字串问题时,滑动窗口技巧可能经常会使用,其本身思想并不难理解,难在灵活。因而本文从一个最小覆盖字串问题入手总结一个通用的算法框架以解决常见的滑动窗口问题。

算法与框架

下边我们先看一个最小覆盖子串问题:

image-20201113143843849

题目本身不难理解,主要就是从S(source)中找到包含T(target)中全部字幕的一个子串,顺序无所谓,个数相同且子串中一定是所有可能子串中最短的。

最简单的思路是通过暴力法,通过两层搜索来解决,但时间复杂度很高,甚至大于O(n^2)。

此类问题实际上我们可以通过滑动窗口的思路来解决。具体思路如下:

  1. 在字符串S中使用双指针中左右指针的技巧,初始化left = right = 0,把索引区间[left,right]称之为一个[窗口]。
  2. 不断的增加right指针扩大窗口[left,right ],直到窗口中的字符串符合要求(窗口包含T中所有字符)。
  3. 停止增加right,转而增加left指针,进而缩小窗口直到窗口不再符合要求。同时每增加一个left都要更新一轮结果。
  4. 重复2和3,直到right达到字符串S的尽头。

整个过程思路并不难,其中第2步相当于在找一个可行解,第3步在优化这个可行解,每轮都进行结果更新,最后找到最优解。

下边我们结合整下边的图来理解算法的整个过程。needs和windows相当于计数器,分别记录T中字符串出现的次数和窗口中的对应字符出现的次数。

第1步:初始状态,left和righ都为0

image-20201113145441247

第2步:向右移动right寻找可行解

image-20201113145521166

第3步:向右移动left,优化可行解

image-20201113145601919

第4步:重复2和3直到,right到达右边界

image-20201113145635325

上述过程可以简单写出如下的代码框架:

public String slidingWindow(String s, String t) {
	//定义两个窗口
	Map<Character, Integer> need = new HashMap<>(), window = new HashMap<>();
	// 初始化need窗口
	for (char c : t.toCharArray()) {
	  need.put(c, need.getOrDefault(c, 0) + 1);
	}

	int left = 0, right = 0;
	// 已经和need匹配的字符串个数 
	int valid = 0;
	while (right < s.length()) {
	  char c = s.charAt(right);
	  // move to right
	  right++;
	  // 进行窗口内一系列数据的更新
	  ...
	
	// 判断左侧窗口是否要收缩
	while (window needs shrink) {
	    // d 是将移出窗口的字符
	    char d = s.charAt(left);
	    // 左移窗口
	    left++;
	    // 进行窗口内数据的一系列更新
	    ...
	}
}

其中两处...表示更新窗口数据的地方,根据不同的问题,进行填充即可。

针对最小覆盖子串问题,开始套模板,只需要考虑如下四个问题:

  1. 移动right扩大窗口,即加入字符时需要考虑哪些数据?
  2. 什么条件下,窗口应该暂停扩大,开始移动left缩小窗口?
  3. 当移动left缩小窗口,即移除字符时,应该更新哪些数据?
  4. 我们要的结果应该在扩大窗口时还是缩小窗口时进行更新?

如果一个字符进入窗口,应该增加 window 计数器;如果一个字符将移出窗口的时候,应该减少 window 计数器;当 valid 满足 need 时应该收缩窗口;应该在收缩窗口的时候更新最终结果。

针对该问题我们将代码进行填充后得到如何解法:

string minWindow(string s, string t) {
    unordered_map<char, int> need, window;
    for (char c : t) need[c]++;

    int left = 0, right = 0;
    int valid = 0;
    // 记录最小覆盖子串的起始索引及长度
    int start = 0, len = INT_MAX;
    while (right < s.size()) {
        // c 是将移入窗口的字符
        char c = s[right];
        // 右移窗口
        right++;
        // 进行窗口内数据的一系列更新
        if (need.count(c)) {
            window[c]++;
            if (window[c] == need[c])
                valid++;
        }

        // 判断左侧窗口是否要收缩
        //必须使用equlals来判断,不能使用 ==
        while (valid.equals(need.size())) {
            // 在这里更新最小覆盖子串
            if (right - left < len) {
                start = left;
                len = right - left;
            }
            // d 是将移出窗口的字符
            char d = s[left];
            // 左移窗口
            left++;
            // 进行窗口内数据的一系列更新
            if (need.count(d)) {
                if (window[d].euqals(need[d])
                    valid--;
                window[d]--;
            }                    
        }
    }
    // 返回最小覆盖子串
    return len == INT_MAX ?
        "" : s.substr(start, len);
}

应用

接下来我们再看一下另一个中等难度的题目字符串的排列

image-20201115195023834

题意很好理解,就是判断s2是否包含s1的某种排列。我们比较容易想到用暴力法。但会发现时间复杂度过高无法通过。然后考虑到是子串问题,尝试使用滑动窗口方法。

结合模板,考虑两个问题:

  1. 右侧窗口滑动时,做哪些操作
  2. 左侧窗口滑动的条件,以及所做操作

针对第一个问题,我们考虑到当右侧窗口滑动获取一个字符时要判断当前字符是否在need中,如果存在进行windows计数

针对第二个问题,如果窗口的长度大于字符串t的长度,则需要进行窗口左移操作,进行窗口“瘦身”

该问题具体代码实现如下:

public boolean checkInclusion(String t, String s) {
    if (t.length() > s.length()) {
      return false;
    }
    Map<Character, Integer> need = new HashMap<>();
    Map<Character, Integer> window = new HashMap<>();
    // init need
    for (char c : t.toCharArray()) {
      need.put(c, need.getOrDefault(c, 0) + 1);
    }
    // define variable
    int left = 0, right = 0;
    int valid = 0;
    while (right < s.length()) {
      char c = s.charAt(right);
      right++;
      // update right window
      if (need.containsKey(c)) {
        window.put(c, window.getOrDefault(c, 0) + 1);
        if (need.get(c).equals(window.get(c))) {
          valid++;
        }
      }
      // shrink left window
      // 每一次窗口的尺寸比need的尺寸大的时候都会进行瘦身操作,一直移动到比need的尺寸小1结束
      while (right - left >= t.length()) {
        if (valid == need.size()) {
          return true;
        }
        char d = s.charAt(left);
        left++;
        if (need.containsKey(d)) {
          if (window.get(d).equals(need.get(d))) {
            valid--;
          }
          window.put(d, window.get(d) - 1);
        }
      }
    }
    return false;
  }

总结

简单来说滑动窗口问题其实只要记下这个框架,大部分类似问题都可迎刃而解。

参考

  1. https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/2.5-shou-ba-shou-shua-shu-zu-ti-mu/hua-dong-chuang-kou-ji-qiao-jin-jie
页面下拉显示更多加载内容的代码 页面下拉显示更多加载内容的代码,包括手指向上拖动,下面显示更多的条目内容 立即下载

相关推荐

dify离线部署

以bge-m3为例,本地部署bge-m3首先在一台能连网的linux服务器上(部署有ollama)创建想要保存模型的文件夹编辑ollama.service,配置ollama模型的保存路径添加模型存储地址将models目录设置属主,必须做,否则ollama无法启动重新加载配置文件并重启ollama测试ollama 运行是否正常最后拉取 bge-m3可在/opt/LLMModels/bge_m3/models目录下看到拉取得模型使用tar命令压缩文件夹。

weixin_42538734的博客 3068

滑动窗口详解

滑动窗口是双指针的一种特列,可以称为左右指针,滑动窗口路一般用于解决特定的序列中符合条件的连续的子序列的问题。 滑动窗口的时间复杂度是线性的,一般为O(n)O(n)O(n),滑动窗口的左右边界都不会向左滑动,向左滑动等于走回头路,是一种回溯的算法。 一般来说,我们面对的最多的两个序列就是数组与字符串。 字符串类的滑动窗口问题 这类问题一般可以分为两类,第一种两个字符串中符合条件的 数组类的滑动窗口问题 ......

8605

数字电子时钟——数字电路课设

本文设计了一种基于中小规模集成电路的数字电子时钟系统,采用模块化设计方法,包含晶振电路(CD4060+D触发器)、计时电路(74HC161计数器)、数码管驱动(CD4511)和整点报时功能。系统实现了60进制秒/分、24进制小时、7进制星期的计时显示,支持手动校时功能,并具备整点报时特性(59分54-58秒5次500Hz低音,59秒1次1000Hz高音)。通过分模块调试与整合,最终实物电路满足设计要求,获得优秀评价。

来自FZU——电子科学与技术专业 1488

JAVA 实现滑动窗口(力扣LeetCode算法题)

JAVA 实现滑动窗口(力扣LeetCode算法题) 滑动窗口的套路:窗口的左右边界r,l从0开始,先移动r,达到需求后,改为移动l,直到再次不符合需求,然后再移动r...以此类推,直到r超过数组长度,程序结束。...

cyc头发还挺多的博客 1118

立创开源PEX88048 8盘位M.2扩展卡硬件设计与PCIE4.0交换机应用解析

本文详细解析了基于Broadcom PEX88048 PCIe 4.0交换芯片的8盘位M.2扩展卡硬件设计。文章深入探讨了核心芯片选型、关键供电与安全设计、引脚配置、固件刷写方法,并重点剖析了PCIe 4.0时钟架构与高速PCB布局的核心思想,旨在帮助开发者理解如何设计高性能、高可靠性的存储扩展方案,并有效控制成本。

weixin_28949937的博客 617

Python数据清洗实战:用RapidFuzz搞定模糊匹配(附完整代码示例)

本文详细介绍了在Python数据清洗中,如何利用RapidFuzz库高效解决字符模糊匹配难题。通过实战代码示例,演示了从处理拼写错误、格式不一致的脏数据,到构建实体对齐与记录去重的完整清洗管道,帮助开发者提升数据质量与处理效率。

pear55的博客 532

滑动窗口入门讲解

滑动窗口算法的思想是通过维护一个窗口,在一个序列上滑动该窗口以寻找特定条件的子序列。 **滑动窗口算法的基本思路如下:** 1. 定义两个指针left和right,分别指向窗口的左右边界。 2. 移动右指针,扩大窗口,直到满足特定条件为止。 3. 移动左指针,缩小窗口,直到不满足特定条件为止。 4. 重复步骤2和步骤3,直到右指针到达序列的末尾。 滑动窗口算法的优势在于可以避免对每个子序列进行暴力枚举,从而提高时间效率。它的应用范围非常广泛,如字符串匹配、最小覆盖子串、最长无重复子串等问题都可以使用滑

qq_63728673的博客 394

如何导入su_利用GIS快速生成SU场地模型

01|前言:进入2021年了,希望大家也是一个新的开始。告诫自己多写文章多更新,多读点书多旅行。然而元旦由于出去玩了4天,积累了一些事情要处理,一直没有时间好好写点东西。今天给大家带来的分享主题叫“利用GIS快速生成SU场地模型”。相关的视频方法其实B站上也有,但我相信视频很多人都不会看,我自己也是。直接给大家上操作流程。主要的操作步骤是【获取场地的矢量shp文件】—【导入ArcScen...

weixin_33806859的博客 9813

面试难点!常用算法技巧之“滑动窗口”

算法简介 滑动窗口,顾名思义,就是有一个大小可变的窗口,左右两端方向一致的向前滑动(右端固定,左端滑动;左端固定,右端滑动)。 可以想象成队列,一端在push元素,另一端在pop元素,如下所示: 假设有数组[a b c d e f g h] 一个大小为3的滑动窗口在其上滑动,则有: [a b c] [b c d] [c d e] [d e f] [e f g] [f g h] 适用范围 1、一般是字符串或者列表 2、一般是要求最值(最大长

wj1314250的博客 800

【MuJoCo】第一章 仿真环境的搭建与入门

它通过优化的接触动力学算法,能够高效处理复杂的多体交互,这使其成为从机械臂操控到足式机器人运动,再到大规模强化学习训练的理想选择。特别是与 JAX 集成的 MJX 的推出,将高性能仿真的边界推向了新的高度,使得在单台机器上并行数千个仿真环境成为可能。我们将通过编写您的第一个仿真程序,逐步拆解 MuJoCo 的工作流,让您亲手感受物理引擎的脉动。这种加速能力对于需要海量仿真样本的强化学习算法(如 PPO)是颠覆性的,它将原本需要数小时的训练缩短到几分钟。上的几何形状,用于碰撞检测和可视化。

u012133341的博客 368

卸载python弹框报错:Could not set file security for file ‘D:\Config.Msi\abd5.rbf‘. Error: 5. Verify...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 6480

算法学习笔记——常用技巧:双指针(滑动窗口算法)

解决问题时直接套入模板,只需考虑下面四个问题并修改相应的细节:暴力列举所有子串,复杂度O(N^2)以上使用滑动窗口算法解题,时间复杂度O(N) 开始前,先考虑上面的四个问题:套入模板即可,另外本题的技巧是:用solved表示当前窗口内有几个字母的数量符合要求(window[ch]>=need[ch]),若solved==len(need),则当前窗口满足要求,注意在扩大和缩小窗口时更新solved S是否包含T的全排列 暴力方法是穷举T的所有全排列,然后在S中搜索,然而计算全排列需要阶乘级别的复杂度转化为

Insomnia_X的博客 365

【AI大模型:认知升级】1、全面解析AI大模型:从起源到发展脉络与应用价值

AI大模型是具备超大规模参数(千亿至万亿级)、海量训练数据(TB级)和强迁移学习能力的基础模型。其技术特征包括Transformer架构革新、大数据预训练范式及参数规模超过临界值后的能力涌现。发展历程经历了语言模型突破(2018-2020)、多模态融合(2021-2023)和架构创新(2023至今)三波浪潮,遵循数据、算力、算法协同进化规律。底层驱动因素包括能力涌现机制、算力基础设施突破和应用场景拓展,正在重构产业价值链。通过"知识星系""认知

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 2291

面试难点!常用算法技巧之“滑动窗口”,2024年最新java电商项目面试

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务。

2401_84103100的博客 1038

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

算法学习笔记——常用技巧:滑动窗口与前缀和思想结合(求子数组数量问题)

关于数组的连续区间的问题,应条件反射想到滑动窗口和前缀和技巧利用左右指针,在一次遍历中求解题目使用滑动窗口(双指针)解决的问题多与「最小」、「最大」有关,这是因为我们可以在满足条件的前提下,尽可能维护最长的窗口 例如: LeetCode 3. 无重复字符的最长子串;(VIP) LeetCode 209. 长度最小的子数组; LeetCode 76. 最小覆盖子串;(209题的升级版) LeetCode 159. 至多包含两个不同字符的最长子串;(VIP) LeetCode 424. 替换后的最长重复字符(⭐

Insomnia_X的博客 890

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

滑动窗口与双指针

滑动窗口()是一种用于解决数组或字符串相关问题的常用技巧。其基本思想是维护一个固定大小的窗口,通过在数组或字符串上滑动窗口的方式来求解问题。在滑动窗口技巧中,通常需要定义两个指针,即左指针left和右指针right,来维护窗口的位置。在解决具体问题时,可以通过移动左右指针来调整窗口的大小,并根据题目要求在窗口内进行相应的操作。滑动窗口技巧通常用于解决以下类型的问题: 1. 求解具有连续性质的子数组或子字符串的问题;2. 求解具有固定大小的子数组或子字符串的问题;

sara_shengxin的博客 1780

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

关于C++中滑动窗口算法技巧

滑动窗口是一种高效的解题策略 可以大幅度降低时间复杂度 特别是在处理连续元素的情下。

2401_87318967的博客 442

算法思想之滑动窗口

该技巧通过维护一个固定大小的窗口(通常是一个子数组或子串),在遍历过程中不断调整窗口的位置和大小,以便快速计算出所需的结果。滑动窗口算法通常能够在 O(n) 的时间复杂度内解决这类问题,因此在处理需要考虑连续子序列或子串的情况下,是一种高效的算法选择。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。接下来 n 行,每行若干个空格分隔的字符串,分别表示一名员工的出勤记录。优化点在于,从数学的角度减少计算的次数,n < (n/2+n%2+1)该整数的所有表达式和表达式的个数。

墨鸦的博客 1万+

17.TCP协议-滑动窗口(基础)

滑动窗口(基础)

写后端的小学生 883

Java算法题常用方法与技巧全攻略

特点:连续内存,随机访问快,增删慢。常用操作:java复制 int[] arr = new int[10]; // 初始化 Arrays.sort(arr); // 排序 Arrays.fill(arr, 0); // 填充 Arrays.binarySearch(arr, key); // 二分查找 字符串(String) 特点:不可变,操作效率低。常用操作:java复制 String s = "hello"; s.charAt(0); // 获取字符 s.subst

2302_80461269的博客 945

双指针——滑动窗口

双指针算法是一种常用的算法技巧,广泛应用于数组、链表、字符串等数据结构的处理中。其中,是双指针的一种特殊形式,主要用于解决子数组或子字符串相关的问题。下面我们详细讨论双指针和滑动窗口的区别,以及滑动窗口的特点和应用场景。

2301_80215285的博客 1698

滑动窗口

遇到子字符串的题目一般都用 “前缀和” 和“滑动窗口”两种解算方法。 解法一(暴力解) class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int sum; int ans = INT_MAX; for(int i =0; i < nums.size();i++){ sum =0; ..

Jassicar的博客 222

C++数据结构6:滑动窗口

双端队列、滑动窗口

ccrr7的博客 395

算法总结-双指针-滑动窗口(尺取法)

滑动窗口的题单可以刷。

m0_72786913的博客 787

滑动窗口篇——如行云流水般的高效解法与智能之道(1)

上篇我们介绍了双指针算法,并结合具体题目进行了详细的运用讲解。本篇我们将会了解滑动窗口。滑动窗口是一种。

2303_81060385的博客 1265
上一篇: 贪心算法原理及其应用
下一篇: 回溯法套路总结与应用
vcjmhg
博客等级 码龄11年 27粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值