标记为sliding-window c的活动问题-堆栈溢出 最近30次来自stackoverflow.com 2024-06-30T00:49:54Z https://stackoverflow.com/feeds/tag?标记名=滑动-窗口+c&amp;sort=最新 https://creativecommons.org/licenses/by-sa/4.0/rdf https://stackoverflow.com/q/77223308 0 如何在单个字节中创建5位的滑动窗口? 克罗斯72 https://stackoverflow.com/users/18294938 2023-10-03T14:43:08Z 2023-10-03T16:43:51Z <p>以下是我想要发生的事情的视频<a href=“https://i.sstatic.net/SewJy.png网址“rel=”nofollow noreferrer“>5位滑动窗口</a></p><p>换句话说,我想要一个5位的滑动窗口。我需要在一个字节内存储5个事件的历史记录。我使用5个最重要的位来完成这项工作。事件第一次发生时,我想将其存储在第7位(最高有效位),第二次事件发生时,无论是真是假,我都想将最新的事件历史存储在第七位,之前在第7位元中的内容将滑到第6位。这将无限期地重复,将最新事件存储在第7位,并将所有内容向右滑动,但只保留5个事件</p>(第页)<p>这是我迄今为止所尝试的,但我认为我的概念还很遥远</p><p>编辑:for循环只是模拟存储历史的几个循环,所以以后不会使用</p><pre><code>无符号字符字节=0;布尔位7=真;布尔位6=假;布尔位5=真;布尔位4=真;布尔位3=假;//设置字节中的各个位字节|=(位7&lt;&lt;7);字节|=(位6&lt;&lt;6);字节|=(位5&lt;&lt;5);字节|=(位4&lt;&lt;4);字节|=(位3&lt;&lt;3);for(int i=0;i&lt;=4;i++){如果(i==0){字节=比特7&lt&书信电报;7;}如果(i==1){byte|=比特6&lt&书信电报;6;}如果(i==2){字节|=位5&lt&书信电报;5;}如果(i==3){字节|=位4&lt&书信电报;4;}如果(i==4){字节|=位3&lt&书信电报;三;}}</code></pre> https://stackoverflow.com/q/74854077 0 使用滑动窗口的阵列从1到n的所有K个连续子阵列的最大和 阿里安·莫塞尼 https://stackoverflow.com/users/20221248 2022-12-19年T17:41:58Z 2022-12-19T17:59:38Z <h1>这是我的代码,它对数组中给定的正数很好,但当其中一个输入数为负数时,它就不起作用了</h1><pre-class=“lang-c prettyprint override”><code>#include&lt;标准.h&gt;整型main(){整数n;扫描(&quot;%d,&amp;n);//获取数组长度整数arr[n];//长度为n的数组int sum[n];//求最大子数组的求和数组int最大值=-50;for(int i=0;i&lt;n;i++){扫描(&quot;%d;,&amp;arr[i]);//获取数组元素}对于(int k=1;k&lt;=n;k++){for(int i=0;i&lt;n;i++){总和[i]=0;对于(int j=0;j&lt;k;j++){sum[i]=sum[i]+arr[j+i];if(总和[i]&gt;最大值){最大值=总和[i];}}}printf(最大值%d);打印(&quot;\n;}}</code></pre><p>我认为最大值=-50可能是问题所在,但这是为了进行比较所以如果它们更大,就会成为新的最大值</p><p>第一个输入是数组的长度</p><p>输入示例:</p><预>47-51</pre><p>预期输出:</p><预>71056</pre><p>观察输出:</p><预>7101010</pre> https://stackoverflow.com/q/71707205 0 我可以手动设置tcp零窗口并删除吗? Http2inc公司 https://stackoverflow.com/users/18456199 2022-04-01T12:51:51Z 2022-04-01T12:55:09Z <p>我必须反复请求特定的目录。例如)<a href=“https://example.org/home/dir/aaa/11“rel=”nofollow noreferrer“>https://example.org/home/dir/aaa/11</a>如果http响应状态代码为200或其他,则会出现这种情况。如果200?从原始套接字读取数据;如果有404,则丢弃剩余的数据包。除价</p><pre><code>int bytes_received=SSL_read(SSL,response,1370);printf(&quot;%s\n接收:%d,响应,字节接收);if(strstr(response,HTTP1.1 200 OK)goto(specific behavior);else{drop;goto(sslwrite)};//转到第一个发送点,我想从这个点将剩余的数据包丢弃在内核缓冲区中。看跌期权(&quot;&quot);</code></pre><p>这是否可以通过手动修改内核、tcp结构或滑动窗口的大小来实现?否则呢?如果不能,那为什么?Thx公司</p>(第页) https://stackoverflow.com/q/4330532 0 发送方缓冲区中未确认数据的TCP表示 星号 https://stackoverflow.com/users/178033 2010年12月2日T00:23:08Z 2021-06-14T12:03:07Z <p>在TCP中保留未确认数据缓冲区(发送方缓冲区)的最佳方法是什么</p>(第页)<p>我在考虑保留数据本身和保留数据包(头+数据)</p>(第页)<p>如果我只保留数据字节而不是保留数据包,那么数据包的重新传输似乎会很困难</p>(第页)<p>语言:C</p> https://stackoverflow.com/q/32509150 0 MATLAB MEX程序优化滑动窗口函数 无错误 https://stackoverflow.com/users/3726703 2015年9月10日T18:24:58Z 2015年9月10日T18:24:58Z <p>我实现了一个mex函数,它创建了一个3D滑动窗口(<code>hxwxd</code>),该窗口逐像素滑动3D图像(<code>MxNxP</code>)。它起作用了,但速度没有我预期的快。我将mex函数的执行时间(测试图像<code>32x32x32</code>和滑动窗口<code>3x3x3</code>)与在标准MATLAB中开发的相同函数进行了比较,结果与我的想法正好相反</p>(第页)<pre><code>函数.mex ~=28秒函数.m~=24 s</code></pre><p>我使用了MSVC编译器,并使用以下选项编译了mex文件:</p><pre><code>mex-v-COPTIMFLAGS='-O3-DNDEBUG'滑动窗口3D.cpp</code></pre><p>所以我想我可能没有以最好的方式实现这个函数。这是mex函数:</p><pre><code>#include&lt;iostream&gt;#包括“mex.h”#包括“matrix.h”使用命名空间标准;void createSubWindow(mxArray*subWindow,const双*图像,const双*边界,const mwSize*图像尺寸,常量双窗口大小,int ii,int jj,int kk){const unsigned int p_lowerBound=ii-(int)borders[0];const unsigned int n_lowerBound=jj-(int)borders[1];const unsigned int n_upperBound=jj+(int)borders[1];const unsigned int m_lowerBound=kk-(int)borders[2];const unsigned int m_upperBound=kk+(int)borders[2];无符号int计数器=0;for(int m=m_lowerBound;m&lt;=m_upperBound,++m){for(int n=n_lowerBound;n&lt;=n_upperBound,++n){memcpy(mxGetPr(subWindow)+计数器,&amp;image[p_lowerBound+imageDimensions[0]*(n+imageDimensions[1]*m)],sizeof(double)*windowSize);counter+=(unsigned int)windowSize;}}}void mexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray*prhs[]){#定义O_IMAGE plhs[0]#定义I_IMAGE prhs[0]#定义I_WINDOWSIZE prhs[1]#定义I_FUN prhs[2]#定义I_OPTIONS prhs[3]//参数检查:if(nrhs&lt;1||nrhs&rgt;4)/*检查参数的数量*/mexErrMsgTxt(“输入参数数量错误”);否则如果(nlhs&gt;1)mexErrMsgTxt(“输出参数太多。”);//变量声明const mwSize*dim,*originalDim;mwSize ndim,*dimSubWindow;双窗口大小,*pad,*output_image;mxArray*imagePad,*padding,*windowShape,*mask,*subWindow,*temp,*inputFun[4],*inputPadFun[3];/*获取输入图像的尺寸*/ndim=mxGetNumberOfDimensions(I_IMAGE);原始尺寸=mx获取尺寸(I_IMAGE);//获取windowSize值窗口大小=*mxGetPr(I_windowSize);//填充输入矩阵pad=(双*)mxCalloc(ndim,sizeof(双));for(int i=0;i&lt;ndim;++i){pad[i]=地板(windowSize/2);}padding=mxCreateDoubleMatrix(ndim,1,mxREAL);memcpy(mxGetPr(填充),pad,sizeof(双)*ndim*1);inputPadFun[0]=常量广播&lt;mxArray*&gt;(I_IMAGE);inputPadFun[1]=常量广播&lt;mxArray*&gt;(填充);inputPadFun[2]=mxCreateString(“对称”);mexCallMATLAB(1,&imagePad,3,inputPadFun,“padarray”);/*获取填充图像的尺寸*/dim=mxGetDimensions(图像板);//选项结构字段windowShape=mxGetField(I_OPTIONS,0,“windowsShape”);mask=mxGetField(I_OPTIONS,0,“掩码”);//创建mxArray*子窗口dimSubWindow=(mwSize*)mxCalloc(ndim,sizeof(mwSize));对于(int i=0;i&lt;ndim;++i){dimSubWindow[i]=窗口大小;}subWindow=mxCreateNumericArray(ndim,dimSubWindow,mxDOUBLE_CLASS,mxREAL);//为feval函数准备输入inputFun[0]=常量广播&lt;mx阵列*&gt;(I_FUN);inputFun[2]=常量广播&lt;mxArray*&gt;(windowShape);inputFun[3]=常量广播&lt;mxArray*&gt;(面具);O_IMAGE=mxCreateNumericArray(ndim,originalDim,mxDOUBLE_CLASS,mxREAL);输出图像=mxGetPr(O_image);//在填充图像上滑动子窗口for(int i=pad[0];i&lt;dim[0]-pad[0];++i){对于(int j=pad[1];j&lt;dim[1]-pad[1];++j){for(int k=pad[2];k&lt;dim[2]-pad[2],++k){//函数来创建子窗口createSubWindow(subWindow,mxGetPr(imagePad),pad,dim,windowSize,i,j,k);inputFun[1]=常量广播&lt;mx阵列*&gt;(子窗口);mexCallMATLAB(1,&temp,4,inputFun,“feval”);output_image[(i-(int)pad[0])+originalDim[0]*((j-(int)pad[1])+originalDim[1]*(k-(int,pad[2]))]=*mxGetPr(temp);}}}//清理mxFree(衬垫);mxDestroyArray(填充);mxDestroyArray(inputPadFun[2]);mxDestroyArray(子窗口);mxDestroyArray(imagePad);}</code></pre><p>这里的.m函数执行相同的操作:</p><pre><code>函数[o_image]=滑动窗口(i_image,i_padSize,i_fun,i_options)%,i_windowShape,i_mask)%SLIDINGWINDOW此处显示此函数的摘要%此处有详细解释o_image=零(大小(i _image,1)、大小(i _ image,2)、大小;i_image=焊盘阵列(i_image,i_padSize,'symmetric');i_padSize=数字2单元格(i_padSize);[m,n,p]=交易(i_padSize{:});[行,列,深度]=大小(i_image);对于i=m+1:行-m对于j=n+1:col-n对于h=p+1:深度pii=i-m;jj=j-n;hh=h-p;温度=i _图像(i-m:i+m,j-n:j+n,h-p:h+p);o_image(ii,jj,hh)=feval(i_fun,temp,i_options.windowShape,i_options.mask);结束结束结束结束</code></pre><p>你知道为什么.mex函数比.m函数慢吗?你认为有更好的方法在墨西哥湾实现滑动窗口吗?非常感谢您的帮助</p>(第页) https://stackoverflow.com/q/32484956 1 MATLAB mexCallMatlab导致崩溃 无错误 https://stackoverflow.com/users/37260703 2015年9月9日T16:34:37Z 2015年9月9日T19:58:01Z <p>我正在尝试在mex中开发一个函数。该函数的目的应该是将一个窗口滑动到3D图像上,并在窗口内应用一些函数。目前我被卡住了,因为当算法到达<code>padarray函数的调用时,MATLAB崩溃了</p>(第页)<p>到目前为止,我编写了这些代码行</p><pre><code>#include&lt;iostream&gt;#包括“mex.h”#包括“matrix.h”使用命名空间标准;void mexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray*prhs[]){#定义O_IMAGE plhs[0]#定义I_IMAGE prhs[0]#定义I_PADSIZE prhs[1]#定义I_FUN prhs[2]#定义I_OPTION prhs[3]//参数检查:if(nrhs&lt;1||nrhs&rgt;4)/*检查参数的数量*/mexErrMsgTxt(“输入参数数量错误”);else if(nlhs&gt;1)mexErrMsgTxt(“输出参数太多。”);//变量声明static const char padding[]=“symmetric”;const char*windowShape;const mwSize*dim;mwSize*dimPad;mwSize ndim;双*pad,*windowSize,*thetaStep,*phiStep;mxArray*inputFun[4],*inpupPadFun[3],*input_image,*imagePad,*output_image;/*获取输入图像的尺寸*/ndim=mxGetNumberOfDimensions(I_IMAGE);dim=mx获取尺寸(I_IMAGE);/*创建填充图像的尺寸*/dimPad=(mwSize*)mxCalloc(ndim,sizeof(mwSize));dimPad=(mwSize*)memcpy((void*)dimPad,(voidx)dim,ndim*sizeof(mwSize));pad=mxGetPr(I_PADSIZE);对于(int i=0;i&lt;ndim;++i){dimPad[i]+=2*pad[i];}/*获取指向输入图像的指针*/input_image=(mxArray*)mxGetData(I_image);/*创建输出图像*/O_IMAGE=mxCreateNumericArray(ndim,dim,mxDOUBLE_CLASS,mxREAL);output_image=(mxArray*)mxGetData(O_image);/*创建填充图像*/imagePad=mxCreateNumericArray(ndim,dimPad,mxDOUBLE_CLASS,mxREAL);//填充输入矩阵inputPadFun[0]=输入图像;inputPadFun[1]=(mxArray*)(pad);inputPadFun[2]=(mxArray*)(填充);mexCallMATLAB(1,&imagePad,3,inputPadFun,“padarray”);//清理mxFree(dimPad);mxDestroyArray(imagePad);}</code></pre><p>我在<code>mexCallMATLAB</code>上检查了输入和输出图像的尺寸,结果似乎是正确的。我真的不明白我做错了什么。非常感谢您的帮助</p>(第页) https://stackoverflow.com/q/29463600 1 如何使用标准C/C++“UNIX计时器”为滑动窗口数据传输协议创建一系列数据包超时处理程序 ztforter公司 https://stackoverflow.com/users/2577772 2015年4月5日23:54:14Z 2015年4月6日02时56分52秒 <p>我正在为一个学校项目实现滑动窗口数据传输协议。在通过套接字发送每个数据包后,必须在一定的时间内收到确认。如果没有,则应该重新发送数据包(这是回调函数中的部分),并且应该重置其计时器</p>(第页)<p>我们被鼓励使用“UNIX计时器”实现算法的这一部分。“UNIX定时器”是指timer_create()、setitimer()、alarm(),还是不是指这些</p>(第页)<p>如果我使用一个使用信号处理程序作为超时处理程序函数的函数,问题将是告诉处理程序要重新发送哪个数据包。我可以保存一个有序的、等待确认的全局数据包列表,以便从信号处理程序访问。然而,我听说在修改数据结构时可以调用信号处理程序,使其处于损坏状态。到这里最好的方式是什么</p>(第页) https://stackoverflow.com/q/22284001 0 接收器在滑动窗口协议中区分旧数据包和新数据包(选择性重复) 马SMith https://stackoverflow.com/users/1789176 2014年3月9日T15:18:11Z 2014年3月9日T15:26:33Z <p>假设发送方和接收方有一个16大小的缓冲区和一个7大小的窗口</p>(第页)<p>换句话说,每一侧都有一个缓冲器,一个阵列,它们可以在其中存储16帧。每个帧都有一个适合16帧缓冲区(数组中的索引)的id。接收器得到一个窗口,在任何给定的时间内,只允许以任何顺序接受7帧。当缓冲区中最旧的帧被填满时,窗口将滑动一个</p>(第页)<p>我现在的问题是,比方说,如果一帧在路上丢失了,但不知何故又回来得太晚了。接收器收到它太晚了,以至于它实际上填满了帧缓冲区的下一个圆圈</p>(第页)<ol><li>发送方发送帧:0、1、2、3、4、5、6、7</li><li>接收器获取帧,并发送一个ACK,表示已获得全部7帧(或每个帧)</li><li>发送方在第0帧获得超时,然后重新发送</li><li>发送方收到最多7个帧的ACK,因此它发送下一帧:8、9、10、11、12、13、14</li><li>接收器收到以下数据包:8、9、10、11、12、13、14。它会发送一个ACK,表示已经获得了它们,并为以下内容打开缓冲区:15、0、1、2、3、4、5、6</li><li>接收方获取发送方因超时而发送的旧帧0。接收方认为数据包是合法的,并将其存储</li></ol><p>如何避免第6步中发生的情况?我应该发送整个窗口的CRC吗?CRC并不完美,因此可能仍然存在问题</p>(第页)<p>我目前正在C中的UDP套接字上执行此操作,因此使用了C标记</p>(第页) https://stackoverflow.com/q/16123576 0 c-提取注释和字符串-已编辑 迈克·韦伯 https://stackoverflow.com/users/2009597 2013年4月20日18:08:47Z 2013年4月20日20:02:49Z <p>这是我之前的一个问题的一个经过编辑、更正、更具体的版本。所以我正在做一个作业,我们必须使用一个滑动窗口打印来自stdin的输入文件中的注释和字符串。我离得很近,但缺少了一些东西。下面是我的代码、输入、当前输出和正确的输出。<code>//</code>注释和忽略字符是有效的。我不太确定字符串和/**/注释中的问题。如果不找到<code>*/</code>,我就无法去掉开头的星号。感谢任何能够提供帮助的人</p>(第页)<p>代码:</p><pre><code>#include&lt;标准.h&gt;typedef枚举{ 首字母,评论,字符串,烧焦,CPP意见}极值;整型main(){int c,c1=0,c2=0;极值状态=初始;极值next=初始值;而(1){开关(状态){case Initial:下一个=((c2=='*'和c1=='/')?注释:(c2=='\“')?字符串:(c2=='/'&amp;c1=='/')?字符:(c2-='\')?CPPComment:首字母);break;案例注释:下一个=((c2=='/'&amp;c1=='*')?首字母:注释);断裂;case String:下一个=((c2=='\“'&amp;&c1!='\\')?首字母:String);break;case Char:next=((c2=='\n')?首字母:Char);断裂;案例CPPComment:下一步=((c2=='\''&amp;&amp!c1!='\\')?首字母:CPPComment);断裂;默认值:next=state;}if(状态==注释){如果(c1=='*'){如果(c2!=“/”)putchar(c1);其他的putchar('\n');}其他的putchar(c1);}else if(state==字符串){if(c2!='\“'||(c2=='\”'&amp;c1!='\\'))putchar(c2);}else if(state==CPPComment){putchar(c2);}c=获取字符();如果(c&lt;0)中断;c1=c2;c2=c;//滑动窗口//printf(“%i”,状态);状态=下一个;//c2是当前输入字节,c1是前一个输入字节}返回0;}</code></pre><p>输入:</p><pre><code>/*识别“…”否则请参见“作为字符串的开头:*/int c='\“',d='\'',e='\012';//注释行3/*识别“…”,否则请参阅此处的注释:*/char s[]=“abc/*不是注释*/efg\”ZZ\'“;char t[]=“ABC//非注释//EFG\x012\/\/”;char*p=“”//int d='/*';//注释行13/*/*//**//*Z轴*//***//****//**A类**/</code></pre><p>我的输出:</p><pre><code>*识别“…”否则请参见“作为字符串的开头:注释行3*识别“…”,否则请参阅此处的注释:abc/*非注释*/efg\ZZ\'“abc//非注释//efg\x012\/\/”注释行13**Z*******A类*</code></pre><p>正确输出:</p><pre><code>识别“…”否则请参见“作为字符串的开头:注释行3识别“…”,否则请参阅此处的注释:abc/*不是注释*/efg\“ZZ\'ABC//非注释//EFG\x012\/\/注释行13/Z轴****A类*</code></pre> https://stackoverflow.com/q/16086617 5 使用不带嵌套while循环的滑动窗口删除注释 迈克·韦伯 https://stackoverflow.com/users/2009597 2013年4月18日下午5:08:38Z 2013年4月19日22:17:28Z <p>我试图用c代码从c文件中删除注释和字符串。对于这些例子,我只会坚持评论。我有一个滑动窗口,所以在任何给定时刻,我只有字符<code>n和<code>n-1。我试图找出一种算法,如果可能的话,不使用嵌套的<code>whiles</code>,但我需要一种算法来通过输入<code>getchar</code>。我的第一个想法是通过查找when<code>n=*和(n-1)=/</code>,然后通过直到<code>n=/和(n-1)=*</code>,但考虑到这是嵌套的,而我觉得它效率很低。如果必须的话,我可以这样做,但我想知道是否有人有更好的解决方案</p>(第页) https://stackoverflow.com/q/15194405 1 何时用选择性重复ARQ重新发送滑动窗口丢失的ACK 斯蒂格 https://stackoverflow.com/users/817774 2013年3月4日T04:08:04Z 2013年3月5日19:04:03Z <p>您可能知道,我对滑动窗口和选择性重复ARQ实现有点困惑。如果接收方为数据包发送ACK,而ACK丢失,发送方会怎么做?发送方是否继续,直到没有ACK的数据文件成为窗口的底部,然后处理它?或者发送方会等到收到ACK后再继续吗</p>(第页) https://stackoverflow.com/q/9821327 0 基于滑动窗口协议的数据转换 cpp忍者 https://stackoverflow.com/users/1202748 2012年3月22日t11:24:42Z 2012年3月22日12:00:20Z <p>我遇到的问题有点特别</p>(第页)<p>我必须在链接上用C语言实现一个滑动窗口协议。我的sender.c文件接收速度、延迟和丢失或损坏文件的百分比作为参数。数据通过链接发送。由于这是一项学校作业,我不知道链接的实现细节,但是,由于发送方和接收方需要使用端口和ip初始化链接,我猜他们使用的是套接字。无论如何,我正在尝试向接收器发送连接参数,以便将其用于超时和控制流。我创建数据帧有效载荷,该有效载荷发送代表速度和延迟的2个int,使用:</p><p><code>int s=(int)(*速度-“0”);int d=(int)(*延迟-“0”);sprintf(t.payload,“%d%d”,s,d)</代码></p><p>当我在发送方文件中打印s和d变量时,结果是1,1,这是正确的。之后,我将生成的有效载荷桨发送到接收器,其中有效载荷[0]被分配给另一个称为速度的int变量,有效载荷[1]被分配给另一个称为延迟的int变量。问题是,这里的值是49,而不是应该的值。我尝试在它们上使用atoi()函数,但当我这样做时,延迟成功地转换为1,而速度转换为11,这毫无意义。我尝试了很多不同的方法来实现它,将它们作为字符发送并在接收端进行转换也无济于事</p>(第页)<p>有什么主意吗</p>(第页)<p>附言:很抱歉,这是一个巨大的帖子,还有我的英语错误</p>(第页)