根据第一章节反激拓扑1—反激电路的由来最后演变而来的反激拓扑,将开关S更换为产品开发过程中常用的MOSFET
1、反激电源的分类,根据其电流的连续性分为CCM(连续工作模式)、CRM(临界工作模式)、DCM(断续工作模式)三种,根据我开关频率f可以分为固定频率模式和变频模式
理想状态下,CCM、CRM和DCM三种工作模式的驱动波形、MOSFET电压Vds和原副边电流波形如下:
记得刚开始接触反激时,一直以为反激就是断续模式,因为不管看原边电流还是副边电流,确实时断续的,当了解了反激电源的演变过程,就发现不能只看其中一侧的电流去判断,区分三种模式最明显的方法就是电流,CCM模式最容易识别,在开关管开通瞬间,原边或者副边的电流波形不为0即为连续模式,想要比较清楚的区分CRM和DCM模式,就需要同时把原副边的电流波形测量出来进行对比了。
2、CCM工作模式分析
(CRM模式可以看做是励磁电感直流分量电流为0时的CCM模式)CCM模式下,一个周期T=ton+toff
①在MOSFET导通过程中,即0-ton阶段变压器原边绕组与输入电源连接,原边绕组储存能量,且Vp=Vin,根据变压器原理,其副边绕组电压Vs=Ns*Vin/Np,二极管D反向截止,Is=0根据Vin*△t=Lp*△Ip,△Ip=Vin*ton/Lp
②在MOSFET断开过程中,即toff阶段变压器原边工作结束,ton阶段储存在电感Lp中的能量通过副边Ls进行释放,Vs=Vd+Vout,根据变压器的原理,在原边绕组上会感生出一个电压VOR=Np*Vs/Ns,该电压通常被称为反射电压,而MOSFET所承受的电压VDS=Vin+VOR
图1 MOSFET导通过程
图2 MOSFET断开过程
②DCM模式分析DCM模式与CCM模式基本原理相同,差异在于DCM模式一个周期的时间T>ton+toff,T-(ton+toff)的时间段内,变压器副边电流Is=0,Vs=0,所以原边绕组不存在反射电压VOR,MOSFET的电压VDS=Vin。以上分析均为理想条件下的分析,实际应用时,由于变压器不可避免的存在漏感等寄生参数,会对实际的工作过程产生比较大的影响。
查看原文:https://www.dianyuan.com/eestar/article-8422.html
这是一个LED恒流电路板:
电路板上有烧毁的痕迹,最后再说烧毁的原因,现在咱们先不管。
复原其电路原理图:
既然说是LED的恒流电路,它是怎样实现恒流的呢?
为了直观地演示它的“恒流”效果,请看以下的仿真动图。
当用24V供电时:
流过LED的电流为:
当用12V供电时:
流过LED的电流为:
分别用24V和12V供电,电压相差一倍,流过LED的电流大小却差别不大,也就是电流基本“恒定”。
下面以12V供电为例,分析实现恒流的电路原理。
所谓知彼知己,百战不殆,首先找出实现恒流时的已知条件:
后面就比较简单了,从已知条件出发,推导出未知量即可。
1、从12V出发,每经过1个LED电压降低2.1V,可以确定以下3个电路节点的电压分别为9.9V、7.8V、5.7V:
2、从地GND出发,每经过一个三极管的发射极和基极,电压上升0.7V:
这样电路中所有节点的电压都确定了:
能实现恒流,是因为电阻R4被三极管Q2的基极发射极(be极)钳位为0.7V,流过它的电流也就固定为:
0.7V / R4 = 0.7V / 20ohm = 35mA
因为三极管的基极只流入很小的电流,所以可以忽略,于是这个35mA基本就是流过三极管Q1的电流,也基本就是流过LED灯的电流:
上述的理论分析跟仿真动图展示的结果基本一致。
根据该电路恒流的原理,要改变恒流值,调整电阻R4的大小即可。
需要注意的是,三极管Q1的功耗是否过高。三极管的功耗Pc等于:
Vce * Ic
Vce为集电极与发射极的压差。
Ic为集电极流过的电流。
对于SOT-23封装的三极管来说:
其可承受的最大功耗是比较小的,这份数据手册里写的是200mW:
读者朋友们可以自行计算一下,在24V供电情况下,Q1的功耗是否已经超出200mW。(光看不练,效果减半,大家可试着动动手)
提示:使用下图红色箭头的数值进行计算即可。
另外,电阻R2是为了给三极管Q1提供基极电流通路,给三极管Q2提供集电极电流通路:
最后,前面有提到这个电路板实物有烧焦的痕迹,是什么原因呢,这篇文章里有详细分析:《LED恒流电路批量在即,贴片电容几率性炸开,大佬会诊破案》(点击前往)
查看原文:https://www.dianyuan.com/eestar/article-8424.html
1.前言
最近在工作中遇到了一个时钟辐射(RE)超标的问题,前前后后经过差不多2周的时间,终于在这周五把问题解决了。解决的手段采用了三种:降低驱动电流;增加pF级别的电容;增加地搭接。
上述使用的三种方法,其实也是解决EMC问题常见的手法。本周周报将结合工作中遇到的EMC问题,把为什么要用这三种方法的原因和背后的原理进行分析,并分析产生这些问题的根本原因。
高速PCB的设计是高速电路中非常重要的环节,一般大厂的硬件和PCB是分开的,硬件工程师出原理图和PCB设计指导书;考虑到DFX方面,在原理图设计时,也会有EMC和射频工程师的加入。
PCB工程师完成PCB设计后,会发给EMC工程师,射频工程师,硬件工程师检查。比较尴尬的是,原理图是硬件工程师画的,而EMC和射频的东西又需要非常专业的理论作为指导。PCB工程师在完成Layout之后,如果EMC和射频工程师没有发现问题,硬件工程师估计也很难发现。但是,这个单板的负责人还是硬件。
因此,作为一名合适的单板硬件开发工程师来说,掌握基本的高速PCB设计规则还是非常有必要的。
2. EMC之辐射干扰
从下面整理EMC包含的内容可以看出,任何一款需要面向消费者的产品,仅仅在EMC方面的设计就要考虑这些问题。
虽然EMC工程师能帮我们在原理图阶段发现某些问题,但是他们经常需要一对多,不可能面面俱到。我们自身如果能掌握EMC基本的设计规则掌握,按照2/8定律来看,80%的产品也不会存在一些简单的EMC设计缺陷。
项目中出现的时钟超标的问题,是属于EMC中的EMI当中的辐射干扰。在测试辐射干扰时,我们需要遵循国标。对于工业产品来说,辐射干扰必须小于 Class A 等级;对于民用产品来说,辐射干扰必须小于 Class B等级。考虑到实际产品使用的场合,最好能留有一定的裕量,不同的公司可能标准还不一样。
测量辐射干扰所用的电波暗室如下。在测试时,先测量水平,再测量垂直,最后叠加的辐射就是总的辐射干扰。
图片来源于网络
上图显示的ClassA和ClassB是欧盟CISPR 22的标准中对ClassA和ClassB等级的要求。从图中可以得到的信息是,同等频率条件下,民用产品对RE的要求更苛刻。国标中也是一样。ClassB等级更严格。
3. PCB之传输线
高速PCB设计中,按照传输线的结构,PCB上的走线可以分为微带线和带状线。微带线是指在PCB表层的走线。即我们设定的TOP层或者BOTTOM层,仅与一个参考层相邻。如下图所示。
带状线指在PCB内层的走线,即我们设定的除TOP和BOTTOM层的走线层,位于两个参考层之间的走线。如下图所示。
还有一种是嵌入式的微带线,它是标准微带线的改进型,区别在于导线的表面覆盖了一层介质材料。如下图所示。
微带线和带状线的各自的特点如下:
(1)阻抗控制难易程度不一样
微带线一边是空气,一边是PP固态树脂,阻抗不好控制;带状线两边都是填充介质,阻抗可以更好的控制。
(2)走线速率不一样
空气的介电常数比PCB板材小,信号传输速率高。相比带状线,微带线的传输速率略高,延时更小。
(3)抗辐射程度不一样
微带线由于一面直接与空气接触,容易产生对外的辐射;带状线在两个参考层之间,能有效的屏蔽。
根据上述的特点可以看出,如果是走高速的时钟信号,最好是走在内层,并且用地线进行包地处理,可以有效的降低对外的辐射。
4. 信号上升速率
高速数字电路的PCB设计中,当布线长度大于λ/20(λ波长)或信号延时超过1/6信号上升沿时,PCB上的布线可以被视为传输线。信号上升沿越陡,高频分量越丰富,越容易出现信号完整性的问题。
下图所示的信号,输入信号和输出信号上升沿斜率不一样,高频分量就会不一样。
在PCB中需要关注的信号完整性问题主要是反射,串扰,辐射。
项目中遇到的EMC辐射超标问题,就归属于信号完整性中的辐射。出现问题后,特地的查看了PCB的走线,发现CLK在从第六层穿到第二层的时候,没有放置地过孔,而且在穿层的旁边还有其他的数据信号,因此可能还出现了串扰的问题。大概示意图如下。
检查到PCB上存在上面的问题后,进行了两个方面的调整:
(1)降低时钟输出端的驱动能力,从12mA降低到4mA
(2)增加12pF的电容,原理图设计时预留了电容工位
经过修改后再去测试EMC,辐射直接降了20dB,但是还是过不了ClassB。然而,从结果看两个措施的效果还是比较明显,其本质都是降低了信号上升沿的斜率。
信号从Drive出发,从第六层穿到第二层,再从第二层穿到第一层。时钟信号在整个路径中换了2次。穿层对高速的信号影响主要有两个方面:
(1)过孔寄生电感和电容,阻抗发生突变,容易出现反射
(2)过孔是容性负载,会降低信号的速率,在时序设计时可能会因为延时导致接收到时序裕量不足。
(3)过孔处信号的参考层发生改变,导致回流路径发生变化,从板材之间的寄生电容导致向外的辐射。
时钟信号在第一层走线时,是参考的第二层,在第一次穿层时,回流路径发生了改变,此时增加电源的过孔,可以引导CLK以电源属性为参考平面,阻抗小(当然,这里也可以直接打孔到GND上)。在第二层走线时,以GND为参考层。因此,回流路径在电源层和GND层发生了变化。
虽然电源和GND之间有很多去耦电容来降低电源的阻抗,但是寄生电容还是会存在(PCB板的固有属性)。因此,在该层会因为阻抗回流路径发生改变导致高频信号通过寄生电容往外辐射。
这也是为什么项目中设备辐射超标的一个原因,穿层时没有加过孔。回流路径以相邻的走线作为回流参考路径,因此就发生了串扰。而降低驱动能力和增加电容,可以降低信号的边沿上升速率,降低高频有效频率,既能够降低串扰的程度,也能降低往外辐射的高频能量。
5. 接地
将驱动和增加电容措施导入后,还是满足不了EMC的要求。经过分析,发现设备在测试时,主设备和辐设备之间只使用一根FPC相连接,FPC上的地线数量比较少,推测应该是接地面积不够大带来的问题。
在解决EMC设计时,经常用到屏蔽,隔离,滤波,接地。其中接地在某种程度上来说,也是提供了一个良好的回路。
由于FPC线的地线比较少,高频信号在回流时会有一部分通过设备和地之间的寄生电容作为回流路径。这些寄生电容其实也是共模电流的返回路径。如下所示。
于是就将主设备和辅设备放在了同一块金属板上,同时在主设备和辅设备之间增加了两条较粗的金属导线。如下所示。经过上面的措施后,再去测试EMC后,ClassB等级直接通过,还多出来了5dB的裕量。
至此,项目中遇到的问题得到了完美的解决,看似一个很简单的辐射超标问题,但是从这个问题出发,还是有很多值得去挖掘的地方。
对上面的内容进行回顾,即知:时钟信号驱动能力较强,信号上升沿斜率较高,导致时钟高频奇次谐波往外辐射,RE测试超标;主设备和辅设备的的接地较差,辅设备传输到主设备的时钟靠寄生电容作为信号回流路径,导致向外的辐射较大。
6.总结
高速PCB设计中SI是非常关键的一环,其中涉及到阻抗匹配,信号参考路径,串扰,接地,过孔穿层等方面的问题。在设计的时候,要尽可能保证阻抗的一致性;尽可能保证回流面积最小;高速信号少穿层;走带状线和包地处理来降低敏感信号的辐射。通过这些手段来降低可能出现的EMC问题。
EMC的设计最好是在原理图设计之初就进行考虑,或者直接让EMC和射频工程师参与原理图的设计,避免等单板设计完出现问题之后再考虑如何整改。越是离产品发布的时间近,调整起来的成本就越高。
查看原文:https://www.dianyuan.com/eestar/article-8314.html
scp(Secure Copy Protocol)是一个用于在本地主机和远程主机之间安全地复制文件或目录的命令。它使用 SSH(Secure Shell)协议来进行安全的文件传输。以下是 scp 命令的基本用法和详解:
1. 基本用法
scp [选项] [源文件或目录] [目标主机:目标路径]
2. 选项
3. 示例
从本地复制到远程主机
scp localfile username@remote:/path/to/destination
从远程主机复制到本地
scp username@remote:/path/to/file /local/path
递归复制整个目录
scp -r localdir username@remote:/path/to/destination
指定非标准 SSH 端口
scp -P 2222 localfile username@remote:/path/to/destination
保留文件权限和时间
scp -p localfile username@remote:/path/to/destination
使用特定密钥文件
scp -i keyfile.pem localfile username@remote:/path/to/destination
4. 使用 SSH 密钥对身份验证
scp 使用 SSH 协议进行安全传输,因此可以通过 SSH 密钥对来进行身份验证,而不必输入密码。确保公钥已经被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
5. 注意事项
6. 高级用法和示例
通过跳板主机(Jump Host)进行传输
有时候,需要通过一个跳板主机来连接目标主机。可以通过 -J 选项指定跳板主机:
scp -J jumpuser@jumphost:jumpfile user@remote:/path/to/destination
限制带宽
可以使用 -l 选项限制传输的带宽,例如限制为 100kbps:
scp -l 100 localfile username@remote:/path/to/destination
使用不同的 SSH 配置文件
如果有多个 SSH 配置文件,可以使用 -F 选项指定配置文件路径:
scp -F /path/to/ssh/config localfile username@remote:/path/to/destination
传输时显示进度
使用 -v 选项显示详细信息,而 -q 选项则关闭输出。可以通过 --progress 选项显示传输进度:
scp --progress localfile username@remote:/path/to/destination
7. 使用通配符
scp 支持通配符,可以使用通配符来传输多个文件:
scp localdir/*.txt username@remote:/path/to/destination
8. 使用压缩
通过 -C 选项使用压缩传输,可以减少网络传输时间:
scp -C localfile username@remote:/path/to/destination
9. 使用代理跳板主机
如果通过 SOCKS 代理跳板主机,可以使用 -o 选项指定 ProxyJump 选项:
scp -o ProxyJump=proxyuser@proxyhost:proxyport localfile username@remote:/path/to/destination
总结
scp 提供了许多选项和功能,可以根据实际需求进行灵活配置。无论是简单的文件传输还是复杂的跳板主机、限制带宽、显示进度等高级用法,scp 都是一个强大而实用的工具。详细的选项和用法可以查阅 scp 的 man 手册(man scp)。
查看原文:https://www.dianyuan.com/eestar/article-8426.html
更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)
六篇技术文章,让你秒懂电容的脾气秉性
七篇DIY技术文章献给你,让你脑洞全开
五篇文章帮你开启DSP的学习思路
汇总篇:关于PID知识,重点在此
016年10月,诺贝尔物理学奖授予 David J. Thouless、 F. Duncan M. Haldane 和 J.Michael Kosterlitz ,以表彰他们对“物质的拓扑相变和拓扑相的理论发现”。今天的文章是对这届诺奖的一个回顾。
撰文 | 满威宁(加州州立大学旧金山分校物理与天文系终身教授)
受邀写一篇希望家长看后可以用来给孩子讲解的(或中学生能勉强看懂的)关于今年诺贝尔物理学奖的介绍,这真不是一件容易的事。拓扑相变实在比细胞自噬体等要抽象复杂得多,很多人直呼“好几个号称说人话的版本还是看不懂。”那么请试试这篇,让我们一点一点来了解它。相信你看完能对这个特别抽象深奥的领域多一层理解,对基础科学多一层好奇和敬佩。
今年的诺贝尔物理学奖被授予美国华盛顿大学的索利斯(David J. Thouless)、普林斯顿大学的霍尔丹(F. Duncan M. Haldane)和布朗大学的科斯特利兹(J. Michael Kosterlitz),以表彰他们的“理论研究发现了物质的拓扑相变和拓扑相。”诺贝尔奖官网说:“他们打开了通往奇异状态物质这一未知世界的大门。他们用高等数学方法研究不寻常的相、态、物质,比如超导体、超流体或薄磁膜。得益于他们的先驱性工作,对新型反常相物质的猎寻(hunt)开展起来了。很多人认为它们未来有望在材料科学和电子学上得以应用。”
众所周知,纯水可以有冰、水、水蒸气三种状态,也就是固体液体气体三种相。融化沸腾结霜等都是相变。值得注意的是,相变意味着存在不连续的跃变。比如说固相和液相之间并没有中间状态。你可以把冰和水混合在一起,但在冰水混合物(包括碎冰沙饮品)里,固相液相仍是分离的(phase separation),不像酒精和水溶液成为融合的单相。小朋友可能会好奇那软白甜的冰激凌,难道不是水在固液两相之间的中间相?注意,冰激凌不是水,是混合了蛋白质、脂肪、冰晶、糖、液态水以及气泡的典型软凝聚态——凝聚态物理的另一个重要分支。
在不同的相里,分子原子整体遵循不同的规律做运动。比如,在固态晶体里,分子排成一个固定的点阵,像是操练立体方阵的士兵。在液态下,晶格瓦解,分子们却还紧挨着,所以保持有限的体积,但有了流动性,失去了固定的形状。等到了气态,分子们各奔东西,不仅没了固定形状,体积也会充满所在容器的整个空间。除了固液气相,物质还可能有很多其他复杂的相,呈现出不寻常的特征,比如超导和超流,后面会解释。
总而言之,不同的相是指同一个物质内的原子们,有不同的组织结构,对应于不同的物态。相与相之间的变化,是跃变的(存在不连续的物理量),而不是渐变的 (比如将一块铁的温度慢慢升高)。
拓扑是topology 音译的词汇。拓扑学是数学的一个分支,主要研究在空间连续变化(比如拉伸和弯曲,但是不撕裂和粘合)的情况下维持不变的性质。
最著名的例子就是,一团橡皮泥可以捏成一个球或者一个碗,或者捏成诺奖发布会上,主持人手里的实心肉桂面包(不管怎样做连续变化,这些形状都是一回事:它们都没有洞)。而被打穿了一个洞的橡皮泥,或者有一个把手的茶杯,以及主持人手里的圆圈面包,或者一个筒裙,在拓扑学上他们都是一回事,拥有同样的不变性:一个洞。而穿了两个洞的橡皮泥,就像那个八字形的碱水面包,还有你的长裤和短裤,都具有相同的拓扑不变性。除了洞的个数,还有别的特征数用来描述不同的拓扑特性。
请注意,拓扑性也是跃变的,不是渐变的。有个笑话说,当禅师说任何事物都有两面,你可以把一张纸条拧一下然后两头反过来粘住,形成一个莫比乌斯环。在上面爬的蚂蚁会发现它只有一面。可是如果禅师说事物都有整数面,那他就对了。同样,拓扑描述里,可以有零个、一个、两个或N个洞,但是不会有中间态1.5个或1.618个洞。掌纹指纹的奇异点(构成“箩斗”或“簸箕”)、打结的耳机线、椰子绒毛的漩(和你头发的漩)无不要遵守拓扑学的描述。而且拓扑性必须看物质的整体而不是局部才能知晓。
拓扑的本质是在连续变化下的不变性。如果一根绳子上打了一个结,然后把这根绳子首尾相连,要去除这个绳结就只能把绳子割断,拓扑性质也是如此的坚固。比如说,当空间发生连续变化(伸缩扭曲等),左图的二维的波浪式运动可以被消除,而右图转圈的漩涡只能被扭曲或移动,因为拓扑结构获得保护,漩涡不能被轻易地消除。后面会提到漩涡在二维拓扑相变里面的重要作用。
为了帮助理解后面的话题,我们先看看什么是电导率。想象一下你在一个管子(比如注射器)的一端施加压力,两端出现压强差,管内的液体会朝低压的方向流去,而流速流量不仅由压强差、管道长度、管道粗细决定,还会与液体的粘滞阻力有关,就像水和蜂蜜的区别。同样的,决定电流大小的,除了导线两端的电压差,材料的长短粗细,还有材料本身的导电性能(电导率)。比如金或者铜的电导率优于铝。我们平时说的电阻率,是电导率的倒数。一般情况下,电阻来源于电荷在移动过程中遭遇的阻碍(与其余微观粒子的频繁碰撞),类似于粘滞阻力和摩擦力。于是很大一部分电能就被消耗成了热能,所以你的手机会发热而且没用一天就要充电了。在三维导体和半导体中,电导率(电阻率)会随温度等状态发生变化,一般这样的变化是连续的,不是跃变的。
在特殊情况下,比如非常低温的条件下,物质可能发生特殊的相变,突然完全丧失电阻(或者粘滞系数),变成超导体(或者超流体),于是电流不再产生热量消耗电能(或超流液体在环形容器中无休止地流动下去)。
现在,我们再来试图理解拓扑相变。
在低温下,微观粒子体现出量子力学的效应。而在薄层物质里,想象一下那些“运载”电流的电荷(或流体的分子),像蚂蚁一样被限制在桌面薄薄一层空间,只能做二维运动。那么他们中的一些有可能转着圈形成漩涡。
如果本节后面的文字读起来费劲,读完这一段你就可以跳到下一节。简短地说,今年的物理诺奖奖励了下列几个工作:
总的来说,他们的理论开创了把拓扑概念应用到凝聚态物理研究的领域,打开了通往丰富的拓扑物态世界的大门。
从前的理论认为超导或者超流不可能在薄层中发生。而上世纪七八十年代,David J. Thouless和J. Michael Kosterlitz 提出拓扑量子流体的理论,描述了在极低温下薄层物质中的漩涡会顺时针逆时针成对出现,互相补给电荷(或者补给流体),作为整体形成准长程有序的束缚态,伴随超导或超流现象。在温度升高后,这些成对的漩涡突然远离,开始自由运动,破坏了超导或超流的长程位相有序性,导致物理性质突变。这个过程不同于普通的伴随对称性破缺(局部热扰动破坏的各方向对称性)的相变(比如结冰),而是由漩涡束缚态与自由态之间的转变导致的,要用到拓扑的不连续性来描述和解释,是拓扑相变的一种。已故前苏联科学家Berezinskii也独立地提出了这一相变机理,但由于东西方冷战而不为许多人知晓, 这一相变也被称为是BKT相变。
另外一个启发了科学家们去把拓扑性应用到物理里的一个重要现象,是在极低温强磁场下薄层物质的霍尔电导率成台阶式整数倍变化,而不能连续变化,即整数量子霍尔效应。(1980年德国科学家 Klaus von Klitzing 发现整数量子霍尔效应,于1985年获得诺贝尔物理学奖。)实验所测得的霍尔电导率非常精确地严格等于一个物理常数的整数倍。这个物理常数是大家熟悉的基本电荷(一个电子的电量)的平方除以量子力学里的极小量普朗克常数。(霍尔电导率不同于普通的电导率,但也同样是电流密度与电压梯度的比值。)
为什么霍尔电导率会如此固执地取这一系列整数倍数值呢?David J. Thouless等人把整数量子霍尔效应与陈数的整数拓扑不变量联系在了一起,用拓扑理论深刻解释了二维电子层中的整数量子霍尔效应。陈数是以华人数学家陈省身命名的。在数学上,陈省身提出的陈类(Chern Class)及相关理论在微分几何和代数拓扑学里面有举足轻重的位置。
另外,1982年,美籍华裔物理学家崔琦(Daniel Chee Tsui)、美国物理学家施特默(Horst L. Stormer)等发现“分数量子霍尔效应”,不久由美国物理学家劳弗林(Rober B. Laughlin)给出理论解释,三人共同获得1998年诺贝尔物理学奖。
而今年的另一位得奖者,F. Duncan M. Haldane的理论计算在八十年代末第一个提出了与已知机理不同的,不需要外加磁场的量子霍尔效应。这一预言终于在2014年,被以薛其坤为首的清华大学和中科院物理所的研究团队,用前所未有的磁性掺杂拓扑绝缘体在实验上验证。他的理论为现在非常活跃的拓扑绝缘体领域提供了前期基础。他还用拓扑的概念研究一维的原子链,在八十年代年打破前人对一维原子链的认知,指出一串磁性原子的自旋常数决定了他们是否存在拓扑性。他近期的工作进一步升华了分数量子霍尔效应的理论。
这些研究的意义是什么,它们有什么用,这是大家很关心的问题。
我首先要强调的是,把非常抽象的拓扑学应用到凝聚态物理研究中,形成全套崭新的理论,用以成功解释物质的奇异性质和相变,并预言前所未有的拓扑相和新物态,就像拿三角函数来描述带有方向的物理量(力和速度等矢量),拿微积分来描述渐进的物理过程,拿黎曼几何来描述引力的本质是时空的扭曲从而创立的广义相对论一样,这些“异想天开”的开创性理论研究打开了一扇扇新学科的大门,是具有划时代意义的。
拓扑激发态两个重要特点,一是全局性,二是对局部扰动的稳定性,不受材料里面杂质等干扰。到今天对拓扑物态的研究成为一个内容丰富又飞速发展的领域, 更多的奇异拓扑相(包括一维、二维、三维)和拓扑相变被预言和发现。
比如1990年左右,华裔物理学家牛谦、文小刚等人的工作使我们理解了量子霍尔效应边界的奇特拓扑性质。近十年来,包括傅亮、张首晟在内的科学家发现和预言了多种三维拓扑绝缘体。近八年来,顾正澄、文小刚,还有陈谐、刘正鑫揭示了 Haldane 磁性链的对称保护的拓扑内涵。这些工作使拓扑物态吸引了更多的关注。
特别是量子霍尔态,其中和陈数相关的拓扑性质,导致了它的边界是电阻为零的理想导体。电子在一个边界上都有相同的运动方向,好似行驶在畅通无阻的高速公路,不再遭遇普通导体内类似于跑车冲进歌舞厅菜市场的电阻。这样特别的的材料有望被用来解决电子产品发热电能浪费的问题。
还有一种新型拓扑物态——带非阿贝尔任意子的拓扑序,可能可以被用以实现量子计算机。总而言之,拓扑序拓扑物态在过去二十多年来主导了凝聚态物理的前沿研究,这些新型的拓扑材料和奇异性能,可能对下一代电子元件和量子计算机的发展有重要的潜在应用。
作为专业的物理科研人员,在这里我谨慎保守地措辞“可能”和“潜在应用”,因为这样划时代发现全新物态和物理机制的开拓性研究本身已经意义非常重大,无需再吹嘘应用前景。类似地,一百年前爱因斯坦提出激光概念,五六十年前激光得以实现。那时候的人们完全想象不到激光的“潜在应用”有多么广泛。在今天几乎任何角落,从引力波探测、芯片制造,到普通电脑光盘、互联网光纤,到哪怕超市里的扫条码,都离不开激光——这种“一反常态”的具有单色、单向性、大功率、相干性等等的全新光源。
三位获奖者是全新拓扑物态研究领域的理论先驱,在他们之前和之后的众多的数学家、理论物理学家和实验物理学家,都为这一领域的发展做出了卓越的贡献。是他们对未知世界无法阻挡的好奇心、孜孜不倦的探索和极其敏锐的洞察力让这一切成为可能。
作者简介
满威宁,博士,本科毕业于吉林大学少年班,博士毕业于普林斯顿大学物理系,在普林斯顿大学和纽约大学从事博士后工作。现任加州州立大学旧金山分校物理与天文系终身教授,从事软凝聚态物理、准晶、光子能隙、无序材料及非线性光学的研究。
参考资料
[1] 诺奖官网公告
https://www.nobelprize.org/nobel_prizes/physics/laureates/2016/press.html
[2] Nature: Physics of 2D exotic matter wins Nobel.
http://www.nature.com/news/physics-of-2d-exotic-matter-wins-nobel-1.20722
[3] 果壳网:物理学奖:平面世界里的奇幻现象
http://www.guokr.com/article/441761/
[4] 拓扑为何
http://iscientists.baijia.baidu.com/article/342721
[5] 轻松理解凝聚态中的拓扑|诺奖深度解析 (之一)
http://www.weixinduba.com/n/348732
[6] 轻松理解凝聚态中的拓扑|诺奖深度解析 (之二)
http://mt.sohu.com/20161009/n469783911.shtml
[7] Physics Today: The QuantumSpin Hall Effect and Topological Insulators
http://scitation.aip.org/content/aip/magazine/physicstoday/article/63/1/10.1063/1.3293411
[8] https://i.ytimg.com/vi/9NlqYr6-TpA/maxresdefault.jpg
特 别 提 示
1. 进入『返朴』微信公众号底部菜单“精品专栏“,可查阅不同主题系列科普文章。
2. 『返朴』提供按月检索文章功能。关注公众号,回复四位数组成的年份+月份,如“1903”,可获取2019年3月的文章索引,以此类推。
《返朴》,科学家领航的好科普。国际著名物理学家文小刚与生物学家颜宁共同出任总编辑,与数十位不同领域一流学者组成的编委会一起,与你共同求索。关注《返朴》(微信号:fanpu2019)参与更多讨论。二次转载或合作请联系fanpusci@163.com。
.在C++中,下面哪个关键字用于声明一个变量,其值不能被修改? ( )
A. unsigned
B. const
C. static
D. mutable
【答案】B
【考点】考点: C++语法知识: 变量与常量
【解析】变量是存储信息的容器,变量在计算机内有一个内存地址,里面放的内容即变量的值,变量是允许被修改,但是常量的值不允许被修改,常量的定义格式如下:
const 数据类型 常量名 = 常量值;
数据类型 const 常量名 = 常量值;
题目说其值不能被修改指的是常量,因此选择 const 修饰,所以答案选择 B。
2. 八进制数 12345670 和 07654321 的和为 ( )
A. 22222221
B. 21111111
C. 22111111
D. 22222211
【答案】D
【考点】进制转换 (初赛集训内容)
【解析】R 进制的运算逢 R 进一,题目是八进制加法,所以每一个进制位上的数字是逢 8 进一。
12345670
+ 07654321
--------------
22222211
3. 阅读下述代码,请问修改 data 的 value 成员以存储 3.14,正确的方式是( )
union Data{
int num;
float value;
char symbol;
};
union Data data;
A. data.value = 3.14;
B. value.data = 3.14;
C. data->value = 3.14;
D. value->data = 3.14;
【答案】A
【考点】联合体(NOI新大纲内容)
【解析】共用体定义格式:
union 共用体名{
成员列表
};
共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
共用体占用的内存等于最长的成员占用的内存。
共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
题目中 data 占用 4 个字节,修改 value 使用 . 运算符,-> 适用于指针。
4. 假设有一个链表的节点定义如下:
struct Node { int data; Node* next;};
现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成员 data 的值为 42,并使新节点成为链表的第一个节点,下面哪个操作是正确的? ( )
A. Node* newNode = new Node; newNode->data = 42; newNode->next = head; head = newNode;
B. Node* newNode = new Node; head->data = 42; newNode->next = head; head = newNode;
C. Node* newNode = new Node; newNode->data = 42; head->next = newNode;
D. Node* newNode = new Node; newNode->data = 42; newNode->next = head;
【答案】A
【考点】链表的插入(数据结构)
【解析】题目使用头插法即可
B. 赋值错误。
C. 新插入的结点的后继未确认。
D. 表头结点的后继未指向新生成的结点。
5. 根节点的高度为 1,一根拥有 2023 个节点的三叉树高度至少为 ( )
A. 6
B. 7
C. 8
D. 9
【答案】C
【考点】树
【解析】观察下图
第 1 层有 1 个结点
第 2 层有 3 个结点
第 3 层有 27 个结点
......
第 n 层有 3n 个结点
根据性质知道是一个等比数列,公比为 3,根据等比数列求和公式:
计算过程如下:
6. 小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息,则小明一共有( )种选择时间段的方案。
A. 31
B. 18
C. 21
D. 33
【答案】B
【考点】枚举法
【解析】枚举的方法讲解
① 只有一个练习时间段的情况
② 只有两个练习时间段的情况
③ 只有三个练习时间段的情况
7. 以下关于高精度运算的说法错误的是( )
A. 高精度计算主要是用来处理大整数或需要保留多位小数的运算
B. 大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商
C. 高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关。
D. 高精度加法运算的关键在于逐位相加并处理进位。
【答案】C
【考点】高精度运算
【解析】高精度乘法的时间取决于两个大整数的长度的乘积有关,高精度乘低精度 O(n) 的时间复杂度,高精度乘高精度 O(n*n) 的时间复杂度。
8. 后缀表达式“6 2 3 + - 3 8 2 / + * 2 ^ 3 +”对应的中缀表达式是 ( )
A. ((6 - (2 + 3)) * (3 + 8 / 2)) ^ 2 + 3
B. 6 - 2 + 3 * 3 + 8 / 2 ^ 2 + 3
C. (6 - (2 + 3)) * ((3 + 8 / 2) ^ 2) + 3
D. 6 - ((2 + 3) * (3 + 8 / 2)) ^ 2 + 3
【答案】A
【考点】栈的应用
【解析】首先 6,2,3 入栈,遇到第一个操作符 +,弹出 2 和 3 执行加法,然后将 2 + 3 的结果入栈,遇到操作符 -,弹出两个数 6 和 (2 + 3) 执行减法,然后将 (6 - (2 + 3)) 的结果入栈,3,8,2 依次入栈,遇到操作符 /,弹出 2 和 8 执行除法,然后将 8/2 入栈,遇到操作符 +,弹出 8/2 和 3 执行加法,然后将 (3 + 8/2) 入栈,遇到操作符 *,弹出 (6 - (2 + 3)) 和 (3 + 8/2) 执行乘法,然后将 (6-(2 + 3))*(3 + 8/2) 入栈,然后 2 入栈,遇到操作符 ^ 弹出 2 和 (6-(2 + 3))*(3 + 8/2) 执行异或操作,然后将 (6-(2 + 3))*(3 + 8/2)^2 入栈,然后 3 入栈,遇到操作符 +,然后弹出 3 和 (6-(2 + 3))*(3 + 8/2)^2 执行加法,然后将 (6-(2 + 3))*(3 + 8/2)^2 + 3 入栈,所以最终结果选 A。
9. 二进制数 101010 和 八进制数 166 的和为( )
A. 二进制数 10110000
B. 八进制数 236
C. 十进制数 158
D. 十六进制数 A0
【答案】D
【考点】进制转换
【解析】先将二进制数和八进制数转换成十进制
160 转换成16进制是 A0,八进制是 240,二进制数是 10100000。
10. 假设有一组字符 {a,b,c,d,e,f},对应的频率分别为 5%,9%,12%,13%,16%,45%。请问以下哪个选项是字符 a, b, c, d, e, f分别对应的一组哈夫曼编码?( )
A. 1111,1110,101,100,110,0
B. 1010,1001,1000,011,010,00
C. 000,001,010,011,10,11
D. 1010,1011,110,111,00,01
【答案】A
【考点】哈夫曼编码/霍夫曼编码
【解析】记住要点: 霍夫曼编码左 0 右 1,哈夫曼编码的形态不唯一,但是 WPL 一定是唯一的,哈夫曼树的形态如下:
哈夫曼树的形态不唯一,但是结点到根节点的路径的长度一定是唯一的,路径的长度是唯一的所以 WPL 是唯一,备考北化刷王道数据结构以前刷到过类似的题目hhh。合并的策略一定是选择 n 个结点中最小的两个结点进行合并,然后再将合并的结果放入合并的集合中。B、C、D 选可以从路径上排除,这个题比较好 。
11. 给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG。请问这棵树的正确后序遍历结果是什么?( )
A. EDBGFCA
B. EDGBFCA
C. DEBGFCA
D. DBEGFCA
【答案】A
【考点】树的遍历
【解析】前序遍历顺序: 根左右 中序遍历顺序: 左根右
后序遍历: 左右根 ==> EDBGFCA。
12. 考虑一个有向无环图,该图包括4条有向边:(1,2),(1,3),(2,4),和(3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?( )
A. 4,2,3,1
B. 1,2,3,4
C. 1,2,4,3
D. 2,1,3,4
【答案】B
【考点】拓扑排序、有向图
【解析】有向图如下所示
拓扑排序: 度为 0 的点从图中去掉。率先去掉 1 号点,(1,2),(1,3) 这两条边去掉,度为 0 的点是 2 和 3,可以是 2 这个点先去掉,也可以是 3 这个点去掉,最后去掉 4 这个点,所以拓扑序列是: 1, 2, 3, 4 或者 1, 3, 2, 4。
13. 在计算机中,以下哪个选项描述的数据存储容量最小?( )
A. 字节(byte)
B. 比特(bit)
C. 字(word)
D. 千字节(kilobyte)
【答案】B
【考点】数据存储
【解析】数据存储的基本单位: 字节(Byte),数据的最小存储单元: 比特(bit)。
1 Byte = 8 bit。
14. 一个班级有10个男生和12个女生。如果要选出一个3人的小组,并且小组中必须至少包含1个女生,那么有多少种可能的组合?( )
A. 1420
B. 1770
C. 1540
D. 2200
【答案】A
【考点】排列组合
【解析】
① 一个女生,2 个男生
② 两个女生,1 个男生
③ 三个女生
最终方案数: 540 + 660 + 220 = 1420。
15. 以下哪个不是操作系统?( )
A. Linux
B. Windows
C. Android
D. HTML
【答案】D
【考点】操作系统
【解析】HTML 前端三剑客之一,超文本标记语言。
第二部分 程序阅读
程序阅读
程序阅读 ①
01 #include<iostream>
02 #include<cmath>
03 using namespace std;
04
05 double f(double a,double b,double c){
06 double s=(a+b+c)/2;
07 return sqrt(s*(s-a)*(s-b)*(s-c));
08 }
09
10 int main(){
11 cout.flags(ios::fixed);
12 cout.precision(4);
13
14 int a,b,c;
15 cin>>a>>b>>c;
16 cout<<f(a,b,c)<<endl;
17 return 0;
18 }
假设输入的所有数都为不超过1000的正整数,完成下面的判断题和单选题:
16. (2分)当输入为“2 2 2”时,输出为“1.7321”( )
【答案】✔
【解析】a = 2, b = 2, c = 2, s = 3, 计算结果如下
17. (2分)将第7行中的"(s-b)*(s-c)"改为"(s-c)*(s-b)"不会影响程序运行的结果( )
【答案】✔
【解析】乘法交换率 = a*b = b*a,所以交换后结果并不会发送变化。
18. (2分)程序总是输出四位小数( )
【答案】✔
【解析】cou.precision(4): 保留四位小数输出。
19. (3分)当输入为“3 4 5”时,输出为( )
A. 6.0000
B. 12.0000
C. 24.0000
D. 30.0000
【答案】A
【解析】a = 3, b = 4, c = 5, s = 6,根据海伦-秦九韶公式知代码求三角形面积,根据 a, b, c 的关系得知是直角三角形,所以面积为 6,故选 A。
20. (3分)当输入为“5 12 13”时,输出为( )
A. 24.0000
B. 30.0000
C. 60.0000
D. 120.0000
【答案】B
【解析】a = 5, b = 12, c = 13,根据海伦-秦九韶公式知代码求三角形面积,根据 a, b, c 的关系得知是直角三角形,所以面积为 30,故选 B。
点评: 第一道题送分题 12 分应该拿满分,语法简单题,未拿到满分的同学应该好好进行自我反思为什么语法难度的阅读题会丢分。
程序阅读 ②
01 #include<iostream>
02 #include<vector>
03 #include<algorithm>
04 using namespace std;
05
06 int f(string x,string y){
07 int m=x.size();
08 int n=y.size();
09 vector<vector<int>>v(m+1,vector<int>(n+1,0));
10 for(int i=1;i<=m;i++){
11 for(int j=1;j<=n;j++){
12 if(x[i-1]==y[j-1]){
13 v[i][j]=v[i-1][j-1]+1;
14 }else{
15 v[i][j]=max(v[i-1][j],v[i][j-1]);
16 }
17 }
18 }
19 return v[m][n];
20 }
21
22 bool g(string x,string y){
23 if(x.size() != y.size()){
24 return false;
25 }
26 return f(x+x,y)==y.size();
27 }
28
29 int main(){
30 string x,y;
31 cin>>x>>y;
32 cout<<g(x,y)<<endl;
33 return 0;
34 }
21. (1.5分)f函数的返回值小于等于min(n,m)。( )
【答案】✔
【解析】f 函数是一个典型的最长公共子序列模型,属于动态规划里面的内容
v[i][j]: 表示字符串 1 前 i 个字符和字符串 2 前 j 个字符,属性值表示共有的子序列,状态转移方程如下
所以 f 函数最终的返回值应该小于等于两个字符串中最小的那个长度。
22. (1.5分) f函数的返回值等于两个输入字符串的最长公共子串的长度。( )
【答案】❌
【解析】子串: 要求连续; 子序列: 要求不连续,f 函数求的是最长公共子序列。
23. (1.5分)当输入两个完全相同的字符串时,g函数的返回值总是true( )
【答案】✔
【解析】f 函数的返回值是字符串的长度,所以 f(x+x, y) = y.size() 是恒成立,所以 g 函数的返回值总是 true。
24. (3分)将第19行中的“v[m][n]”替换为“v[n][m]”,那么该程序( )
A. 行为不变
B. 只会改变输出
C. 一定非正常退出
D. 可能非正常退出
【答案】D
【解析】当字符串 x 和 字符串 y 长度相等的情况情况不变,所以排除 B 和 C,当字符串 x 的长度大于或者小于字符串长度 y 导致数组越界访问,可能导致程序异常终止。
25. (3分)当输入为“csp-j p-jcs”时,输出为: ( )
A. 0
B. 1
C. T
D. F
【答案】B
【解析】csp-jcsp-j p-jcs,f 函数的返回值是 5,和 p-jcs 长度相等,g 函数返回 true,bool 类型的输出 true 自动转化成 1。
26. (3分)当输入为“csppsc spsccp”时,输出为: ( )
A. T
B. F
C. 0
D. 1
【答案】D
【解析】csppsccsppsc spsccp,f 函数的返回值是 6,和 spsccp 长度相等,g 函数返回 true,bool 类型的输出 true 自动转化成 1。
点评: 第二道题 f 函数考察同学们对于动态规划学习的检验。
程序阅读 ③
01 #include <iostream>
02 #include <cmath>
03 using namespace std;
04
05 int solve1(int n){
06 return n*n;
07 }
08
09 int solve2(int n){
10 int sum=0;
11 for(int i=1;i<=sqrt(n);i++){
12 if(n%i==0){
13 if(n/i==i){
14 sum+=i*i;
15 }else{
16 sum+=i*i+(n/i)*(n/i);
17 }
18 }
19 }
20 return sum;
21 }
22
23 int main(){
24 int n;
25 cin>>n;
26 cout<<solve2(solve1(n))<<" "<<solve1((solve2(n)))<<endl;
27 return 0;
28 }
27. (1.5分)如果输入的n为正整数,solve2函数的作用是计算n所有的因子的平方和 ( )
【答案】✔
【解析】solve2 函数代码解析如下:
28. (1.5分) 第13~14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次 ( )
【答案】✔
【解析】平方数 n 中出现 i 是 n 的因子时,必然 n/i 和 i 相同,同一个因子出现两次但是计算只计算一次,所以该判断题叙述正确。
29. (1.5分)如果输入的n为质数,solve2(n)的返回值为n2+1 ( )
【答案】✔
【解析】循环枚举 i 是从 1 开始枚举,质数的定义除了 1 和它本身外没有其余的因子,所以 sum = n*n + 1*1,所以叙述正确。
30. (4分)如果输入的n为质数 p 的平方,那么 solve2(n)的返回值为( )
A. p2+p+1
B. n2+n+1
C. n2+1
D. P4+2p2+1
【答案】B
【解析】n 的因子有 1, p, n,sum 统计的是 n*n + p*p + 1*1,题目说 n 是质数 p 的平方,那么 p*p = n,等价替换返回值等于 n*n + n + 1 或者 p*p*p*p + p*p + 1,两个答案的变形都算正确,所以最终选 B。
31. (3分)当输入为正整数时,第一项减去第二项的差值一定 ( )
A. 大于0
B. 大于等于0且不一定大于0
C. 小于0
D. 小于等于0且不一定小于0
【答案】D
【解析】特殊代值法排除,当 n 为 1 时 solve2(solve1(n))-solve1((solve2(n)))结果都为 0,因为模拟计算后发现都为 1,所以排除 A、C 两个选项;代入一个值 n为 3 的情况,solve1(3) = 9,solve2(9) = 1*1 + 9*9 + 3*3 = 91,solve2(3) = 1*1 + 3*3 = 10,solve1(10) = 100,91 - 100 = -9,所以选 D,暑期集训说过这种结论题一般代值大概率能找出正确答案,算是做题技巧。
32. (3分) 当输入为“5”时,输出为 ( )
A. 651 625
B. 650 729
C. 651 676
D. 652 625
【答案】C
【解析】solve1(5) = 25,solve2(25) = 1*1 + 5*5 + 25*25 = 651。
solve2(5) = 1*1 + 5*5 = 26,solve1(26) = 26*26 = 676。
点评: 数学知识因数分解。
第三部分 程序完善
程序完善
(1)(寻找被移除的元素)问题:原有长度为 n+1 公差为 1 等升数列,将数列输到程序的数组时移除了一个元素,导致长度为 n 的开序数组可能不再连续,除非被移除的是第一个或最后之个元素。需要在数组不连续时,找出被移除的元素。试补全程序。
01 #include <iostream>
02 #include <vector>
03
04 using namespace std;
05
06 int find missing(vector<int>& nums){
07 int left = 0, right = nums.size() - 1;
08 while (left < right){
09 int mid = left + (right left) / 2;
10 if (nums[mid] = mid + ①){
11 ②;
12 }else{
13 ③
14 }
15 }
16 return ④;
17 }
18
19 int main(){
20 int n;
21 cin >> n;
22 vector<int> nums(n);
23 for (int i= 0; i< n; i++) cin >> nums[i];
24 int missing_number = find_missing(nums);
25 if_(missing_number == ⑤) {
26 cout << "Sequence is consecutive" << endl;
27 }else{
28 cout << "Missing number is " << ,missing numbeer << endl;
29 }
30 return 0;
31 }
二分适用条件: ① 区间单调性 ② 二分的答案满足单调性
单调递增区间查找 >= x 的最小值
int Find_L(int n, int num){ // n 表示 n 个数, num 查询的数
int L = 0, R = n-1; // L:左端点, R:右端点
while(L < R){
int mid = (L+R)>>1; //中间点
if(a[mid] >= num) R = mid; //左子区间
else L = mid + 1; //右子区间
}
return L; //二分的 >= num 的最小值
}
单调递增区间查找 <= x 的最大值
int Find_R(int n, int num){ //n:n个元素,num:查询值
int L = 0, R = n - 1; //L:左端点 R:右端点
while(L < R){
int mid = (L + R + 1)/2; //中间点
if(a[mid] <= num) L = mid; //右区间
else R = mid - 1; //左区间
}
return R; // 二分 <= num 的最大值
}
33. ① 处应填( )
A. 1
B. nums[0]
C. right
D. left
【答案】B
【解析】等差数列公差 1 说明原序列具有连续性,连续必然满足 nums[0] + mid == nums[mid],不连续 nums[mid] 必然大于 nums[0] + mid。
34. ②处应填( )
A. left=mid+1
B. right=mid-1
C. right=mid
D. left=mid
【答案】A
【解析】当 if 成立说明左区间连续,答案必然在右区间 [mid+1, right] ,通过不断调整左指针 left 和右指针 right 来确定答案处于哪个区间,因此需要将 left 修改成 mid+1。
35. ③处应填( )
A. left=mid+1
B. right=mid-1
C. right=mid
D. left=mid
【答案】C
【解析】if 不成立答案处于左区间 [left, mid],只需要修改指针 right = mid。
36. ④处应填( )
A. left+nums[0]
B. right+nums[0]
C. mid+nums[0
D. right+1
【答案】A
【解析】返回的是被删除的数,被删除的数即不连续的位置 + 起始值。
37. ⑤处应填( )
A. nums[0]+n
B. nums[0]+n-1
C. nums[0]+n+1
D. nums[n-1]
【答案】D
【解析】如果 n 个数连续, left = right = n-1,返回的数必然是序列中的最后一个数,反之则返回的数即是被删除的数。
这个题大多数认真学的同学都是满分,注意认真学并不是说上课听讲,而是自己课后自己动手去模拟过二分的过程,听老师讲懂了和自己动手验证老师上课讲的内容记忆会更加深刻。
②(编辑距离) 给定两个字符串,每次操作可以选择删除 (Delete)、插入 (Insert)、替换 (Replace),一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。
1.#include <iostream>
2.#include <string>
3.#include <vector>
4.using namespace std;
5.
6.int min(int x,int y,int z){
7. return min(min(x,y),z);
8.}
9.
10.int edit_dist_dp(string str1,string str2){
11. int m=str1.length();
12. int n=str2.length();
13. vector<vector<int>> dp(m+1,vector<int>(n+1));
14.
15. for(int i=0;i<=m;i++){
16. for(int j=0;j<=n;j++){
17. if(i==0)
18. dp[i][j]= ①;
19. else if(j==0)
20. dp[i][j]= ②;
21. else if(③)
22. dp[i][j]= ④;
23. else
24. dp[i][j]=1+min(dp[i][j-1],min(dp[i-1][j],⑤));
25. }
26. }
27. return dp[m][n];
28.}
29.
30.int main(){
31. string str1,str2;
32. cin>>str1>>str2;
33. cout<<"Mininum number of operation:"
34. <<edit_dist_dp(str1,str2)<<endl;
35. return 0;
36.}
一、状态表示:dp[i][j]
1. 集合:将 str1[1~i] 和 str2[1~j] 匹配的操作数量的集合
2. 属性:最少操作次数
二、状态计算:
1. 思想-----集合的划分
2. 集合划分依据:根据最后一步进行划分
删除操作:dp[i][0] = i;
插入操作:dp[0][i] = i;
3. 具体划分为3类:
1. 增加:dp[i][j] = dp[i, j - 1] + 1
2. 删除:dp[i][j] = dp[i - 1, j] + 1
3. 修改:dp[i][j] = dp[i - 1, j - 1] + 1 (str1[i] != str2[j])
4. 匹配:dp[i][j] = dp[i - 1][j - 1] (str1[i] == str2[j])
38. ① 处应填( )
A. j
B. i
C. m
D. n
【答案】A
【解析】第一个字符串长度为 0,第二个字符串长度为 j,将第一个字符串转换成第二个字符串操作的次数是 j,这个操作是增加。
39. ② 处应填( )
A. j
B. i
C. m
D. n
【答案】B
【解析】第一个字符串长度为 i,第二个字符串长度为 0,将第一个字符串转换成第二个字符串操作的次数是 i,这个是删除操作。
40. ③处应填( )
A. str1[i-1]==str2[j-1]
B. str1[i]==str2[j]
C. str1[i-1]!=str2[j-1]
D. str1[i]!=str2[j]
【答案】A
【解析】匹配操作,第一个字符串和第二个字符串匹配。
41. ④处应填( )
A. dp[i-1][j-1]+1
B. dp[i-1][j-1]
C. dp[i-1][j]
D. dp[i][j-1]
【答案】B
【解析】匹配的情况不需要操作
42. ⑤处应填( )
A. dp[i][j] + 1
B. dp[i-1][j-1]+1
C. dp[i-1][j-1]
D. dp[i][j]
【答案】C
【解析】前 i-1 个字符与前 j 个字符最少操作次数、前 i 个字符与前 j-1 个字符最少操作次数、前 i-1 个字符与前 j-1 个字符最少操作三者取 min 后 + 1。
第四部分 总结
关于孩子是否适合走信奥这条路我的观念依旧是能从中学到什么,对以后的学习生活有什么帮助,如果太看中成绩,那么 99.9999% 的学生都是失败者。
言归正传说一下考试试卷考点分析:
暑期集训的内容没有花太多的时间讲动态规划,因为想的是不太好挖空,主要太简单,没想到今年的题型比去年的简单,对于系统学习的同学大部分都是 90 左右,这里的系统学习不是说考试出现的概率小就不考的误区,程序阅读没学过动态规划影响不大,暑期初赛集训课后有认真思考的同学 65 左右。
学习建议:
① 戒骄戒躁,静心学习
② 按照要求课后自觉上机练习(考场两小时,课后两三年功夫)
③ 戒掉功利主义的心态,如果只是为了保送清华北大建议放弃,打信奥能进清北,全力冲刺高考文化课妥妥也牛掰(破音)
④ 不要相信不劳而获,很多宣传主打一个就是夸张宣传,比如跟着谁学零基础包 CSP-J 获奖(主打吹牛)、包 CSP-J 晋级(主打考级)
⑤ 系统学习
⑥ 职业规划,未来规划专业不读计算机、不读研、不选择和互联网相关行业打不打信奥都没有什么关系
教学反思:
① 不讲概率事件,也不会按着家长的要求去讲机构的内容,不会再将整个竞赛体系打乱,union 是 2023 新大纲的内容,认为考是一个小概率事件,但是确实是考了,动态规划程序题小概率事件考了
② 将竞赛体系进行顺序的调整,考核不通过的学员不会讲下一个阶段的内容
③ 第一年参赛只能说去和已经获奖的对手同台竞技,第一次比赛结束后续一定要好好学习,课后认真刷题(杜绝水题)
④ 和机构博弈的学员不带,就是机构不开课,家长就说自己找了教练,教务必然会各种挽留家长(已经遇到过几次,心累,没有那个功夫和机构斗嘴皮子,您说的全对!每天笑哈哈,拒绝精神内耗)
⑤ 要想出成绩不会再顺着学员的心态数据削弱,完全掌握就是完全掌握,有些细节不注意错就是错,有则改之,无责加勉励
*请认真填写需求信息,我们会在24小时内与您取得联系。