vscode ssh连接不上服务器的各种解决办法

超时 可能是因为服务器太慢,等太久而报错,可以将超时时间设置长一些。步骤如下图,我将超时时间改成了60(或者更大,有时候服务器巨卡)。 参考: https://www.jianshu.com/p/0a995acf1a2e 超时? 删除自己电脑用户目录下的.ssh文件夹中的knownhosts文件,mac需要command+shift+.显示所有文件。 超时? 删除服务器home目录的.vscode-server文件夹,重新连接。

C51 汇编语言冒泡排序的实现

1.整体思路 冒泡排序C语言代码如下: void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 - i; j++) if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } 为实现此程序,可以利用两个寄存器充当i和j,对于i的上限的判断,直接利用CJNE指令判断当i不为4(预存5个数字)的时候跳转继续排序。对于j的上限,由于8051单片机没有相等时转移的指令,可以利用减法所得是否为0来判断j是否到达上限,以及对j的清空。 循环过程内,利用MOVX指令配合A和R0以及DPTR实现数据的读取。取得的两数据间的大小比较用减法指令实现,利用进位标志位判断是否需要进行交换。对于从大到小排和从小到大排的切换在同一个子程序内实现,只需利用JB和JNB指令判断7AH的取值(7AH的值决定是正序排序还是倒序排序)以决定是否需要对取得的两个数据进行交换。以此实现两种排序方式的切换。 程序源码: ORG 0000H LJMP MAIN ORG 2000H MAIN: SRC DATA 30H ;写入数字的起始地址 DEST XDATA 2000H ;逆序拷贝数字的起始地址 NUM DATA 20H ;写入的数字的数量的地址 CLR 20H ;初值为0个数字 MOV 10H, #03H MOV 11H, #04H MOV 12H, #01H MOV 13H, #02H MOV 14H, #05H MOV 15H, #24H ;预存的数字,其中24H为结束符$ MOV R0, #10H MOV R1, #SRC ;定位至SRC内存 MOV R2, #0H ;定义i=0 MOV R3, #0H ;定义j=0 ACALL Write_In ;跳转至写入模块 MOV DPTR, #DEST ;将外部存储器地址传入DPTR ACALL Write_Out ;跳转至拷贝模块 CLR 7AH ;从小到大排序 MOV DPTR, #DEST ;回溯DPTR ACALL ORDERS ;冒泡排序子程序 SETB 7AH ;从大到小排序 ACALL ORDERS ;冒泡排序子程序 SJMP $ Write_In: MOV A, @R0 MOV @R1, A ;复制预存的数字到SRC所在的地址中 INC NUM ;存储的数字的数量加1 INC R0 INC R1 ;R1(#SRC)加1 CJNE @R0, #24H, Write_In ;未捕捉到结束符就继续写入数字 RET Write_Out: DEC R1 ;回到$字符的上一个数字的地址 DEC NUM MOV A, @R1 MOVX @DPTR, A ;拷贝回片外地址 INC DPTR ;地址加1 MOV R0, NUM CJNE R0, #0H, Write_Out ;剩余数字的数量不为0就继续拷贝 RET ORDERS: ;冒泡排序 MOV A, #05H CLR C SUBB A, R2 DEC A CLR C SUBB A, R3 ;A = j-(5-i-1) CJNE A, #0H, JPLUS ;若j=5-i-1则清空j MOV R3, #0H ;清空J MOV DPTR, #DEST ;回溯DPTR INC R2 ;i++ CJNE R2, #04H, ORDERS ;i不为4就继续排序 MOV R2, #0H ;清空i,为从高到低排序做准备 RET JPLUS: MOVX A, @DPTR MOV R0, A INC DPTR INC R3 ;J++ MOVX A, @DPTR JNB 7AH, UpsideDown ;若7AH等于0,则从低到高排序 XCH A, R0 ;交换a[J]与a[J+1] MOV R4, A ;保护A内的数据 UpsideDown: CLR C SUBB A, R0 JC SWAP1 ;若a[J]>a[J+1]则转移,即判断进位标志位 SJMP ORDERS SWAP1: JNB 7AH, JUMP ;若7AH等于0则跳过 MOV A, R4 MOV R0, A ;若7AH等于1,则需恢复A与R0 JUMP: MOVX A, @DPTR XCH A, R0 ;交换a[J]与a[J+1] MOVX @DPTR, A DEC DPL ;DPTR低位减一 MOV A, R0 MOVX @DPTR, A ;将交换完的数据传回片外RAM INC DPTR ;恢复减去的DPTR SJMP ORDERS 实现效果

硕士研究生论文查重技巧

根据我国学位条理规定,硕士研究生修满一定的学分,通过论文答辩后,方可授予硕士学位。因此,硕士论文对于硕士研究生来说,是最重要的工作,一般要经过至少一年的专门研究和撰写过程:首先是研究题目的选择,再通过艰苦的研究,最后将论文撰写出来,经同行专家评审后参加答辩,答辩通过后,经学校学术委员会审批后,方可授予硕士学位。硕士论文不仅是研究生研究工作的总结,而且反映了作者对本专业领域了解的程度和基础知识掌握的深度,反映了作者外语水平、阅读能力、科研能力,写作能力等综合能力,所以,硕士论文可以比较全面的反映研究生的状况。不少研究生学习不错,课题作的也不错,但写不出来,常见的论文缺陷是重点不突出、条理不清楚、逻辑不严密、写法不规范,说不清楚要说的内容,影响了论文的质量,也不能全面反映作者的水平。研究生一定要重视论文的写作质量,准确如实的将自己的研究工作反映出来。根据长期以来指导硕士论文的经验,我总结出来撰写硕士论文的基本要求,供研究生同学参考,论文完成后可以接受权威的在线论文查重查看效果。 一、 硕士论文的目标 研究生在写论文前应该明确两个问题,一是为什么要写论文?二是写给谁看?前边我们已经简略的说明了硕士论文是自己所从事的研究工作的总结,不仅将自己的成果公布于众,而且要全面反映自己的基础知识和科研能力。既然硕士论文是公开的,阅读论文读者群基本是对主题感兴趣者,当然会包括三部分人:一部分是稍微有一点该专业知识的读者,他们可能是想泛泛的了解这方面的研究动态,只是当作学习对待;第二部分读者是对该专业领域比较熟悉,或许希望得到一些启发和借鉴,作为参考资料来对待,不会深究;第三部分读者是对该研究领域非常熟悉,或许希望继续这方面的研究,这部分读者会对论文的细节非常注意,通常会深究,甚至会重复推导原理和实验过程。 明确了硕士论文的两个作用,作者在构思论文框架时,就要考虑使论文的确能满足这两个需要。 1.论文的内容要能将自己所作的研究工作,特别是创新点和创造性成果确切反映出来。要说的清楚,且实事求是,还要能反映出作者对本学科领域了解的程度,包括基础知识、专门知识、国内外水平和状况等,通过条理性、逻辑性、思路等反映自己的科研能力等。硕士论文不同于在杂志上发表的论文,要有一定的篇幅,否则,难以全面反映作者的水平和能力。因此,作者在写论文的过程中要刻意的将水平和能力充分显露出来。 2.论文既然要面对不同层次的读者,所以,作者在写论文时,要注意最好从简单和容易理解处入手,逐渐进入复杂的原理和公式推导,要将问题用简明的语言叙述清楚,条理性要强,可以多采用通俗的词语,容易理解的图表。所有这些的目的就是要让三部分读者都能看懂,并有所收获。特别是有关应用技术研究的论文,要兼顾不同的读者,不要故意将简单问题复杂化,让大部分人看不懂。有人也许以为,越是别人看不懂,说明水平越高,实际上,能将复杂问题用简单语言描述清楚,才说明作者自己确实弄清楚了,心中是有数的。对于不熟悉研究领域的读者通过阅读论文,至少明白研究什么东西,可以得到类似于科普一样的培训。对于比较熟悉研究领域的读者,明白其原理、思路,至少知道有多少有价值的内容,对自己的研究起到了一定的参考作用。对于本领域的专家来说,通过论文可以查看作者对本专业领域的了解程度,有无意义,在原理、方法上有无创新,有无潜在的应用价值。论文作者应该针对这样的目标,设计论文的结构和写法。 二、硕士论文的一般结构 序言部分 相关知识和背景引导 主要的研究工作 结果验证 结论 提出拟研究的问题,整个论文的引子和概括,与结论部分呼应。 采用导引的方式,将论文所要用到的相关知识介绍出来,为自己的研究工作铺垫。 作者的研究工作的介绍,可能分为数个章节,重点介绍自己独立做的工作,主次要分明,条理性要强,对于论文的主要结论一般应有实际验证效果。可能是演示系统、或实际例子、或与公认结果的比较等。 对于论文的总结,应该与序言部分再呼应,简要说明论文的重要内容,特别是创造性工作,主要的结论,还有那些需要改进的地方。 硕士论文一般至少应包括以下五个部分: 1.序言的写法 读者阅读论文首先会从序言开始,序言部分应该回答: 为什么要研究该课题 作者一定要回答为什么要开展该课题的研究,就是需求的问题。不是为了研究而研究,而是为了理论探索、或生产需要解决某些问题而进行研究,应说明研究工作是有意义的,理由要充分。很多研究生的论文一上来用很大的篇幅讲述自己做了这样那样的研究工作,读者不知道这些研究工作是否需要,大大降低了论文的价值。 目前国内外的研究状况如何,现有的研究有什么优点和缺点 有的研究工作,尽管实际需要,但已经有了现成的结果,不需要重新研究,这类课题是没有意义的。所以,必须对国内外的状况进行全面的了解,进展如何,能否满足实际的需要。要分析现有研究成果或方法的优点和缺点,重点放在对其不足的分析上面,描述他人的不足正是为了显示自己研究工作的意义。分析他人不足时,可引出其原理、方法可能存在的问题,为自己的研究工作作好铺垫。当然,在描述他人工作不足时,一定要客观、实事求是,不要引起纠纷。 作者的研究有什么特别的地方,准备采用什么策略 主要是针对他人研究的不足展开自己的研究工作,或者补充、或者完善、或者改进、或者创造等,一定要说出作者的研究工作与别人的研究工作的不同。可以简略的介绍作者研究工作所采用的原理和方法。要作到这一点,首先对他人工作有充分的了解,要有针对性。真正熟悉该研究领域的研究人员,通过对论文所采用的原理、方法的了解,大体上可以对论文的结果作出初步的判断。读者在深入阅读论文时,就会有一定的思想准备,那些是最关心的,那些是要重点了解的。 简要说明论文的框架结构 介绍各个章节的内容是什么,读者会在脑海对论文形成粗略的框架结构,有利于读者选择重点。极为简要的阐明本文的创新性工作, 主要目的还是给读者加深印象,与文章的结尾相呼应。 总之,序言是论文非常重要的部分,有的研究生不太注重这部分内容,认为只要将自己的研究工作阐述清楚就行,实际上,专家从序言部分就可大体判断出作者的基础知识、专业知识和了解本研究领域的程度。 2.相关知识和背景导引 论文涉及到不少其他学科和专业的知识,需要预先作些介绍。在介绍相关知识时,应该重点介绍论文中所要用到的部分。例如,在介绍器件时,论文中将要用到的参数、性能等要重点介绍。有的论文在这一部分可能要介绍自己的研究工作,两者尽量能合理的结合在一起,做到自然合理。所谓的背景导引就是通过所要用到的相关知识引导到自己的研究工作上来。 3. 论文的主要研究工作 这一部分是重点内容,作者要将自己的研究内容阐述清楚,可能会分为2~3个章节,划分章节时,根据研究工作性质来定,最好根据模块来划分,模块的划分可以按任务划分,可以按性质划分,也可以按结构划分。例如作者研究的是一个测试系统,就可按结构划分为硬件模块和软件模块,在每个模块中又有若干个子模块,硬件中涉及器件选择、结构涉及等,软件涉及结构设计和算法设计等。在介绍自己研究工作过程中,有的部分是利用现成技术和结果的,有的是自己设计、推导或创造的,一定要描述清楚。不少论文对这一部分介绍的很详细,分不清那些工作是作者做的,那些工作是引用他人的。也看不出来特色是什么,能解决什么问题,该细的部分粗略带过,该简要的地方太过冗长。 一般作者至少要用两个章节来介绍自己的研究工作,包括原理介绍、定理、公式的证明推导等。有的作者可能会用到三个章节完成这部分工作,但不能更多。否则,一方面会使论文太分散,另一方面,作者在一年多的研究时间内也很难做更多的工作。 在这几个章节的结尾处,要将自己独立完成的作以工作总结,增加读者的印象: 首先要把思路交代清楚,为了解决什么问题,才用怎样的思路; 要把概念阐述明白; 推导过程要符合逻辑; 内容安排要条理清楚。 读者通过阅读这一部分内容,知道作者想解决什么问题,怎样去解决,能否解决,作者要围绕这个目标去写论文。 4. 验证结果 我们鼓励研究生做课题时要结合实际(纯理论研究除外),最好能完整的参与课题的全过程,所以最后的结果应和实际对比,接受实际检验,鼓励学生完成实验验证,要通过对比数据说明研究成果的实际效用。充实的实验验证数据无疑增加了论文的价值,也可给读者提供应用的范例。在这一部分应该有分析和结论,那怕是不十分完美的验证结果也是有意义的,因为科学研究本身就是探讨的过程。 目前,许多研究工作离不开计算机,用来模拟、仿真、或数据处理等。所以,验证系统是论文的重要组成部分。 5.结论部分 作为论文的结尾,对论文起总结作用,通过阅读全文,读者基本了解了作者所做的工作,结尾主要是再给读者一个完整的印象,所以,要将主要内容再提纲携领的复述一下,特别要注明论文的创新点。同时,要自己指出研究工作还需要改进的地方,或者今后继续努力的方向。实际上,专家在阅读完论文后,可能已经在脑子里对论文的内容、意义、价值、不足有了基本的印象,通过作者自己的叙述,说明作者对本研究工作还是比较透彻的,成绩和不足是心中有数的。另外,结尾部分和序言部分应该有一定的对应性,作者对结尾部分也应充分重视,不要给读者匆匆收场的感觉。就象一顿宴席,开头、中间过程都很丰盛,最后一道果盘清淡乏味。 以上只是硕士论文的一般结构,由于研究的领域不同,专业特点不同,论文的写法和结构上也不尽相同。另外,各学校对硕士论文可能会有自己的规定,但基本的内容和要求一般差别不大。 三、硕士论文撰写时应该注意的问题 1.硕士生在动手撰写学位论文之前,首先要在头脑里详细构思论文的整体结构,多参考其他的硕士论文的写法,列出详细的提纲,并尽可能的详细,这样在动笔开始写作以后就不会脱题。 2.建议作者在序言部分参考外文期刊所发表的论文的序言部分,要充分认识到序言部分的难度和重要性。因为每个研究者对于自己的研究技术方案、技术路线、实验过程、技术成果等很熟悉,心中一般都有数,容易表现出来。而序言部分要概括、总结和分析他人的工作,还要论述自己的观点,难度相当大。国内刊物发表的论文,一般不太注重序言部分,学位论文的序言也是相互搬迁的较多。因此,要提高论文质量和水平,一定要在认真参考外文期刊文章的基础上,充分思考,可以先尽量写详细,然后根据需要再精简。不要开始简单,后来再修修补补,就难以形成系统性。 3.硕士论文要尽可能多的利用图形、表格、公式、数据表达意思,说明原理、方案等,有助于读者理解内容。 4.论文在评论他人的研究工作时,一定要客观,避免引起纠纷。特别是谈论其不足和缺点时,一定要慎重,没有把握时,且不可凭感觉或印象随意发表评论。 5.参考文献中列出的文献,应尽可能的标注在论文中。一方面尊重他人成果,另一方面,反映作者阅读的文献丰富,理论有根据。有的参考文献可能是间接引用,就不一定标注出来。注意参考文献尽量选用最新发表的文章和最新出版的著作。有的研究生不注意这个问题,选用的参考文献很多是几十年前的文章和著作。科学技术发展日新月异,应该随时掌握和了解最新的知识。不少科学家的习惯是看论文时,先看参考文献,如果参考文献太陈旧,说明作者掌握和参考的知识不是最新的,就可能怀疑论文研究内容是否新颖。所以,参考文献在一定程度上反映了作者知识水平的新旧程度,硕士论文要注意参考文献的写法。 6.一般对硕士论文的创新性没有特别的要求,但特点总应该有的,即使利用现成的方法、原理、工艺解决了生产或研究中的某个问题,也算有实用的特点。作者应尽力将研究工作的特点或创新点暴露给读者,有的研究生为了显示论文的重要性,也不管是不是特点和创新点,列出一大串的特点和创新点,而有的根本不是特点和创新点。实际上,作为硕士论文,只要选题有一定的意义和工作量,作者能够独立完成,没有错误,有特点就符合基本要求,创新点或特点有2~3个就相当不错了。所以,作者不要刻意去寻找那么多的特点和创新点。真正的创新点哪怕有一个也是可以的,关键是作者一定要弄清楚真正的特点和创新点。 7.论文摘要是论文的意义、内容、特点的高度概括,500字左右的摘要应该简明扼要。 四、 结 束 语 随着硕士研究生规模的迅速扩张,每年毕业的研究生越来越多,一个硕士导师指导几十个研究生的情况在很多高校(甚至知名高校)存在,社会舆论对研究生的培养质量已经提出了质疑,特别是论文的抄袭现象时有报道,垃圾论文也确实存在,这种状况的存在对高校是很大的压力,保证研究生的培养质量的确应引起重视。硕士论文是研究生质量的最主要的表现形式,做好研究工作是基础,没有高质量的研究,就不会有高质量的论文。但不少研究生课题做的不错,而论文写的很糟糕。不少学生急功近利,毛糙浮躁。我们根据多年指导研究生和从事科研的经验和体会,提醒研究生同学在撰写论文中应该注意的事项,希望对他们有所帮助。

毕业设计——基于多种方法实现的ORL数据集人脸识别

一、数据集介绍 ORL人脸库(Olivetti Research Laboratory人脸数据库),诞生于英国剑桥Olivetti实验室。 ORL人脸数据库由该实验室从1992年4月到1994年4月期间拍摄的一系列人脸图像组成,共有40个不同年龄、不同性别和不同种族的对象。每个人10幅图像共计400幅灰度图像组成,图像尺寸是92×112,图像背景为黑色。其中人脸部分表情和细节均有变化,例如笑与不笑、眼睛睁着或闭着,戴或不戴眼镜等,人脸姿态也有变化,其深度旋转和平面旋转可达20度,人脸尺寸也有最多10%的变化。该库是目前使用最广泛的标准人脸数据库,特别是刚从事人脸识别研究的学生和初学者,研究ORL人脸库是个很好的开始(见图一)。 图一、ORL人脸识别 二、实验 五种方法实现orl人脸识别 1.bp神经网络(未降维) pca+bp神经网络 采用ORL人脸数据库,先在400张人脸中选取一部分作为训练样本集(前5张训练,后5张测试),对其进行PCA降维,形成特征脸子空间;再将剩余的人脸作为检测集,将其投影到特征脸子空间;采用BP神经网络对训练样本集进行训练,然后再用检测集进行识别率测试 1、BP神经网络识别中存在的问题 在采用BP神经网络进行训练过程中,由于可调参数过多,会对识别率产生一定的影响,故在设计中针对可调参数反复进行测试,对比来寻找最快,最优识别的网络参数。下面列出可能影响网络性能的各个参数: (1)BP网络训练函数的选取 (2)BP网络学习速率,迭代次数,误差,梯度的设定 (3)PCA主成分比例的选取 (4)BP网络隐层节点数的选取 (5)训练集和测试集容量的选取 2、网络训练函数的选取 当采用一般的基于梯度下降的BP网络进行训练时,由于固定的学习速率,有限的迭代次数,较小的设定误差和截止梯度,致使网路有较长的训练时间,而且还不一定能达到要求的精度,这会大大影响识别率。 经过多次训练函数的尝试,最终选择带有动量相的自适应学习率的训练优化器AdagradOptimizer。下面表格显示出了三种训练函数在训练速度上的对比: 从上表可以看出: (1)尽管采用添加动量相的BP算法,由于学习速率固定,网络的训练速度仍旧很慢。如果盲目的增加学习速率,又会造成网络在某处的波动。因此,训练函数采用AdagradOptimizer学习速率的算法较为合适。 3、BP网络性能参数的设定 上表中,为了缩短运行时间,通过加大截止误差和设定迭代次数的方法来加快程序运行,这样会在一定程度上降低识别率。当采用AdagradOptimizer的训练函数后,网络运行速度加快,将截止误差设定为0,迭代次数仍设定为10000,发现每次促使训练停止的为默认的截止梯度。此时的网络误差已足够小。 3.小波变换+pca+bp 术语(中英对照): 尺度函数 : scaling function (在一些文档中又称为父函数 father wavelet ) 小波函数 : wavelet function(在一些文档中又称为母函数 mother wavelet) 连续的小波变换 :CWT 离散的小波变换 :DWT 小波变换的基本知识 不同的小波基函数,是由同一个基本小波函数经缩放和平移生成的。 小波变换是将原始图像与小波基函数以及尺度函数进行内积运算,所以一个尺度函数和一个小波基函数就可以确定一个小波变换 小波变换后低频分量 pywt.wavedec2(data, wavelet, mode=’symmetric’, level=None, axes=(-2, -1)) data: 输入的数据 wavelet:小波基 level: 尺度(要变换多少层) return: 返回的值要注意,每一层的高频都是包含在一个tuple中,例如三层的话返回为 [cA3, (cH3, cV3, cD3), (cH2, cV2, cD2), (cH1, cV1, cD1)]

Vue系列之指令 v-once

文章の目录 1、介绍2、用法3、作用写在最后 1、介绍 v-once 指令可以用于任何元素或组件,并在绑定数据后,将其内容标记为一次性的,不再响应数据的更新。v-once 是一个不需要表达式的指令。 2、用法 <span v-once>{{ message }}</span> 在上面的示例中,v-once 指令应用在 <span> 元素上,并绑定了 message 数据。一旦 message 数据的值发生变化,被标记为 v-once 的 <span> 元素将保持原始的内容,不再更新。 3、作用 它定义的元素或组件只渲染一次,包括元素或组件的所有子节点,可以用于性能优化,减少不必要的重复渲染。 写在最后 如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*// 如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L;~~~///(^v^)\\\~~~ 谢谢各位读者们啦(^_^)∠※!!!

完整的vite + ts + vue3项目,克隆就能用,傻瓜式保姆教程(第二篇)

目录 前言 一、基础知识准备 1.1 接口请求 (本篇重点内容) 1.1.1 Fetch API 1.1.2 XMLHttpRequest 1.1.3 axios(推荐) 1.1.4 EventSource 1.1.5 WebSocket 1.2 ts 类型定义 (本篇内容) 1.3 svg 雪碧图(本篇内容) 1.4 i18n 多语言(本篇内容) 1.5 公共工具方法(非本篇内容) 1.5.1 本地存储相关 a)cookie b)localStorage 1.5.2 日期相关 a)格式化和计算 b)时差问题 1.5.3 设备区分 a) userAgent b)h5 唤起 APP 1.5.4 判断 js 类型 (is) 1.5.5 上传文件 1.5.6 下载文件 a)浏览器能预览的文件 b)浏览器不能预览的文件 1.5.7 防抖和节流 1.6 部署 小结 二、增加接口请求模块 2.1 使用 axios 模块 2.1.1 安装 axios 模块

vue父组件的watch比子组件的watch先触发

在Vue中,父组件和子组件的watch触发顺序并不固定,它们会根据数据更新的顺序和组件渲染的流程进行。正常情况下 : 当父组件的数据发生变化时,它会先触发自身的watch。然后,如果这个变化影响到了传递给子组件的props,那么子组件会接收到新的props,并且也会触发自身的watch。 然而,这种顺序并不是绝对的,因为Vue内部的更新过程是异步的,特别是在使用了Vue的优化策略(如异步更新队列)时。这意味着即使父组件的watch先于子组件执行,也有可能在实际DOM更新时,子组件的watch先被执行。 解决方案:在子组件定义一个方法直接用 props.传过来的值 ,在父组件中传递的值发生变化的时候直接调用子组件中的这个方法即可, 示例: 子组件: 父组件 

Codeforces1716 D. Chip Move(dp,步长大于1的前缀和优化)

题意: 解法: 由于第i步必须走k-i+1的倍数, 因此k步至少走1+2+3+....+k=k*(k+1)/2步 所以走的步数是O(sq)级别的. 令d[i][j]表示i步走到j的方案数 转移方程: 令k=k+i-1 d[i][j]=d[i-1][j-t]+d[i-1][j-t*2].... 这里d[i-1][j-k*t]可以用前缀和优化. 预处理一个sum[j]=d[i-1][j]+sum[j-t]即可. 复杂度O(sq*n) Code: #include <bits/stdc++.h> using namespace std; #define X first #define Y second // #define int long long #define PI pair<int, int> const int maxm=2e5+5; const int mod=998244353; int n,k; int d[2][maxm]; int sum[maxm]; int ans[maxm]; void MOD(int& x){ if(x>=mod)x-=mod; } void solve(){ cin>>n>>k; int x=0,y=1; d[x][0]=1; // 计算最多走多少次 // len*(len+1)/2<=n int len=sqrt(n*2)+1; for(int i=1;i<=len;i++){ int step=k+i-1; // 预处理前缀和 for(int j=0;j<=n;j++){ sum[j]=d[x][j]; if(j-step>=0)MOD(sum[j]+=sum[j-step]); } for(int j=0;j<=n;j++)d[y][j]=0; // dp for(int j=step;j<=n;j++){ d[y][j]=sum[j-step]; MOD(ans[j]+=d[y][j]); } swap(x,y); } for(int i=1;i<=n;i++){ cout<<ans[i]<<' '; } } signed main() { // #define MULTI_CASE ios::sync_with_stdio(0); cin.

剑指offer 把数组排成最小的数

剑指offer 把数组排成最小的数 题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组 [3,32,321],则打印出这 3 个数字能排成的最小数字 321323。 样例 输入:[3, 32, 321] 输出:321323 注意:输出数字的格式为字符串。 参考答案 class Solution { public: static bool myCmp(int &a, int &b) { if (to_string(a) + to_string(b) < to_string(b) + to_string(a)) return true; else return false; } string printMinNumber(vector<int>& nums) { string str; if(!nums.size()) return str; sort(nums.begin(), nums.end(), myCmp); for(int i = 0 ; i < nums.size(); i ++ ) { str += to_string(nums[i]); } return str; } };

剑指offer 把数字翻译成字符串

剑指offer 把数字翻译成字符串 题目 给定一个数字,我们按照如下规则把它翻译为字符串: 0 翻译成 a,1 翻译成 b,……,11 翻译成 l,……,25 翻译成 z。 一个数字可能有多个翻译。 例如 12258 有 5 种不同的翻译,它们分别是 bccfi、bwfi、bczi、mcfi 和 mzi。 请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。 样例 输入:"12258" 输出:5 参考答案 /** * 1268 * 1 2 6 8 * 1 26 8 * 12 6 8 * */ class Solution { public: int getTranslationCount(string s) { int n = s.size(); if(!n) return 0; if(n==1) return 1; vector<int> dp(n+1, 0); dp[n-1] = 1; for(int i=n-2;i>=0;i--){ dp[i] = dp[i+1]; if(s[i]=='1' || (s[i]=='2' && s[i+1]<'6')){ dp[i] += dp[i+2]; } } return dp[0]; } };

剑指offer 不分行从上往下打印二叉树

剑指offer 不分行从上往下打印二叉树 题目 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 样例 输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 2 / 6 / 4 输出:[8, 12, 2, 6, 4] 参考答案 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> printFromTopToBottom(TreeNode* root) { vector<int> res; if (!

实验记录:可能造成深度学习模型训练过程中准确率振荡的原因

可能造成模型训练过程中准确率振荡的原因: 数据集因素: 1.数据集中含有噪声或者样本分布不平衡,这会导致模型学习到一些错误的规律,从而引起训练准确率的震荡。 2.训练数据量过小。如果训练数据集过小,会导致样本不足,难以准确反映整个数据集的特征分布,从而引起训练准确率的震荡。 模型因素: 1.模型复杂度过高或过低。模型过于复杂,可能会导致过拟合;模型过于简单,可能会导致欠拟合。都会引起训练准确率的震荡。 2.训练过程中超参数的选择不合适,如学习率过高或者过低,也可能导致训练准确率的震荡。 解决模型训练过程中准确率振荡的方法包括: 1.调整模型复杂度:如果模型复杂度过高或过低,尝试调整模型的复杂度,使其在适当的范围内。 调整模型结构:如果模型结构不合理,尝试调整模型结构,以更好地适应数据集的特征分布。 2.调整学习率:如果学习率过高或过低,尝试调整学习率,使其在适当的范围内。 3.调整批次大小(Batch Size):如果批次大小设置不合适,尝试调整批次大小,以更好地利用计算资源并提高训练效率。 4.增加训练数据量:如果训练数据量过小,尝试增加训练数据量,以便更好地反映整个数据集的特征分布。 5.增加数据预处理步骤:对数据进行预处理可以帮助消除噪声和异常值,从而提高模型的训练效果。 6.增加正则化项:在模型训练过程中增加正则化项,可以帮助缓解过拟合问题,从而提高模型的泛化能力。 7.尝试不同的优化算法:如果使用某种优化算法导致训练准确率振荡,可以尝试更换其他优化算法。 8.使用集成学习(Ensemble Learning):集成学习可以将多个模型的预测结果结合起来,从而提高模型的准确率和泛化能力。

实验记录:深度学习模型收敛速度慢有哪些原因

深度学习模型收敛速度慢有哪些原因? 学习率设置不当: 学习率是算法中一个重要的超参数,它控制模型参数在每次迭代中的更新幅度。如果学习率过大,可能会导致模型在训练过程中的振荡,进而影响到收敛速度;如果学习率过小,可能会导致模型收敛速度缓慢。 权重初始化问题: 初始化权重的方法对模型的性能有很大影响。如果权重初始化不合适,可能会导致模型在训练初期就陷入不良的局部最小值,从而影响到收敛速度。 数据质量问题: 如果训练数据存在异常值、缺失值或标签错误等问题,可能会影响到模型的训练效果,从而影响到收敛速度。 模型结构问题: 过于复杂或过于简单的模型结构都可能导致训练困难,进而影响到收敛速度。因此,需要根据问题的复杂性来选择合适的模型结构。 梯度消失或爆炸: 在深层网络中,梯度可能会消失或爆炸,导致模型无法进行有效的参数更新,进而影响到收敛速度。可以通过使用合适的激活函数、权重初始化和梯度裁剪等方法来缓解这个问题。 过拟合: 如果模型在训练数据上过度拟合,可能会导致泛化能力差,从而影响到收敛速度。可以使用正则化技术或增加训练数据来缓解过拟合问题。 训练时间不足: 有时候模型可能需要更多的训练时间才能收敛。可以通过增加训练迭代次数或者使用更大的训练集来帮助模型收敛。

JS中浅拷贝和深拷贝

本篇文章咱们一起来学习下JS中的浅拷贝和深拷贝,了解它们在内存上的区别,并掌握浅拷贝和深拷贝的常用实现方法。 引用赋值 在学习拷贝之前,咱们先来看一个常见的情景,如下图: 大家觉得这是深拷贝还是浅拷贝,或者是其他的? 答案是这种方式是引用赋值,它既不是深拷贝,也不是浅拷贝。在内存上的体现是person1和person2的内存指针都指向同一个堆内存对象,验证方式如下图: 从输出结果可以看到修改person1和surname属性,person2的surname属性也发生了更改。 浅拷贝 浅拷贝比较常见的实现方法是通过展开运算符(展开运算符被允许使用在对象字面量声明的时候),如下图: 在内存上的体现是person1和person2分别指向不同的堆内存对象,验证方式如下图: 从输出结果可以看到person2的surname属性并没有因为person1的surname属性发生改变而改变。 深拷贝 通常用于复杂类型的拷贝,同时咱们也可以用来反向证明一下展开运算符是浅拷贝,代码如下图: 从输出结果可以看到,1号小人的朋友从钱姓朋友变成了孙姓朋友,而2号小人的朋友姓氏也随之改变,这就说明person1和person2的friend指向的是同一个堆内存对象,而深拷贝需要将嵌套的每一层的对象都拷贝成全新的堆内存对象,常用的实现方法如下图: 通过JSON.stringify方法将person1对象转为JSON,再通过JSON.parse方法将JSON字符串转化为全新的JS对象,从而实现深拷贝,验证方式如下图: 从输出结果可以看到,1号小人的朋友从钱姓朋友变成了孙姓朋友,2号小人的朋友仍然是钱姓朋友。

新建vue3项目

三种方法 一. 第一种方式 1、操作步骤: 创建项目目录 vue create 项目名称 选择配置方式 ? Please pick a preset: #选择一个配置 Default ([Vue 3] babel, eslint) Default ([Vue 2] babel, eslint) Manually select features # 手动选择功能 选择配置内容,一般为babel,router,Linter / Formatter,vuex等,上下键控制,空格键选择 ? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed) >(*) Babel ( ) TypeScript ( ) Progressive Web App (PWA) Support ( ) Router ( ) Vuex ( ) CSS Pre-processors (*) Linter / Formatter ( ) Unit Testing ( ) E2E Testing Babel:转码器,可将ES6代码转为ES5 TypeScript: 支持使用 TypeScript (JavaScript超集) Progressive Web App (PWA) Support :支持PWA(渐进式Web应用程序) Router :支持 vue-router (路由) Vuex :支持 vuex (状态管理器) CSS Pre-processors: 支持 CSS 预处理器 Linter / Formatter :支持代码风格检查和格式化 Unit Testing:支持单元测试 E2E Testing: 支持 E2E 测试(end to end) 选择vue版本:

ICT的全称是Information and Communications Technology,被称为信息通信领域技术

ICT的全称是Information and Communications Technology,被称为信息通信领域技术。简单来说,ICT=IT+CT。 参考维基百科的解读: 通信技术与信息技术是两个完全不同的范畴:通信技术着重于消息传播的发送技术,而信息技术着重于信息的编码或解码,以及在 通信载体的传输方式。随着技术的发展,这两种技术慢慢变得密不可分,从而渐渐融合成为一个范畴。 信息技术主要用于管理和处理信息所采用的各种技术总称。它主要是 应用计算机科学和通信技术来设计、开发、安装和实施 信息系统及应用软件。 通信技术主要包含传输接入、网络交换、移动通信、无线通信、 光通信、卫星通信、支撑管理、 专网通信等技术,现在热门的技术有5G、LTE、IPTV、VoIP、NGN和IMS。 近年来热度颇高的云计算、5G、物联网、大数据、AI、网络等都属于ICT范畴,与之相关的专业诸如计算机科学与技术、软件工程、网络工程、信息安全、通信工程、物联网工程、人工智能、智能科学与技术等,与之相关的耳熟能详的岗位如程序员、通信工程师、AI工程师、数据分析师等。 更直观来说,此刻我们能上网浏览知乎、能通过手机打电话聊微信,都是ICT发展的结果。 作者:知乎用户QB1NI3 链接:https://www.zhihu.com/question/272058652/answer/1434807011 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

image src中的 “/”、“./”与“../”

image Src中的地址格式 1."/"表示代表文件所在的根目录(location.origin); 2."./"表示代表文件所在的目录(可以省略不写: location.origin + location.pathname); 3."../"表示文件表示文件所在的父级目录。

test114514

import code, os, subprocess import pty def blacklist_fun_callback(*args): print("Player! It's already banned!") pty.spawn = blacklist_fun_callback os.system = blacklist_fun_callback os.popen = blacklist_fun_callback subprocess.Popen = blacklist_fun_callback subprocess.call = blacklist_fun_callback code.interact = blacklist_fun_callback code.compile_command = blacklist_fun_callback vars = blacklist_fun_callback attr = blacklist_fun_callback dir = blacklist_fun_callback getattr = blacklist_fun_callback exec = blacklist_fun_callback __import__ = blacklist_fun_callback compile = blacklist_fun_callback breakpoint = blacklist_fun_callback del os, subprocess, code, pty, blacklist_fun_callback input_code = input("Can u input your code to escape > "

实验记录:模型训练时loss为INF(无穷大)

INF(infinity)——无穷大 本次原因: 未进行归一化,损失函数使用log(x),在log(x)函数中,x越小趋近于零,结果会返回INF 其它原因: 1.除以零错误: 在计算过程中,如果尝试将一个数除以零,将导致无穷大的损失值。 2.数值不稳定性: 在某些情况下,由于数值不稳定性,梯度下降算法可能会产生非常大的梯度,从而导致损失值变得非常大。 3.学习率过高: 如果学习率设置得过高,梯度更新可能会变得非常大,从而在某些迭代中导致损失值变得非常大。 4.模型结构问题: 模型结构可能存在问题,例如,某些层的权重可能设置得过大或过小,导致计算过程中的数值不稳定。 5.初始化问题: 权重的初始化可能不合适,例如,如果权重的初始值过大或过小,可能会导致计算过程中的数值不稳定。 6.输入数据问题: 输入数据可能包含异常值或缺失值,这可能导致模型在计算过程中遇到问题。 可能的解决方法: 1.检查数据:确保输入数据没有异常值或缺失值。 2.调整学习率:尝试降低学习率,以减少梯度更新的幅度。 3.检查模型结构:检查模型结构是否合理,特别是权重和偏置的初始化是否合适。 4.使用梯度裁剪:在训练深度神经网络时,可以使用梯度裁剪来防止梯度爆炸问题。 5.使用更稳定的优化算法:例如,可以使用Adam或RMSProp等更稳定的优化算法来代替SGD。 6.减小批次大小(Batch Size):减小批次大小可以减少梯度的噪声,但也会增加训练时间。 7.检查硬件和软件:确保硬件和软件环境没有问题,例如内存溢出或GPU内存不足等问题。 结果输出: 幻数:2051, 图片数量: 26843张, 图片大小: 28*28 100%|██████████| 26843/26843 [00:00<00:00, 33193.52it/s] 100%|██████████| 26843/26843 [00:00<00:00, 3341972.22it/s] 魔数:2049, 图片数量: 26843张 幻数:2051, 图片数量: 2982张, 图片大小: 28*28 100%|██████████| 2982/2982 [00:00<00:00, 33162.09it/s] 魔数:2049, 图片数量: 2982张 cpu 100%|██████████| 2982/2982 [00:00<00:00, 3351397.25it/s] 0%| | 0/210 [00:00<?, ?it/s]training on mps:0 100%|██████████| 210/210 [00:02<00:00, 74.