图中画波浪线的地方,虽然-(2^(n-1)-1)=-2^(n-1)+1,但1.1111这样的数,它的数值的确是-15,这该怎么理解?

轻松实现Flash的全屏播放
  许多人都看过这样的效果:把光盘放入光驱后,光盘自动运行,接着便是一段Flash制作的开场动画,动画是全屏播放的,且右键点击无效,动画播放结束后,出现“关闭”按钮,单击该按钮后,全屏动画关闭。
  其实上面提到的全屏播放以及取消右键菜单等效果都是靠Fscommand指令在发挥作用。Fscommand指令主要是用来控制Flash影片播放器的,但也可以用来打开其它的应用程序。
Fscommand指令只有在Flash影片播放器执行时才有效(.swf和.exe),在Flash制作过程中,按“Ctrl+Enter”预览动画,以及把动画发布成网页文件时,此指令无法发挥它的功能。
  Command是指令的相关命令,arguments是命令的参数。
  下面我们就来讲讲如何通过Fscommand指令来实现全屏播放、取消Flash播放时的右键菜单以及关闭Flash动画。
  1、全屏播放Flash  “Fullscreen”是全屏的意思,在默认的情况下,Flash动画不是以全屏播放(false),如果需要让动画以全屏状态播放,就必须把Fullscreen命令设置为True,写为:
  根据需要,我们可以把它写到帧、按钮、MC(Movie Clip)中。
  Showmenu命令是用来设置是(True)否(false)显示Flash动画播放器的快捷菜单的全部指令,即右击鼠标时弹出的菜单,默认为True,如果要取消弹出的菜单,必须在第一帧这样设置:
  quit命令是用来关闭播放器的.swf和.exe文件,该命令没有参数,写为:
  fscommand ("quit");  如果你想在flash动画结束时出现一个关闭动画的按钮,可以按下面的步骤做。
  执行“Insert”下的“New Symbol”(或按Ctrl+F8),在弹出的窗口中选Button,然后制作一个简单的按钮,回到场景中,选中最后一帧,从“Library”中把刚刚建立的按钮拖到场景中,因为该按钮在动画的最后才显示。
  给按钮写上如下代码,则实现按下按钮即关闭flash动画。
1.影片的播放与停止:
gotAndplay(“场景名称”,)//跳到指定场景帧并连续播放。
3.控制影片剪辑的播放与停止:tellTarget命令
二、几种功能元件的制作方法1.计时器的制作单击菜单Insert/new symbol,在弹出的对话框中输入插入的符号名称(如:计时器),确定后选择文字工具,属性为动态(Dynamic ";gotoAndStop(1);在第16帧插入空关键帧。在该帧上画一个形如“x”的图或输入文本“x”,在第30帧插入关键帧,帧AAction为_root.ans=" ":gotoAndStop(31);在第31帧插人空白关键帧,在该帧上输人静态文本“请重作,按enter键确定。“在该帧输入脚本:“stop();”至此,该符号制作主或:例如:
在上例括号位置插入动态文本框,不输入任何内容。该文本框变量名为:ans。在该帧适当位置插入电影“对错提示”,该电影片断名属性为“ql”,在该电影片断上输人脚本:

制作一个符号(如“知识回顾”),符号类型为“电影片段”。在这个符号中将需要回顾的知识点逐帧展示,每帧动作脚本为:stop()回到主场景,在需要的帧插入该符号,该帧脚本为:stop();插入后.单击该符号.输人脚本:
这样即实现了按任一键便可跳转到指定帧的效果。此例仅仅是一种基本方法,读者朋友在应用时可以有更多的扩展。
5.鼠标指向显示填空题答案
显示一些问题的答案,可以将这一答案制成—个按钮,在这一按钮的Up帧可以为空白关键帧,其它帧为答案内容。在问题的答案处插入该按钮,在该帧输入脚本:

flash场景之间相互跳转的实现方法


在制作flash动画的时候,可能会有有很多的mc
有时会把它放到几个场景中,那么在场景中的跳转如何实现呢?
主场景2中的mc放到场景2的时间轴上按钮的as: 
on release {
gotoAndPlay("场景1",1)
并且在最后一帧加stop()
第二个场景2里面只有一个mc,在这个mc的最后一帧是stop和一个replay按钮
【即告知按钮回到场景1的第一帧】

方法四(给场景起不同的名字) ...
方法四(给场景起不同的名字)
第二个sence里面只有一个mc,在这个mc的最后一帧是stop和一个replay按钮
on release {
gotoAndPlay("sence1",1)
结果按下后却是从这个mc的第一帧开始播放,而不是从sence1的第一帧
这是因为主场景的名字默认为senceN
MC里也可以有多个场景,而mc也是默认为senceN
所以当你在MC用上gotoAndPlay ("scene1", 1);时,指的是所在场景中MC里的第一帧,而不是主场景解决的方法,就是给场景定义不同的名字
scene1我们改名为:主场景
scene2我们改名为:次场景1
如果想实现按钮点击后从次场景播放就可以在按钮上写上:
方法五(利用标签label)
我们在控制动画的时候一般也不是从开始播放,可能是希望从某个场景的某一个关键帧开始播放,那么标签是最好的实现方法;
例如我们希望点击上面的按钮的时候让动画从主场景中的label1开始播放,那么按钮上的as应该为:
例如有3个场景,我们希望点击上面的按钮的时候让动画从次场景1中的label4开始播放,那么按钮上的as应该为:
如果想实现按钮点击后从次场景播放

3,什么叫矢量图?矢量图可以任意缩放而不影响Flash的画质,位图图像一般只作为静态元素或背景图,Flash并不擅长处理位图图像的动作,应避免位图图像元素的动画。
4,如何迅速地对齐不同中的物件?
或是工具栏〉〉窗口〉〉面板〉〉排列“Ctrl+K” 调出排列面板来。图例
)〉〉 Alpha(透明度) 调整就可以了
6,做好地Flash放在html上面以后,它老是循环,怎么能够让它不进行循环?
再加上一个load地MC循环播放在这两帧的中间,就OK了。8,怎样点击一个按钮打开一个页面html而不是一个祯.
制作一个按钮,上面地AS直接写:
这里地***.html就是你要打开地页面文件名,当然也可以是某某URL地址,比如说
9,我在按钮地OVER祯放置了一个很大地MC,为什么我要没有点击到按钮鼠标就变成了手地状态?
按钮真正激活区是在HIT(按下)祯地位置,如果想控制按钮的位置为一定值,可以在HIT祯绘制一个透明地图形来判断.
10,如果屏蔽鼠标右键?FS命令都是什么意思?

不影响影片本身的尺寸)
11,在FLASH中的字体总是很模糊,用变清晰地办法吗?
写好文本以后CTRL+T打开文本设置面板,在最后地文本框选项那里框选使用设计字体就行了.(注意最好使用宋体,尺寸为12或者8,这样比较工整)
12,我想做一个MTV,怎么导入声音呀?
很简单,CTRL+R导入你地声音文件就行了.
13,我制作地MTV声音和歌词总是不同步.
CTRL+F打开祯控制面板,右边找到声音选项卡,调整声音地同步效果为STREM(音频数据流)模式就行了.
16,怎样可以做出很漂亮的字体特效?
用第三方软件Swish和Swfx这些,闪吧地软件资源有下载.
19,如何加载一个SWF文件
添加一个空地MC。实体名为ok,

如果是插入现有的html页,可以先发布,再copy相应的代码到html文件。

30.问:如何优化Flash动画,使文件更小,播放更流畅?
答: Flash作为Macromedia公司出品的网页制作与动画创作的专业软件,操作简便,功能强大,现已成为交互式矢量图形和Web动画事实上的标准。
  但是,如果制作的Flash电影文件较大,动辄几百k的话,常常会让网上浏览者在不断等待中失去耐心。对Flash电影进行优化就显得很有必要了,但前提是我们不能有损电影的播放质量。
  1.多使用符号(Symbol)。如果电影中的元素有使用一次以上者,则应考虑将其转换为符号。重复使用符号并不会使电影文件明显增大,因为电影文件只需储存一次符号的图形数据。
  2.尽量使用渐变动画。只要有可能,应尽量以“移动渐变”(Create Motion Tween)的方式产生动画效果,而少使用“逐帧渐变”(-By-)的方式产生动画。关键帧使用得越多,电影文件就会越大。
  3.多采用实线,少用虚线。限制特殊线条类型如短划线、虚线、波浪线等的数量。由
于实线的线条构图最简单,因此使用实线将使文件更小。
  4.多用矢量图形,少用位图图像。矢量图可以任意缩放而不影响Flash的画质,位图图像一般只作为静态元素或背景图,Flash并不擅长处理位图图像的动作,应避免位图图像元素的动画。
  5.多用构图简单的矢量图形。矢量图形越复杂,CPU运算起来就越费力。可使用菜单命令Modify (修改)/Curves(曲线)/Optimize(优化),将矢量图形中不必要的线条删除,从而减小文件。
  6.导入的位图图像文件尽可能小一点,并以JPEG方式压缩。
    7.音效文件最好以MP3方式压缩。MP3是使声音最小化的格式,应尽量使用。
  8.限制字体和字体样式的数量。尽量不要使用太多不同的字体,使用的字体越多,电影文件就越大。尽可能使用Flash内定的字体。
  10.尽量不要将字体打散(菜单命令为Modify / Break Apart)。字体打散后就变成图形了,这样会使文件增大。
  11.尽量少使用过渡填充颜色。使用过渡填充颜色填充一个区域比使用纯色填充区域要多占50字节左右。
  12.尽量缩小动作区域。限制每个关键帧中发生变化的区域,一般应使动作发生在尽可能小的区域内。
  13.尽量避免在同一时间内安排多个对象同时产生动作。有动作的对象也不要与其它静态对象安排在同一图层里。应该将有动作的对象安排在各自专属的图层内,以便加速Flash动画的处理过程。
  14.用Load Movie命令减轻电影开始下载时的负担。若有必要,可以考虑将电影划分成多个子电影, 然后再通过主电影里的Load Movie、Unload Movie命令随时调用、卸载子电影。
    15.使用预先下载画面。如果有必要,可在电影一开始时加入预先下载画面(Preloader),以便后续电影画面能够平滑播放。较大的音效文件尤其需要预先下载。
  16.电影的长宽尺寸越小越好。尺寸越小,电影文件就越小。可通过菜单命令Modify(修改)/Movie(电影),调节电影的长宽尺寸。
  17.先制作小尺寸电影,然后再进行放大。为减小文件,可以考虑在Flash里将电影的尺寸设置小一些,然后导出迷你SWF电影。接着将菜单File(文件)/Publish Settings…(发布设置…)中HTML选项卡里的电影尺寸设置大一些,这样,在网页里就会呈现出尺寸较大的电影,而画质丝毫无损、依然优美。
  在进行上述修改时,不要忘记随时测试电影的播放质量、下载情况和查看电影文件的大小。

该项目存放一些自己做过的算法的题目,主要以《剑指offer》中的算法为主。

面试题1:赋值运算符函数(由于该题为C++题目,暂时不做解答)

面试题3:二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。

题目:请实现一个函数,把字符串中每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。
其实这里应该表述成,把字符数组中的空格替换为%20。这样才能体现出这个题目问题的本质。

扩展:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有数字都是排序的。

面试题5:从尾到头打印链表

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出该图6所示的二叉树并输出它的头结点。二叉树结点的定义如下:

面试题7:用两个栈实现队列

题目:用两个栈实现一个队列。队列的声明如下,,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

拓展:用两个队列实现栈

面试题8:旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.

面试题9:斐波那契数列

题目一:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下:
题目2:一只青蛙一次可以跳上1个台阶,可以跳上2级。求该青蛙跳上一个n级的台阶共有多少种跳法。(等价于题目1)

拓展1:在青蛙跳台阶的问题中,如果把条件改成:一只青蛙一次可以跳上1级台阶,也可以跳上2级。。。。。。它也可以跳上n级,此时该青蛙跳上一个台阶总共有多少种跳法?
拓展2:我们可以用2X1(下图左边)的小矩形横着或者竖着去覆盖更大的矩形。请问用8个2X1的小矩形无重叠地覆盖一个2X8的大矩形(下图右边),总共有多少种方法?

面试题10:二进制中1的个数

题目:请实现一个函数,输入一个整数,输出该数二进制中1的个数。例如把9表示成二进制是1001,有2位是1。因此,如果输入9,该函数输出2。 答案:

面试题11:数值的整数次方

面试题12:打印1到最大的n位数

题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999.

拓展:定义一个函数,在该函数中可以实现任意两个整数的加法。

面试题13:在O(1)时间删除链表结点

题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点和函数的定义如下:

面试题14:调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 答案:

面试题15:链表中倒数第k个结点

题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点时倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6这个链表的倒数第3个结点是值为4的结点。 链表结点定义如下:

拓展1:求链表的中间结点。如果链表中结点总数为奇数,则返回中间结点,如果结点总数是偶数,则返回中间两个结点的任意一个。
拓展题目2:判断一个单项链表是否形成了环形结构。

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

面试题17:合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然按照递增排序的。例如输入如下图中的链表1和链表2,则合并后的升序链表如链表3所示。


面试题18:树的子结构

题目:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:

例如:下图中的两颗二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构。

面试题19:二叉树的镜像

题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。

面试题20:顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:

面试题21:包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)

面试题22:栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈顶压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列。序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。

面试题23:从上往下打印二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入如下图中的二叉树,则依次打印出8、6、10、5、7、9、11


面试题24:二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
例如输入数组{5,7,6,9,11,10,8},则返回true,因为这个整数序列是如下图二叉搜索树的后序搜索结果。如果输入的数组是{7,4,6,5},由于没有哪棵二叉搜索树的后序遍历的结果是这个序列,因此返回false。

面试题25:二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点形成一条路径。

面试题26:复杂链表的复制

题目:请实现函数ComplexListNode clone(ComplexListNode pHead),复制一个复杂的链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者null。结点的定义如下:

例如如下图是一个含有5个结点的复杂链表。图中实线箭头表示m_pNext指针,虚线箭头表示m_pSibling指针。为了简单起见,指向null指针没有画出。

面试题27:二叉搜索树和双向链表

题目:输入一颗二叉搜索树,将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。比如输入如下图中左边的二叉搜索树,则输出转换之后的排序双向链表。

面试题28:字符串的排序

题目:输入一个字符串,打印出该字符串中字符的所有排序。例如输入字符串abc,则打印出由字符a、b、c所能排序出来的所有字符串abc、acb、bac、bca、cab和cba

拓展题目1:如果输入n个字符,则这n个字符能构成长度为1的组合、长度为2的组合、。。。、长度为n的组合。求n个字符的所有的组合(所有长度)

拓展题目2:输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上(如下图所示),使得正方体上三组相对的面上的4个顶点的和都相等。


拓展题目3(8皇后问题):在8X8的国际象棋上摆放8个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请问总共有多少种符合条件的摆法?

面试题29:数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字,例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过了数组长度的一半,因此输出2.

面试题30:最小的k个数

题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1、2、3、4

面试题31:连续子数组的最大和

题目:输入一个整数数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)

面试题32:从1到n整数中1出现的次数

题目:输入一个整数n,求从1到n这n个整数的十进制中1出现的次数。例如输入12,从1到12这些整数中包含1,10,11,12,1一共出现了5次。

面试题33:把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字321323。

题目:我们把只包含因子2、3、5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个丑数。

面试题35:第一个只出现一次的字符

题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'.

面试题36:数组中的逆序对

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

面试题37:两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:


面试题38:数字在排序数组中出现的次数

题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.

面试题39:二叉树的深度

题目:输入一个二叉树的根结点,求该数的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

拓展:输入一颗二叉树的根结点,判断该数是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一颗平衡二叉树。例如,下图中的二叉树就是一颗平衡二叉树.


面试题40:数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写出程序找出这两个只出现一次的数字。要求时间复杂度时O(n),空间复杂度是O(1)。

面试题41:和为s的两个数VS和为s的连续正数序列

题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。

题目二:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8,所以结果打印出3个连续序列1~5、4~6和7~8。

面试题42:翻转单词顺序 VS 左旋转字符串

题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出“student. a am I”.

题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefe"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。

面试题43:n个骰子的点数

题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

面试题44:扑克牌的顺子

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字

面试题45:圆圈中最后的剩下的数字

题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

面试题47:不用加减乘除做加法

题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、X、÷四则运算符号

面试题48:不能被继承的类

题目:用C++设计一个不能被继承的类。

该题因为Java有final关键字表示一个类型不能被继承,所以该题不能使用Java实现。

面试题49:把字符串转换成整数。

题目:把字符串转换成整数

面试题50:树中两个结点的最低公共祖先

题目:树中两个结点的最低公共祖先

1.实现一个排序算法,要求时间效率O(n).对公司所有员工的年龄排序,公司总共有几万名员工。可以用辅助空间,只允许使用常量大小辅助空间,不得超过O(n)。

2.比较两个数组是否相等,都含有一样的元素,并且一样的元素的个数相同。

4.不用比较,找出两个数的较大值和较小值

1.如果要筛选出某个相同的数,使用HashMap。

3.如果从前往后复制每个数字(或字符)需要移动数字(或字符)多次,可以考虑从后往前复制。

4.把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0.

5.当用一个指针遍历链表不能解决问题的时候,可以使用两个指针遍历链表。可以让其中一个指针遍历的速度快一点,或者让它先在链表上走若干步。

6.如果面试题是要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根结点,再基于根结点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。

7.如果需要判断多个字符是不是在某个字符串里出现或者统计多个字符在某个字符串中出现的次数,我们可以考虑基于数组创建一个简单的哈希表,这样可以用很小的空间消耗换来时间效率的提升。

8.计算数列,数组区间和的,可能解法是先求从开始到某个数j的总和sum(j),然后再根据之前得到的从开始到某个数i的总和sum(i),两者相减得到区间和sum(j-i),这样做会比较简单,减少重复计算。

其他类似的Java题解

  1. 【程序员乔戈里】公众号的66道剑指offer题解附答案

光看本文的公式量你就知道有多通俗了. Feynman 图是粒子物理的入门级黑话, 但由于只要画个图就能对着 Feynman 规则嗯算, 所以很多人可能甚至会在学习量子场论之前就接触过 Feynman 图的计算··· 然后关于 Feynman 图究竟是啥意思似乎又众说纷纭: 教你量子场论的老师一定会强调这玩意儿只是级数展开的项, 仅此而已; 但那些搞唯像学, 尤其是搞粒子实验的人可能跟你谈 Feynman 图的时候就直接当它是实空间的粒子轨迹了. 令新手感到神秘的是, 他们那些物理层面想当然式的解释好像还真有那么点儿道理. 关于这个问题我会留到最后去讲, 免得你看完就走人了.

是的, 我本人也常说这种浑话, 但我绝不跟初学者瞎说.
初学时把精力全都放在搞清具体的数学结构上就好了, 听太多浑话绝对是没好处的.

我本来是不太想写这个内容的, 这和我不愿意写自由场论的原因是一样的. 就是说这些东西即简单又繁琐, 所以总感觉写起来会吃力而不讨好. 但我又发现后面无论是打算写重整化还是介绍一些粒子物理的非微扰方法, 都不可能绕开这个问题, 就如果不写一下的话后续内容读起来都会有些云里雾里. 所以, 只能, 还是简单地梳理一下.

由于绝大多数人都是从正则量子化入门的, 所以本文不会去涉及路径积分. 我知道这个话题对本科仔相当有吸引力··· 所以你可能会问没学过场论看不看得懂呢? 也许可以? 我也不知道, 但我会尽量试着让本文不那么需要真学过一遍自由理论才能看懂.

但你至少得知道传播子是啥:

上文开头开始就解释了我为何会使用 {{\phi }^{4}} 这样纯粹人造的理论作为例子, 而本文将继续这样使用.


首先我们必须认识到市面上有两类 Feynman 图, 而这两类又分别在坐标与动量空间中各有一款解读规则. 要这都搞不清楚那学起来就会很吗混乱. 不过好在坐标与动量空间中的画法区别不大, 而且特别容易理解, 所以下面就先谈谈分为哪两类:

  • 关联函数的 Feynman 图. 这应该才是最根本的 Feynman 图, 因为关联函数才是量子场论中最 general 的物体. 所以我们接下来会用关联函数来定义 Feynman 图.
  • 散射过程的 Feynman 图. 由 LSZ 约化公式我们不难看出散射过程 Feynman 图实际上就是去掉了外腿传播子的关联函数 Feynman 图, 这是因为散射振幅就是去了外腿传播子的关联函数. 但有些方向··· 尤其是搞实验的人可能不想学那么深就根本不去牵扯关联函数, 于是他们就越过了 LSZ 约化公式强行引入了散射过程的 Feynman 图与 Feynman 规则. 而这个做法下产生的一些资料却让不少试图自学的人陷入深深的迷茫.

至于说坐标与动量空间··· 其实这个问题特别简单, 只要对着关联函数来看就很清晰了. 我们知道关联函数通过 Fourier 变换可以让自变量转换于坐标与动量之间, 然后后面我们会以能写出具体形式的两点关联函数为例来清晰地展示这个转换过程.

最后就是, 本文仅打算通过关联函数来定义 Feynman 图, 而散射过程的 Feynman 图只要在这个基础上结合 LSZ 约化公式就可以给它三言两语讲清楚. 这就是说散射过程的 Feynman 图将要作为一个具体例子留到介绍 LSZ 约化公式的那篇 note 里去讲.


4. 真空图与分母间那不可告人的关系

7. 为啥老有人指着传播子说是粒子呢?


0. 两点关联函数与微扰展开:

这玩意儿虽然包含了我们所关心粒子的大量的信息, 但我们却因不会求解 {{\phi }^{4}} 理论的运动方程而只能望着关联函数干流泪.

那怎么办? 那就只能把相互作用的 -{\lambda {{\phi }^{4}}}/{4!} 项当作微扰项了咯. 这样我们就可以用自由理论的量来逐阶近似 {{\phi }^{4}} 理论的量了, 因为自由理论的运动方程我们是会解的. 其实这样做也很合理, 因为你回忆一下量子力学就会发现时间演化算符的指数上是有一个 理论就是展开式每高一阶就多一个 {{\hbar }^{-1}}, 但同时也会多两个传播子, 所以总的来说就是多一个 \hbar . 所以虽然我们直观上看到的展开是关于 \lambda 的幂次做的, 但你也可以说微扰展开的本质是关于 \hbar 做的展开, 所以高阶图带来的才叫量子修正.

所谓的微扰展开就是把这个指数函数展开, 很显然, 我们将得到一个关于 \lambda 的幂级数. 下面我们就具体到两点关联函数的情形并做展开:

咱先不吊分母, 单研究下分子的:

  • 先定义内点外点: 外点指的是关联函数的变量, 在这里就是 {{x}_{1}},{{x}_{2}}; 而内点指的是级数展开的积分里面的积分变量, 在这里就是 {{x}_{3}},{{x}_{4}},\cdots , 可以有无穷多个, 但最后都会被积分积掉.
  • 内点场都带了个 {1}/{4!}, 这很好, 因为到时候我们对这些关联函数用 Wick 定理的时候一个内点的收缩方式有 4! 个, 刚好能跟这个系数抵消掉. 所以我们可以通过使用 Wick 定理时同一内点只考虑一种收缩方式来直接消掉这个系数. 举个例子的话就是说, 当我们让 \phi ({{x}_{1}})\phi ({{x}_{3}}) 收缩构成 Feynman 传播子时, 你就不要去思考究竟是跟哪个 \phi ({{x}_{3}}) 了. 不过真要细究的话其实还是有点儿问题的, 就是说如果内点跟自己收缩了或者两个不同内点之间相互收缩了多次的话··· 那不就没有 4! 那么多种收缩方式了吗? 所以这时候系数就还会剩点儿下来, 这剩下来的部分就是所谓的对称性因子 {{\rho }_{\text{sym}}}, 不过我们暂时还是先别管系数了.

通过 Wick 定理我们知道, 自由场的时序乘积将等于其所有可能的 Wick 收缩情形的正规乘积之和. 而对两个场进行 Wick 收缩指的就是把它俩打包成一个 Feynman 传播子. 所有可能的收缩情形本来是包括不完全收缩的情况的, 但如果不完全收缩那剩下来的部分就要取正规乘积, 而正规乘积的真空期望一定是零, 所以如果被自由真空\left|

笑了, 也太麻烦了, 我才懒得写. 反正我们目的是介绍 Feynman 图, 又不是真的要去计算关联函数.
所以就··· 留给聪明的读者做习题好了.

其实坐标空间的 Feynman 图就是点和线构成的图, 画法也很简单, 就是关联函数里有几个点图上就点几个点, 然后每个 Feynman 传播子都是一条线, 传播子的变量就是线的端点. 噢, 这里顺便定义下内线外线: 内线就是内点之间的传播子线, 外线就是连着外点的传播子线.

下面出现的 {{\rho }_{s\text{ym}}} 表示的是对称性因子, 就是说如果内点跟自身收缩了的话就凑不齐 4! 种收缩情形了, 这样一来就无法完全抵消分母上的 4! 了, 而剩下来的系数就叫对称性因子. 下面幂级数展开带来的系数 {1}/{n!} 只是暂时的, 定义完 Feynman 规则后就不需要考虑了.

就不再继续举例子了, 我相信就算是小学生也应该整明白了. 没错, Feynman 图就是这样画出来的, 它们实际上就是一些传播子构成的点线图.

现在你再回头看看这些图, 是不是全都是一个内点发出四条线的顶角与外点拼接而成的? 所以如果你脑子特别好使的话, 那甚至都不用算出具体的每一项就可以直接画 Feynman 图了, 就是拿这些顶角与外点嗯拼嘛. 只要是你能画出来的图, 就一定是存在的, 别画漏了就是了. 最后就是有几个内点就是几阶的图, 显然越高阶的图贡献就越小.

其实到我们搞 QCD 的, 通常都是直接画 Feynman 图了. 画不全怎么办? 那就少算点儿咯, 反正都是近似嘛. 主要是圈图真的很难算, 少画一张少算一张美滋滋嗷.

然后组会里经常就会有这样的对白:

『为啥这帮墨西哥佬算出来的预言效果那么差? 』
『他们没考虑这张图, 而且这张图看起来还贡献不小的样子. 』
『其它文章都没考虑吗? 』
『嗯, 有点难算, 参数太多了大家都不想算. 』

最后就是谈一谈线的风格的问题. 在这个只有一种场的理论中当然就不用考虑这个问题, 但一般的规范理论比如说 QED 或 QCD 等都是既有旋量场又有矢量场的. 于是展开式中就会既有俩旋量场收缩出来的 Feynman 传播子又有俩矢量场收缩出来的传播子, 所以为了区分这些不同类型的传播子我们就会选择不同类型的线, 一般都是什么实线代表旋量场、波浪线代表矢量场然后虚线代表标量场之类的. 其实这些都是约定上的小问题, 见多了就习惯了, 总之只要知道线就是传播子就行了.

既然是根据式子定义的 Feynman 图, 那对着图应该能还原出式子才对, 而这个还原过程遵循的对应关系就叫 Feynman 规则. 下面就以这样一张图为例谈谈还原过程:

直接画图的话你就会发现那些内点其实是不必被确定下来的. 上面这张图就有 {{x}_{3}},{{x}_{4}},{{x}_{5}} 仨内点, 有必要分成 3! 种情况讨论吗? 没必要, 因为这 3! 种情况算出来的贡献是完全相同的. 所以就像前面对一个内点的 4! 种不同的收缩方式给出的完全相同的贡献都包含在同一个图里那样, 这种内点之间全排列出来的完全相同的贡献我们也全都包含在在这同一张图里.

那这张图可了不得了, 它首先包含了 3! 个内点全排列贡献, 然后在 a 点处有 4\times 3 种不同的收缩方式, 不过 b,c 之间的传播子交换后对应的其实还是同一种收缩方式所以还要再乘个 {1}/{2} 来取消前面算重了的部分. 所以最后合计这一张图就包含了 项相同的贡献.

那么这张图的系数就可以确定了:

  • (1). 三个内点代表说明这是展开式的第三阶, 所以有幂级数展开系数 {1}/{3!}, 但它刚好可以跟内点的全排列带来的 3! 相消, 所以以后我们就不需要再考虑幂级数展开出来的系数了. 但这里其实还有个小问题, 就是说如果有两个内点的位置完全对称怎么办? 那样即使交换了得到的也还是同一项, 这样同一项就会被我们重复算两次, 所以一张图每有 n 个完全平权的内点就要除以一个 n!. 不过现在面对的这张图并没有完全平权的内点, 就不用考虑这个.
  • (2). 每个内点都要自带一个源于拉氏量的 {1}/{4!}\;, 不过这刚好跟一个内点上的 4! 种不同的收缩方式相抵消了. 但有些内点提供不了

确定系数之后··· 其实就没什么了吧? 无非就是碰条线就写个传播子然后每个内点都积次分咯. 这就是所谓的 Feynman 规则了. 嗯, 那就把 a,b,c 分别命名为 {{x}_{3}},{{x}_{4}},{{x}_{5}} 写写看:

不过市面上一般人定义的对称性因子是 2\times 2\times 2=8, 其中俩 2 源于与自己收缩的内点, 第三个 2 源于 b,c 之间两个传播子的交换对称. 这种定义方式下就是要除以对称性因子了, 但我一直不太能理解这种定义方式,

虽然好像用不着专门指出来, 但我还是多提一嘴吧. 就上面那些不连通的分成了好几块儿的图, 只要分别用 Feynman 规则写出对应的式子然后再乘在一起就是了.

4. 真空图与分母间那不可告人的关系:

上面的每一项都对应了一张图, 但有些图里的内点它自己玩自己的, 就搞得一张图被分成多张互不连通的子图了, 所以计算分子上的这个级数时不同图的贡献是相加的, 而同一张图的各个子图的贡献得相乘. 现在我们要定义那些不与外点相连的, 也就是说只包含内点的连通的图为真空图. 有些地方说的泡泡图指的也是真空图, 因为它们长得很像泡泡.

真空图之外的那些图都包含了所有的外点, 所以我将这些图称为外点图. 外点图包含了所有的外点, 也可以连着内点, 但不包含真空图.

\right\rangle 中的每一项都对应了一张图, 而这些图全都是外点图或者外点图与一些真空图的乘积.

其中的 {{n}_{j}}! 源于内点的交换对称性, 因为是同样的图所以交换了所有内点得到的也还是同一项.

那我们现在试着玩得更大点, 咱能不能把整个 \right\rangle 都用真空图与外点图写出来呢? 很简单嘛, 甚至还能化简出一个很奇妙的东西:

于是我们就得到了这样一个结论: 真空图屁用没有.

这下不用吊真空图了, 所以两点关联函数的展开式就只包含外点图了:

所以关联函数的微扰展开式就可以进一步地化简为:

至于绘景你自己心里清楚就行了, 以后没谁会具体写出来的, 懂的都懂.

虽然前面的证明过程都是 general 的, 但从头到尾画的都是两点关联函数的 Feynman 图··· 我有没有必要把四点关联函数的情形也画一下呢? 其实是没必要的, 但我还是画一下吧:

然后把上面的七项按顺序画出来:

很显然 \lambda 阶没画全, 但用屁股想都知道差哪几张. 无非就第四张的痘痘长上面, 第五张的痘痘长左边, 然后第六张的痘痘还有仨位置能长. 关于这几张图还有两句话要讲:

(1). 没有打点的地方就是没有相交的地方, 像第三张和第六张的中间就是没有交点的.
(2). Peskin 管它们叫连通图, 可我寻思前六张都没连通啊··· 这就是为啥我要发明外点图这个词.
(3). 像前六张这样外点传播子之间都没有交点的图是不会贡献到散射过程的.

这个其实很简单, 坐标空间的关联函数对应坐标空间的 Feynman 图, 就是我们前面定义的那一大堆. 而关联函数还可以通过 Fourier 变换跑到动量空间中去, 那这时对应的 Feynman 图自然就是动量空间的 Feynman 图了. 其实两个空间下的图本身是一样的, 只是对应的 Feynman 规则不同.

这就是动量空间的传播子, 可以看到变量从传播过程的俩端点便成传播的动量了.

所以相应的 Feynman 图就不用画端点而需要标记动量了:

没了, 就这么平淡. 有时候我们还懒得标传播动量, 就, 更平淡了. 但要小心别把箭头标在传播子上了, 传播子上的箭头是用来区分正反粒子的, 但 {{\phi }^{4}} 理论只有一种粒子所以就没有箭头. 其它的图反正也就都是些 Feynman 传播子构成的东西嘛, 就挨个儿变换就是了.

其中标注的 p_1,p_2,p_3,p_4,p_5 是传播子中的积分变量, 也可以理解为传播动量.

从计算过程我们不难发现每个空间点都一定会满足动量守恒, 所以如果流入的动量是 p, 那么流出的动量也一定是 p. 我们将流入动量与流出动量合称为外动量. 由空间点动量守恒条件可知中间的这三个动量中只有两个是自由的. 所以这张 Feynman 图在动量空间就是这样的:

所以图本身和坐标空间是一样的, 只是 Feynman 规则不同罢了, 而规则也很简单:

不难发现通过这五个步骤我们就可以直接利用这张图来得到上面的运算结果.

只要你不傻一般都会选择使用动量空间的 Feynman 规则.

那些不确定动量的积分一般都是发散的, 一般来说一张图有几个圈圈就会有几个不确定的动量, 所以它们又被称作圈动量. 然后有 n 个圈动量的图就被称为 n 圈图, 算出来可能是发散的. 以后我们要做的重整化可以在一定程度上理解并解决这类圈图发散.

总之越多圈动量的图就越难搞, 三圈开始就能让我呼唤亲妈.

7. 为啥老有人指着传播子说是粒子呢?

现在地球人都知道 Feynman 就只是关联函数的级数展开了, 为啥还总有人指着传播子说粒子呢? 其实这又要扯 LSZ 约化公式了, 等有空我准备全方位地介绍一下这个公式, 但现在没空只能随便谈谈. 先把公式写出来叭:

单从公式我们就不难看出, 我们研究的入射和出射粒子都对应着关联函数的外点, 所以进一步说就是所有的外线都与出入射粒子一一对应. 而出入射粒子的动量并不是什么积分参数, 它们真的是粒子的动量, 所以必然满足在壳 (on-shell) 条件, 即四动量的自我内积等于粒子质量. 而内线传播子的动量不是积分参数就是积分参数与外动量的组合, 反正就是不太可能在壳, 所以我们就很暧昧地称这些传播子的动量为虚动量, 而它们对应的粒子就被认为是虚粒子.

另外从幺正性的应用中我们通过光学定理与 Cutkosky rules 我们也能看到内线传播子亦能转化为外线传播子, 事实上 Cutting rules 中的 cut 指的就是让内线传播子在壳化.

连 on-shell 条件怎么来的都不知道? 经典回顾:

那从这个角度来看, 我们就会说下图作为散射图是一个实粒子射入, 它在传播过程中从真空中拉出了俩虚粒子, 然后它自己也虚了, 然后这仨虚粒子又 somehow 汇合成一颗动量在壳的实粒子射出了. 像这种自己一个人搁那传播还要搞事的就叫自能图 (self-energy diagrams). 因为只有一颗粒子所以没发生散射也就牵扯不到啥粒子间相互作用的问题, 这种自能过程可以看作是粒子的自相互作用.

下面给大家介绍一张典中典的散射 Feynman 图:

这张图只标出了动量符号却没指定动量方向是因为方向可以是任意的.
相反的方向相差的负号完全可以吸收到动量符号中.
但在同一次计算中要选定一组方向且保持到最后.
这张图只标出了动量符号却没指定动量方向的根本原因是我懒.

这就是量子电动力学 (QED) 中的一张领头阶散射 Feynman 图, 在 LSZ 约化公式中对应的是一个四点关联函数. 入射粒子是电子和 \mu 子, 虽然出射也是它们, 但传播过程中有一条波浪线在搞事, 而这条波浪线就是光子场的 Feynman 传播子, 这就是说电子和 \mu 子通过光子传播子发生了动量交换. 动量交换就是碰撞嘛, 所以我们就会说这个过程是电子和 \mu 子以光子作为媒介粒子发生了散射. 这个光子显然是不太可能在壳的, 所以我们就说电磁相互作用是通过交换虚光子发生的.

就是说每张图都被我们赋予了一些暧昧的虚过程, 确定的状态就只有起点和终点. 而散射振幅计算的就是这样的起点演化到那样的终点的概率, 所以我们对所有 Feynman 图求和的过程或许就可以理解为是对所有的可能发生的过程求和, 最后得到我们想要的结果. 然后高阶图圈圈绕绕的一看就骚得很, 这么骚的过程肯定不容易发生所以贡献就很小. 这不就是路径积分的思想吗? 草, 我用正则量子化搞出来的却是路径积分的诠释可还行啊?

但这些莫名其妙的玄学黑话到底它是什么意思?

小孩子不懂事, 说着玩的.

  1. 偷偷滑到最后的可别让我给逮到了!
  2. 就算你现在不知道等讲到了你也会知道的.
  3. 这就是说我们可以对这些场使用 Wick 定理.
  4. 其实这就是相互作用项的定义中带这么个系数的原因, 相互作用项重要的其实就是四个场, 系数的形式都是不重要的.
  5. 我这里定义的对称性因子和大部分人所说的对称性因子不同, 它们正好互为倒数.
  6. 有的地方也管它叫微扰真空, 因为它一般是在微扰论里才会出现.
  7. 内点与外点都算空间点.
  8. 我这里定义的对称性因子和大部分人所说的对称性因子不同, 它们正好互为倒数.
  9. 等学到重整化你就能懂金木的痛了.
  10. 不同类型的场收缩出来的传播子直接等于零.
  11. 因为它跟自己缩了一次, 这就导致它无法提供 4! 种收缩方式.
  12. 注意这里说的是每一项都对应了一张图, 但一张图通常都会对应很多项. 就是说这个映射是满射但并非双射.
  13. 马上我们就会看到这个名字的来历.
  14. 但小心, 这个词是我发明的所以你跟别人去说他们可能听不懂.
  15. 就少俩外点场, 剩下的运算和上面一模一样.
  16. 对应关系就不用我多说了吧?
  17. 等介绍 LSZ 公式时我会具体解释一下这个问题.
  18. 或者说是关联函数的变量.
  19. 由上面的计算过程不难发现这些标注动量的方向或者说正负号并不重要, 它们都只是积分变量或参数罢了.
  20. 但我担心你比较傻所以决定还是跟你提一嘴.
  21. 呃··· 跟质量参数 m 混了, 但不用 m 又不美观··· 啊啊啊好想鲨人啊!
  22. 他这个人方方面面都很怪我只能说.
  23. 研究自相互作用可以修正粒子或者说场的参数, 比如质量参数、耦合常数或场的标度.

我要回帖

更多关于 画波浪线是什么意思 的文章

 

随机推荐