滑窗算法排序
用ActionChains这个模块里面的drag_and_drop 元素或者drag_and_drop_by_offset坐标
㈡ 什么是滑窗迭代算法
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。
㈢ 读《不等长时间序列滑窗STS距离聚类算法》论文
传统时间序列聚类的缺点:
1)时间序列聚类的研究一般采用等长划分,会丢失重要特征点,对聚类结果有负面影响。
2)采用时间序列测量值不能准确度量相似度。
如下埃博拉出血热、卫生部在数值上很相似,但教育部和卫生部在形状更相似。若是以形状作为度量传统的欧氏距离可能就不太合适了。
不等长时间序列滑窗STS聚类算法:
1)通过标准分数z_score预处理,消除时间序列观测值数量级差异的影响。
2)更改了相似度计算的方式,采用基于滑窗的方法计算不等长序列的距离。
3)采用类k-means的聚类算法的中心曲线计算方法。
时间序列数据因其趋势信息的直观展现形式,广泛应用于社交网络、互联网搜索和新闻媒体数据分析中。例如:Google应用搜索流感的相关信息的时间序列预测流感爆发趋势。根据某话题热度时间序列数据趋势的规律性,通过聚类区分不同类型的时间序列数据。同一类簇的Twitter话题具有相同或相似的发展趋势,进而应用于话题的发展趋势的预测。
时间序列聚类算法可以分为两类。
1)基于原始数据的时间序列聚类算法。
2)基于特征的时间序列聚类算法。
基于特征的时间序列聚类算法指根据原始数据从时间序列中提取形态特征(极值点位置、分段斜率)、结构特征(平均值、方差等统计值特征)、模型特征(模型的预测值),从而根据这些特征值进行聚类。这类方法的优点解决了不等长时间序列聚类问题,缺点是减弱了原始数据值得影响,聚类的形状趋势信息往往比较粗糙。
3. HOW
一、距离度量公式
STS距离计算的是累加时间序列间每个时间间隔斜率差的平方,公式
如上图所示,g1、g2和g2、g3的欧式距离的数值更相近。g1、g2的STS距离大于g2、g3的数值。在形状距离上,STS距离计算方式表现更好,一定程度上可以解决欧式距离度量时间序列局部特征信息确实和受观测数值数量级差异影响大的问题,但是依旧无法度量不等长时间序列的距离。
基于滑窗的STS距离公式。
如上图所示,当计算不同长度的时间序列的s和r的距离时,先不断平移时间序列s,然后找到s和r距离最近的字段,就如同上图虚线之间的位置,此时s和r距离最近,这个最近距离作为s和r之间的距离。
二、预处理过程
z-score标准分数用数据观测值和观测值平均值的距离代替原观测值。z-score处理后的数据平均值为0,标准差为1。标准差的作用是统一量纲,去除数值的数量级差异影响。
总结
本论文提出了形状距离的不等长时间序列的聚类方法。我们可以学到的有
1)z-score统一量纲,消除数值数量级差异,聚类效果更好。
2)计算x和y时间序列的STS距离,可以平移其中一个时间序列,求最小值作为STS距离值,这就消除了同一时间序列不同起始点的影响。
㈣ 滑动窗口的最大最小如何确定的
只有接收方的接收窗口中按序接收到了对应的帧后,接收方才将排好序的帧交给上层,窗口才可以滑动。
假设窗口大小为x,可能一次上交1-x帧数据给上层,这样窗口就可以滑动1-x个位置,窗口中又空出1-x个位置以接收新的帧。窗口的大小大于2的n -1次方时,如果有帧出错,发送方重传时,会产生二义性。
㈤ 算法总结之滑动窗口
滑动窗口类问题是面试当中的高频题,问题本身其实并不复杂,但是实现起来细节思考非常的多,想着想着可能因为变量变化,指针移动等等问题,导致程序反复删来改去,有思路,但是程序写不出是这类问题最大的障碍。
本文会将 LeetCode 里面的大部分滑动窗口问题分析、总结、分类,并提供一个可以参考的模版
滑动窗口这类问题一般需要用到 双指针 来进行求解,另外一类比较特殊则是需要用到特定的数据结构,如 Map,队列等。
题目问法大致有这几种
1 . 给两个字符串,一长一短,问其中短的是否在长的中满足一定的条件存在
2 . 给一个字符串或者数组,问这个字符串的子串或者子数组是否满足一定的条件
除此之外,还有一些其他的问法,但是不变的是,这类题目脱离不开主串(主数组)和子串(子数组)的关系,要求的时间复杂度往往是 O ( N ) O(N) O(N) ,空间复杂度往往是 O ( 1 ) O(1) O(1) 的。
根据前面的描述,滑动窗口就是这类题目的重点,换句话说, 窗口的移动 就是重点!我们要控制前后指针的移动来控制窗口,这样的移动是有条件的,也就是要想清楚在什么情况下移动,在什么情况下保持不变。
思路是保证右指针每次往前移动一格,每次移动都会有新的一个元素进入窗口,这时条件可能就会发生改变,然后根据当前条件来决定左指针是否移动,以及移动多少格。
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例
解题思路
输入只有一个字符串,要求子串里面不能够有重复的元素,这里 count 都不需要定义,直接判断哈希散列里面的元素是不是在窗口内即可,是的话得移动左指针去重。
建立一个 128 位大小的整型数组,用来建立字符和其出现位置之间的映射。维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的大小,窗口不停的向右滑动。
替换后的最长重复字符
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。
示例
解题思路
最简单的方法就是把哈希散列遍历一边找到最大的字符数量,但是仔细想想如果我们每次新进元素都更新这个最大数量,且只更新一次,我们保存的是当前遍历过的全局的最大值,它肯定是比实际的最大值大的,我们左指针移动的条件是 right - left + 1 - count > k,保存的结果是 result = Math.max(result, right - left + 1); 这里 count 比实际偏大的话,虽然导致左指针不能移动,但是不会记录当前的结果,所以最后的答案并不会受影响。
长度为 K 的无重复字符子串
给你一个字符串 S,找出所有长度为 K 且不含重复字符的子串,请你返回全部满足要求的子串的数目。
示例
解题思路
根据题意我们发现相当于窗口大小固定为K,同时在窗口内必须没有重复的字符。我们用左右指针可以计算出当前窗口的大小right - left + 1,同时再利用一个count对字符种类进行计数(也可以直接用一个boolean值即可),那么很容易可以得出当right - left + 1 > K 或者 count > 0时需要移动左指针了。剩下的部分就是愉快地套用模板啦。
至多包含两个不同字符的最长子串
给定一个字符串 s ,找出至多包含两个不同字符的最长子串 t 。
示例
解题思路
类似于上一题,不过我们用count来记录当前窗口内字符的种类数量,当出现新字符以及滑动左指针时,做相应的判断来改变count,窗口大小始终保持在满足条件至多两个不同字符的情况下。
至多包含 K 个不同字符的最长子串
给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
示例
解题思路
和上一题完全一样的思路,只需要把判断窗口条件的地方改成 count > k ,又一题困难被我们直接秒杀。
下面来看看两个字符串的情况
最小覆盖子串
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。
示例
解题思路
同样是两个字符串之间的关系问题,因为题目求的最小子串,也就是窗口的最小长度,说明这里的窗口大小是可变的,这里移动左指针的条件变成,只要左指针指向不需要的字符,就进行移动。
字符串的排列
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
示例
解题思路
首先窗口是固定的,窗口长度就是s1的长度,也就是说,右指针移动到某个位置后,左指针必须跟着一同移动,且每次移动都是一格,count 用来记录窗口内满足条件的元素,直到 count 和窗口长度相等即可。
找到字符串中所有字母异位词
给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。
示例
解题思路
和上一题完全一致的思路,窗口固定为p串的长度。
最后来看看数组类型的题吧
最大连续1的个数 III
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。
示例
解题思路
这题有点像上面的 替换后的最长重复字符,只不过把字符串换成了数组,由于只有两种数字 0 和 1,并且只求连续 1 的长度,我们可以连 hash 映射都不需要了,直接计算遍历到的 0 的个数即可。
K 个不同整数的子数组
给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。
示例
解题思路
这题比较 tricky 的一个地方在于,这里不是求最小值最大值,而是要你计数。
但是如果每次仅仅加 1 的话又不太对,例如 A = [1,2,1,2,3], K = 2 这个例子,假如右指针移到 index 为 3 的位置,如果按之前的思路左指针根据 count 来移动,当前窗口是 [1,2,1,2],但是怎么把 [2,1] 给考虑进去呢?
可以从数组和子数组的关系来思考!
假如 [1,2,1,2] 是符合条件的数组,如果要计数的话,[1,2,1,2] 要求的结果是否和 [1,2,1] 的结果存在联系?这两个数组的区别在于多了一个新进来的元素,之前子数组计数没考虑到这个元素,假如把这个元素放到之前符合条件的子数组中组成的新数组也是符合条件的,我们看看这个例子中所有满足条件的窗口以及对应的满足条件的子数组情况:
你可以看到对于一段连续的数组,新的元素进来,窗口增加 1,每次的增量都会在前一次增量的基础上加 1。当新的元素进来打破当前条件会使这个增量从新回到 1,这样我们左指针移动条件就是只要是移动不会改变条件,就移动,不然就停止。
至此,本文用同一个框架解决了多道滑动窗口的题目,这类问题思维复杂度并不高,但是出错点往往在细节。记忆常用的解题模版还是很有必要的,特别是对于这种变量名多,容易混淆的题型。有了这个框架,思考的点就转化为 “什么条件下移动左指针”,无关信息少了,思考加实现自然不是问题。
㈥ 滑动窗口技术工作原理
滑动窗口针对图像的算法的一般描述是:在规模为 W×H 的图像中,按一定规律移动 w×h 的窗口(W>>w, H>>h),对窗口内像素点的像素值进行一系列运算,运算结束后窗口向右或向下移动一步,直到完成对整幅图像的处理。
如果问的是滑动窗口协议的话,网络随便搜索下,N多回答。
㈦ TCP/IP中滑动窗口算法的意义
1.在不可靠链路上可靠地传输帧(核心功能)
2.用于保持帧的传输顺序
3.它有时支持流量控制,这是一种接收方能够控制发送方的一种反馈机制。
㈧ 什么是滑窗迭代算法
TCP的首部中有一个很重要的字段就是16位长的窗口大小,它出现在每一个TCP数据报中,配合32位的确认序号,用于向对端通告本地socket的接收窗口大小。也就是说,如果本地socket发送一个TCP数据,其32位确认序号是5,窗口大小是5840,则用于告诉对端,对端已经发出的4个字节的数据已经收到并确认,接下来,本地socket最多能够接收从第5个字节开始的5840个字节长度的数据。这是由接收方进行的一种流量控制,接收方通过告诉发送方自己所能够接收数据的大小,达到控制发送方发送速度的目的。
结构体struct tcp_sock中有很多成员数据跟滑动窗口协议相关,需要注意的是这里讲的滑动窗口都是指本地socket的接收窗口。
成员window_clamp表示滑动窗口的最大值,滑动窗口的大小在变化的过程中不能超出这个值。它在TCP连接建立的时候被初始化,被置为最大的16位整数左移窗口的扩大因子,因为滑动窗口在TCP首部中以16位表示,window_clamp太大会导致滑动窗口不能在TCP首部中表示。
成员rx_opt是一个struct tcp_options_received结构体,它有两个成员snd_wscale和rcv_wscale,分别表示来自对端通告的滑动窗口扩大因子(本地发送数据报时需要遵守),和本地接收滑动窗口的扩大因子。snd_wscale从来自对端的第一个SYN中获取。rcv_wscale在本地socket建立连接时初始化,它赋值的原则是使16位整数的最大值左移rcv_wscale后,至少可以达到整个接收缓存的最大值。接收缓存最大值在协议栈中由全局变量mysysctl_rmem_max表示,它是256*(256+sizeof(struct sk_buff))后的值,为107520,但sysctl_tcp_rmem[3]所表示的接收缓存的上限更大,为174760,所以,取后者,这样的话,rcv_wscale的值几乎可以说是固定的,为2。所以window_clamp的值就是 65535 << 2 = 262140。可见,window_clamp的值超出了接收缓存的最大值,但这没有关系,因为在滑动窗口增长的时候,会考虑接收缓存的大小这个因素的。
rcv_wnd表示当前的接收窗口的大小,这个值在接收到来自对端的数据后,会变动的。它的初始值取接收缓存大小的3/4跟MAX_TCP_WINDOW之间的最小值,MAX_TCP_WINDOW在系统中的定义为32767U。然后,还要根据mss的值作一个调整,调整逻辑是:如果mss大于3*1460,则如果当前的rcv_wnd大于两倍的mss,就取两倍的mss作为rcv_wnd的值;如果mss大于1460,则如果当前的rcv_wnd大于3倍的mss,就取3倍的mss作为rcv_wnd的新值;否则,如果rcv_wnd大于4倍的mss,就取4倍的mss作为rcv_wnd的新值,我们的实验环境的mss值为1448(因为tcp首部有12字节的时间戳选项),所以rcv_wnd最后被调整为1448*4=5792。
㈨ 铝合金门窗的算法、公式及上下方尺寸和玻璃尺寸的算法是什么
高度方向搭接量的确定:应根据上滑型材的槽深和下滑型材的道轨高度,以及窗扇滑轮的高度来选择搭接量。窗扇与上滑的搭接量一般为上滑槽深的1/2减去2~3mm,可选用10 mm。窗扇与下滑的搭接量是滑轮的槽深到窗扇下边的距离,一般为6~10 mm,可选用8 mm。
另外,也可以用推拉框高度方向的内口尺寸,加上上滑槽深,再减去4~6 mm,作为推拉扇的高度尺寸。
宽度方向的搭接量应根据边封型材、勾企型材以及光企型材确定。设计时,应使两个窗扇的勾企完全重合。
铝合金推拉窗分为两扇推拉窗、三扇三等分推拉窗、三扇四等分推拉窗、四扇推拉窗等。设计时,应使窗扇的宽度尺寸和高度尺寸在国家标准允许的范围内。
设计带有固定窗的推拉窗时,如果是上下分格,固定窗与推拉窗之间可以采用中上滑型材或中下滑型材;如果是左右分格,固定窗与推拉窗之间可以采用固定边封型材。如果是高层建筑,还要考虑推拉窗的厚度系列是否满足抗风压强度要求。
设计纱扇时,高度方向的搭接量按纱轨槽深的二分之一选取。宽度方向的搭接量可按纱扇宽度不超过窗扇宽度选取,宽度尺寸不应超过窗扇宽度。
二、铝合金推拉窗的下料尺寸计算
铝合金推拉窗的下料尺寸主要是窗框和窗扇的下料尺寸计算。
窗框的下料尺寸包括:边封、上滑、下滑、中上滑、中下滑、固上横、中立柱(中梃)等。边封的下料尺寸等于窗高;上滑、下滑、中上滑、中下滑、固上横的下料尺寸等于窗宽减去两个边封的宽度再加上两个边封的槽深;
窗扇的下料尺寸包括:上方、下方、勾企、光企等。勾企、光企的下料尺寸等于窗框的内口尺寸,再加上两个搭接量(上下搭接量);上方、下方的下料尺寸等于窗扇的宽度减去勾企、光企的宽度,再加上勾企、光企的槽深;
计算窗扇的宽度尺寸时,有四种情况:一是两扇推拉窗的计算;二是三扇三等分推拉窗的计算、三是三扇四等分推拉窗的计算、四是四扇推拉窗的计算。计算时应分别对待。
㈩ 目标检测中anchor box的做法和adaboost人脸检测中的滑窗检测有什么区别
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据。
卷积神经网络(CNN)
局部连接
传统的神经网络是全连接,即一层的神经元与上一层的所有神经元都建立连接,这样导致参数非常多,计算量非常大,而CNN是局部连接,一层的神经元只与上一层的部分神经元建立连接,这样可以减少参数和计算量。
Technology-MachineLearning-FaceRegonition-CNN-LocalConnected
权值共享
给一张输入图片,用一个filter去扫时,filter里面的数就叫权重。用该filter对整个图片进行了某个特征的扫描,例如Edge detection,这个过程就是权值共享,因为权重不变。
Technology-MachineLearning-FaceRegonition-CNN-WeightSharing
人脸识别
多个CNN加其他层,遍历而成的人脸识别处理结构:
Technology-MachineLearning-FaceRegonition-CNN-Example
层提取到的信息的演进:
Technology-MachineLearning-FaceRegonition-CNN-Example2
人脸检测
传统算法
识别:滑动窗口+分类器
用一个固定大小的窗口去滑动扫描图像,并通过分类器去分辨是否是人脸。有时候人脸在图片中过小,所以还要通过放大图片来扫描。
Technology-MachineLearning-FaceRegonition-WindowClassifier
训练:特征+Adaboost
传统特征:LBP/HOG/Harr
图片原始的RGB信息,维度太高,计算量过大,且不具备鲁棒性,即光照和旋转,对RGB信息影响非常大。
利用LBP得到二进制值,再转换成十进制:
Technology-MachineLearning-FaceRegonition-LBP
效果图:
Technology-MachineLearning-FaceRegonition-LBP-Example
Adaboost
由于移动设备对计算速度有一定要求,所以用多个弱分类器加权叠加来完成一个强分类器,从而保证速度。
Technology-MachineLearning-FaceRegonition-Adaboost
深度学习
特征的选取是比较复杂的,可能需要大量的统计学和生物学知识积累,而深度学习不需要选择特征,这是其很大优势,另外通过GPU代替CPU等方式,可以得到一个更好的效果。
Technology-MachineLearning-FaceRegonition-DeepLeaning-Example
关键点检测、跟踪
传统算法
Cascade regression/ESR/SDM
传统算法步骤:
根据人脸检测的框位置,先初始化初始脸部轮廓位置;
进行上一步位置和图形特征检测下一步位置(一般是迭代残差);
进行迭代,最终得到相对准确的轮廓位置。
Technology-MachineLearning-FaceRegonition-KeyPoints
深度学习
深度学习算法步骤:
对图像进行轮廓定位态校正;
全局粗定位;
局部精细定位。
作者:YI_LIN
来源:简书