UyHiP趣题:限制最苛刻的选票统计程序

    因为忙,不少计划写下来的东西都一直搁置着。其中一个拖了很久都没写的就是 UyHiP 一月的题目 了。这是一道看上去非常困难的算法题目,当时我没能解答出来;看到答案后才恍然大悟,拍案叫绝。这是一道非常少见的算法好题,在这里记下来。

    一个国家里有 N 个公民,这些公民从 1 到 N 依次编号。这是一个民主国家,国家做出的每个决定都需要全体公民投票,每个人必须且只能投一票。

    不过,随着该国家人口数量的增加,这种投票方式的效率越来越低。于是,这个国家实行了一种新的民主制度。每过四年,这个国家将会举行一次“代表选举大会”,届时,每个公民都必须且只能提名一个他信得过的人,来作为他自己的代表。注意,提名自己作为自己的代表也是允许的。对于每个被提名了的人,有百分之多少的人提名他,他就拥有了相当于多少张选票的权力(向下取整)。在接下来的四年里,国家要做出某项决定时,就只需要这些代表来参加了。

    比方说,这个国家有 200 个人,在代表选举大会上,有 98 个人提名 1 号公民当代表,有 101 个人提名 2 号公民当代表,有 1 个人提名 200 号公民当代表。结果就是,只有 1 号公民和 2 号公民成为代表,在接下来的四年里参与投票,其中 1 号公民一票当 49 票,2 号公民一票当 50 票。值得注意的是, 200 号公民虽然有提名,但支持率仅 0.5% ,因此他今后四年没有当代表的权力。

Read more…

漫话中文自动分词和语义识别(上):中文分词算法

    记得第一次了解中文分词算法是在 Google 黑板报 上看到的,当初看到那个算法时我彻底被震撼住了,想不到一个看似不可能完成的任务竟然有如此神奇巧妙的算法。最近在詹卫东老师的《中文信息处理导论》课上再次学到中文分词算法,才知道这并不是中文分词算法研究的全部,前前后后还有很多故事可讲。在没有建立统计语言模型时,人们还在语言学的角度对自动分词进行研究,期间诞生了很多有意思的理论。

    中文分词的主要困难在于分词歧义。“结婚的和尚未结婚的”,应该分成“结婚/的/和/尚未/结婚/的”,还是“结婚/的/和尚/未/结婚/的”?人来判断很容易,要交给计算机来处理就麻烦了。问题的关键就是,“和尚未”里的“和尚”也是一个词,“尚未”也是一个词,从计算机的角度看上去,两者似乎都有可能。对于计算机来说,这样的分词困境就叫做“交集型歧义”。

    有时候,交集型歧义的“歧义链”有可能会更长。“中外科学名著”里,“中外”、“外科”、“科学”、“学名”、“名著”全是词,光从词库的角度来看,随便切几刀下去,得出的切分都是合理的。类似的例子数不胜数,“提高产品质量”、“鞭炮声响彻夜空”、“努力学习语法规则”等句子都有这样的现象。在这些极端例子下,分词算法谁优谁劣可谓是一试便知。

Read more…

趣题:两步猜出多项式的各项系数

有一个黑匣子,黑匣子里有一个关于 x 的多项式 p(x) 。我们不知道它有多少项,但已知所有的系数都是正整数。每一次,你可以给黑匣子输入一个整数,黑匣子将返回把这个整数代入多项式后的值。有一个不可思议的结论:你可以在两步之内还原出整个多项式!这是如何做到的呢?

首先,输入 1 ,于是便得到整个多项式的所有系数之和。不妨把这个系数和记作 S 。下一步,输入 S + 1 ,于是黑匣子返回

    an * (S + 1)n + an-1 * (S + 1)n-1 + … + a1 * (S + 1) + a0

把这个值转换成 S + 1 进制,依次读出每一位上的数,它们就是多项式的各项系数了。

来源:http://rjlipton.wordpress.com/2010/12/20/some-mathematical-gifts/
这个有趣的问题曾经以另一形式出现在了这个 Blog 里,见 这里 的 35 题。

千万别学数学:最折磨人的数学未解之谜(一)

    数学之美不但体现在漂亮的结论和精妙的证明上,那些尚未解决的数学问题也有让人神魂颠倒的魅力。和 Goldbach 猜想、 Riemann 假设不同,有些悬而未解的问题趣味性很强,“数学性”非常弱,乍看上去并没有触及深刻的数学理论,似乎是一道可以被瞬间秒杀的数学趣题,让数学爱好者们“不找到一个巧解就不爽”;但令人称奇的是,它们的困难程度却不亚于那些著名的数学猜想,这或许比各个领域中艰深的数学难题更折磨人吧。

    作为一本数学趣题集, Mathematical Puzzles 一书中竟把仍未解决的数学趣题单独列为一章,可见这些问题有多么令人着迷。我从这一章里挑选了一些问题,在这里和大家分享一下。这本书是 04 年出版的,书里提到的一些“最新进展”其实已经不是最新的了;不过我也没有仔细考察每个问题当前的进展,因此本文的信息并不保证是 100% 准确的,在此向读者们表示歉意。

    这篇文章很长,大家不妨用自己喜欢的方式马克一下,一天读一点。

Read more…

趣题:两两间的距离都是整数的点集

    最多能在平面上找出多少个点,使得它们两两之间的距离都是整数?当然,我们忽略最平凡的解——所有点都在一条直线上。

    三个点的解显然是存在的,只需要构造一个边长为 1 的等边三角形即可。事实上,满足任意两数之和大于第三数的一组整数都可以成为一个三角形的三条边。寻找含有四个点的解也并不困难,一个长为 4 宽为 3 的矩形就能满足要求。不过,我们还有更小一些的解。最小的解貌似是下面这个等腰梯形:上底、下底分别是 3 和 4 ,两腰都是 2 ,两条对角线都是 4 ,正好也都是整数。

      

    那么,能否找到平面上的五个不共线的点,使得两两之间的距离都是整数呢?最多能找到多少个这样的点呢?

Read more…