记09年北大ACM校内赛

    大学生活混起来很快,不知不觉又是一年过去了。去年5月10日的ACM校内赛给我留下了许多美好的回忆,因此今年我主动去报了名(上次是被人给拖去的)。今年有点装怪,题目数量不变,但时间缩短为4个小时。原计划是从8:00做到12:00,结果可能是因为我们所在的7号机房迟迟没有开门,时间临时改成了8:15到12:15。总的来说,今年的题目比去年要糟糕得多,但也不乏一些精彩的题目。

    和去年一样,第一题依旧是所有题目中最科学的一道。题目给定一个不超过2000*2000的网格,你在最左下角的位置(即(0,0)点),你的目的地在(x,y)。要求你的路线不得经过同一个交叉点两次,且不允许左转(题目背景让这个条件顺理成章:街道靠右行,左转不方便),问合法的路线共有多少种。题目难点就是你不一定要走最近的路,完全允许你绕上一大圈;这破坏了有序性,很难构造出递推公式或动态规划模型。稍微画一下图,我们发现了一些显然但很有启发性的规律:每一次右转后,你左手边方向的所有区域都不能再走了,这很可能产生出规模更小的子问题来。另外,所有合法路线必然是有如螺旋线一样的一圈一圈绕着终点走,这种隐藏的有序性也为动态规划提供了可能。但顺着这个思路想下去屡屡碰壁,我猜不少队伍都卡在这儿了吧。

 

    后来我完全打翻前面的全部思路,猛然想到了一个具有决定意义的想法:街道的选取唯一地决定了整个路线。例如,假设我想计算转弯恰好11次的路线有多少条。这样的路线一定含有三条向上走的路、三条向右走的路、三条向下走的路和三条向左走的路。除去第一条路和最后一条路的位置都是确定的,其它的路选在哪一行或者哪一列唯一地决定了整个路线。因此,我们可以用排列组合直接计算出答案来。向上走的路是五选二,向右走的路是七选三,向下走的路是四选三,向左走的路是三选二。把它们各自的选取方案数乘起来就得到了拐弯11次的合法路径。于是,计算所有的路线数只需要从小到大枚举拐弯的次数,每一次计算都是常数的,总复杂度是O(n)的;整个算法的瓶颈反倒是O(n^2)的组合数预处理,不过这个复杂度完全可以承受。

Read more…

晒论文:表示重复意义的虚词比较

    其实,中文系并不轻松。我们有人曾经仔细算过,我们的学分(特别是我们专业的学分)远远高过好几个理科大系。理科院系看上去作业很多,但期中期末的任务并不重;文科院系就惨了,平时没啥作业,一到期中期末就牛B,写了论文还要背东西应考,逼着我们天天熬夜。
    这几天实在是累,加之空间续费后IP地址变了,DNS刷了半天都没刷过来,于是又是好久没有更新。晒一晒这几天的劳动成果——汉语虚词研究的一次大作业。如果感兴趣的话,不要错过这两篇日志:

http://www.matrix67.com/blog/archives/477
http://www.matrix67.com/blog/archives/508

 
 

“又”、“还”、“再”、“重/重新”表示重复意义时的区别

一、对“重/重新”的语用分析

    “重/重新”在语义上与其他三个词有较大的差别,因此这里首先单独讨论“重/重新”的意义,以便在以后的讨论中排除单由“重/重新”的语用条件引起的混淆。
    在《现代汉语词典》中,“重”释义为重新、再,而“重新”则释义为再一次。但事实情况远远没有那样简单。请看下例:

  在去年的比赛中,他再次名落孙山
* 在去年的比赛中,他重新名落孙山

Read more…

关于北大中文系应用语言学(下):从科学到不科学

古代汉语

    古代汉语课没有现代汉语那么科学。古代汉语课的课程主要分为文选和古汉语常识两部分,两大部分交替进行。考试时主要考字形分析、名词解释、课内文选翻译、课外文选翻译、诗词格律分析等。对于我这样的人来说,文选课是从来没听进去过的,一些古汉语知识倒是比较有意思,在这里随便写几个。这些东西可以给大家一个对古汉课所学内容的初步印象。

 
1. 关于入声字。古有平上去入四声,今有阴平、阳平、上声、去声。古代的平声分化为今天的阴平和阳平,古代的上声和去声都保留了下来(有一部分上声字也变成了去声),古入声字消失,今天的四个声调里都分布有古入声字。在绝大多数方言中,入声字都有不同程度的保留。重庆话中,古入声字全部归入二声,因此入声字表里的所有字用重庆方言读全都是阳平。“一”、“七”、“八”三字有变调,也是因为这三字是古入声字,部分语音残留了下来。

2. 古汉课上一个科学的东西是诗词的格律。现在我终于会分析一首诗的格律了。写一首近体诗比你想象中的更困难,你需要考虑到对仗、押韵、平仄等各种格式的约束。平仄的一个基本要求是,上下两句中的平声(既现在除入声字以外的阴平和阳平)和仄声(古代上、去、入三声并称仄声)应该相反,例如“平平仄仄平平仄,仄仄平平仄仄平”。在数词一二三四五六七八九中,只有“三”是平声,其余全是仄声。但诗要求对仗,数词必须和数词相对,也就是说用了一个仄声的数词必须还得用一个平声的数词。而“三”是唯一的平声数词,因此“三”字在近体诗中的使用频率特别高。“千”和“双”也是平声字,它们也经常在近体诗中出现。

3. 古代是没有f这个音的,声母f是后来从b、p中分化而来的。一些古代专有名词的读音原封不动地保留了下来,我们可以据此看出上古语音确实没有f。例如,“阿房宫”的“房”读pang,“番禺”的“番”读pan。有人想过吗,像“鸳鸯”、“仿佛”、“蜻蜓”、“彷徨”一类的联绵词不是双声(声母相同)就是叠韵(韵母相同),但“蝙蝠”两个字声母韵母都不相同。这是因为“蝠”字的读音发生了变化。古时“蝙”、“蝠”二字的声母是相同的。

4. 古时造的字在一定程度上反映了当时的社会背景。很多表示恶劣品行的字都是从“女”旁的,如“嫉妒”、“贪婪”的“婪”、“奸诈”的“奸”(古时“奸”字还没有强奸的意思),这反映了当时“男尊女卑”的落后思想。事实上,“偷”古时写作“媮”,“懒”古时写作“嬾”,“淫”古时写作“婬”。

5. 古代农业生活中,牛占据了相当重要的地位,因此古人造了很多“牛”旁的字来区分各种各样的牛,甚至给不同年龄、不同毛色的牛都分别造了字。“特”是公牛,“牸”是母牛,“犊”是小牛,“犍”表示被阉割的公牛,“牻”表示毛色黑白相杂的牛,“牭”表示四岁的牛……

Read more…

记08年北大ACM选拔赛

    早晨7:40的闹铃。到36楼下面见到了我的两个队友后,随便吃了点东西就出发了。
    计算中心门前特别热闹,N多人围在一张大桌子前,好像是在签到。我挤进去找了半天发现没我的名字,名单上全是信科的人。我抬头问,中文的在哪儿呢。一个美女姐姐用手指了远处的一个几乎没人的地方说“中文的在那边”,并说了一句“哇,中文的呀,太牛B了”。我顺着她手指的方向望过去,另一张小桌子前面贴了“中文”二字,桌子后面没有人,估计是交给了旁边负责数院和元培的人,让他们顺便管一下。从我目前所了解的情况来看,那张桌子应该是特别为我准备的,它在历史上很可能是第一次出现。

      
    第四题是做得最顺利的一道题。我把所有题粗略看了一遍后,首先决定就想这道题。题目描述巨简单,就是问你沿对角线把一个正n边形剖分成三角形和四边形有多少种方法。上图显示了n=5时所有的10种方法。熟悉组合数学的人都知道,三角形剖分方案对应的是Catalan数列,其递推公式的推导相当经典。设C(n)表示凸n+2边形的剖分方案数,枚举底边和哪一个点相连(下图左),容易看出C(n) = C(0)*C(n-1) + C(1)*C(n-2) + … + C(n-1)*C(0)。
    
    现在,如果剖分中允许有四边形的出现,又该怎么办呢?看看数据规模n≤5000,估计应该是叫我们寻找类似的递推公式。容易想到,我们可以枚举底边与哪一个点相连构成三角形,统计出底边属于某个三角形的剖分方案T(n)=ΣC(i)C(j), i+j=n-1;再枚举底边和哪两个点相连构成四边形,统计底边在一个四边形上的剖分数Q(n)=ΣC(i)C(j)C(k), i+j+k=n-2。但是,枚举四边形需要O(n^2)的时间,这样的话整个程序就是O(n^3)的了,n=5000绝对超时。那怎么办呢?两分钟后,我想到了一个具有决定意义的点子:计算Q(n)可以直接利用以前算过的T(i)。枚举四边形的两个顶点时,固定四边形的左边那个顶点,你会惊奇地发现右半部分的所有情况加起来正好就是一个T(i) (上图右)。因此,ΣC(i)T(n-i-1)就是我们所需要的Q(n)。
    一个有趣的细节是,这道题要求选手输出结果除以2^64的余数,不知道会不会有人想不到这个该怎么处理;事实上只需要直接用64位无符号类型来运算就可以了,超界了后计算机储存的本来就已经是2^64的余数了。

Read more…

关于北大中文系应用语言学(上):更多有趣的汉语语法现象

    今年年初就有写这篇文章的打算,但迟迟未动键盘。我一直想给大家介绍一下北大中文系的应用语言学专业,与大家分享一下自己的亲身经历和切身体会,让更多理科生关注这个新兴专业,顺便也骗一些理科小loli到我们专业来(我喜欢的类型)。现在离高考越来越近了,再不写就不行了。其它一些废话我就不多说了,关于北大中文系应用语言学专业到底是咋回事,包括它的定位和出路,网上到处都有介绍。你可以在这里看到一些比较正式的专业介绍,以及一份详细的课程表。其它一些如志愿填报、学习生活之类的比较杂的问题我也不谈了,王婵娟师姐的文章已经写的很详细了。这里主要侃一下我目前所学到的几门课程。

    考虑到这篇文章可能会被到处转载,首先告诉大家,我的Blog是matrix67.com。你可以从这个Blog的内容里看到,我的思维是非常纯的理科思维,除了科幻小说和文字游戏以外,对语言文字提不起任何兴趣。因此,这里你可以看一看,一个对传统文学甚至有些抵触心理的应用语言学学生是如何看这个专业的。
    大一的专业课主要是现代汉语、古代汉语、现代文学史、计算概论和高等数学(C)。计算概论说穿了就是学C语言,高等数学说穿了就是微积分。这两个我都不说了。这里主要说一下前面三个和中文相关的专业课程。

现代汉语

    现代汉语是所有中文的专业课中最科学的课程之一,说穿了就是现代汉语语言学。我是相当喜欢这门课程的,希望你读到下面这段文字后也会对这门课产生一些兴趣。之前写了这篇日志,讲了汉语中某些词类的个别词语的特殊语法现象,想不到真的有人感兴趣,并期待我更新更多类似的东西。我们继续那篇日志,再选一些现代汉语课上学到的有趣的东西说说,希望大家能喜欢。

Read more…