我不知道是不是有很多人每天都有时间上来看,我今天打开邮箱,就一下子看到两个我们思考的帖子,我不一定能一天之内全部消化完,然后可能明天又会出来新的......
其实2,3天一次,留给所有人的理解,思考,发散思维的时间可能更多一些
个人建议
第一题:做过的……而且觉得很简单,不过我只知道一种证明,大概只有3、4行,不知道所谓"规矩"的证明是何……
那么你就把它分成不超过N堆……使得任意一堆里选两个数都必然存在倍数关系
因为先想到N,又有题目中范围为2N,就想到按奇偶划分,首先想到的是将每个数和它的2倍一起,但这样是不正确的,因为有些数的2倍不在范围内,但这样的思路已经得到一个结论,就是奇数必然是不同堆的,剩下的事情就是把偶数重新放到正确的堆里就好了。
好像是算法导论的,就是求所有人认识的人的交集.求交集用一个n数组来&&运算,最后得到大家都认识的人.
第3条.
好像还是算法导论的
在n中为众数在,去除两个不一样的数仍然为众数,如此递归
然后两遍扫描,第一遍,找到不一样的数字并去掉,最后如果可以得到一个数字,再扫描一遍统计是否是众数
def count(array):
pos=0
max_count=0
max_number=None
for i in range(len(array)-1,0,-1):
if pos>=i:
break
a_i=array[i]
if array[pos]==a_i:
if a_i==max_number:
max_count+=2
elif max_count>=2:
max_count-=2
else:
max_count=2-max_count
max_number=array[i]
pos+=1
if max_number is not None:
count=0
for i in array:
if i==max_number:
count+=1
if count*2>len(array):
return max_number
else:
return None
while True:
from random import randint
array=[]
for i in range(6):
array.append(randint(1,3))
print array,count(array)
第3.1条.
泛化:如果找出现次数>n/3呢?>n/4呢?
同时去除3个不一样的数字仍然>n/3,最后可能得到2个数字........
2008/4/11 pongba <pon...@gmail.com>:
--
Blog(Chinese Edition):
http://zsp.javaeye.com/
Resume(Also Chinese):
http://zsp007.com.cn/
Where graduate soon , where to go ......
Double major:
Biomedical Engineering
Computer Science
-- Hierarch Zhang
2008/4/11 heave...@gmail.com <heave...@gmail.com>:
The set of numbers {9, 99, 999, 9999, ...} has some interesting properties. One of these has to do with factorization. Take any number n that isn't divisible by 2 or by 5. You will be able to find at least one number in the set that is divisible by n. Furthermore, you won't need to look beyond the first n numbers in the set.
Prove it.
2008/4/11 pongba <pon...@gmail.com>:
1 每1个连续的数中有一个倍数
2 每2个连续的数中有一个倍数
...
n 每n个连续的数中有一个倍数
一开始想了很久,只想到上面这些步骤,然后晚上写了一会其他代码,上厕所时有了灵感,也 不知道对不对
______________________
取法1.
1 n+1 .... n+n
2 n+1 .... n+n
....
n n+1 .... n+n
这种取法从1-n,都保证有倍数
取法2.
n-1 n | n+1 .... 2n (去掉一个数字)
这边必然存在n的倍数或n-1倍数两种中的一个(因为连续,为n个连续的数字,只缺一个)
n-2 n | n+1 .... 2n (去掉一个数字)
这边必然存在n的倍数或n-2倍数两种中的一个
.....
......
.......
类推,得证
2008/4/11 hayate <haya...@gmail.com>:
--
忽然对"点猜"有了灵感
假设每条直线至少过3个点,则任取3点必然共线
a b c e ........
a与b,c共线
e与b,c共线
=>a,b,c,e共线
=>类推,所有点共线,不合题设
得证
不过既然是一道这么难的题目,证明肯定不可能这么简单.一定是我什么地方做错了.........
但是那里错了呢?。。。。。。。。。。。。。。。。。。。
早上起来,第无数次向google投简历(估计还是石沉大海).
忽然对"点猜"有了灵感
假设每条直线至少过3个点,则任取3点必然共线
假设每条直线至少过3个点
任取2点必然有另外一点与之共线
考虑点
1 2 3 4 ........ n
1 2 x 共线
有点y与1 2 x 不共线
存在一个新的点z与1 y共线=>z与2 x不共线
存在一个新的点m与2 z共线=>m与前面的(1 2 x)(1 y z)不共线(可以先假设m与(1 2 x)共线=>z与(1 2 x
m)共线,且y在(1,z)即(1 2 x)上=>矛盾)
......
可以无限的推下去
推出有无穷个点,不符合题设
弱弱的问一句,关于第一题:
n=1.那么之存在1,和2这两个数.取1+1=2两个数:1,2.那么1可以整除2,2可以整除1??????
见笑了,看了半天没看明白
再来一个更绕头的证明,应该存在更隐蔽的Bug
假设每条直线至少过3个点
任取2点必然有另外一点与之共线
考虑点
1 2 3 4 ........ n
1 2 x 共线
有点y与1 2 x 不共线
存在一个新的点z与1 y共线=>z与2 x不共线
存在一个新的点m与2 z共线=>m与前面的(1 2 x)(1 y z)不共线(可以先假设m与(1 2 x)共线=>z与(1 2 x
m)共线,且y在(1,z)即(1 2 x)上=>矛盾)
......
可以无限的推下去
考虑点
1 2 3 4 ........ n
令1 2 3共线,有题设得到有
4与1 2 3不共线
此时存在线段(1 4)(2 4)(3 4)(1 2 3)
又因为 任取2点必然有另外一点与之共线
存在点5与(1 4)共线且与(2 4)(3 4)(1 2 3)不共线或与 2或3重合 (否则根据两点定一直线都可以推出4与(1 2 3)共线)
=>5是一个新的点
此时存在线段(2 4)(3 4)(2 5)(3 5) (1 2 3) (1 4 5)
存在点6与(2 4)共线且与其他线都不共线且不与以往的点重合(因为(2,4)与其他原有点不共线)
=>6是新点
此时存在线段(3 4)(2 5)(3 5)(1 6)(3 6)(5 6) (1 2 3) (1 4 5) (2 4 6)
label next:
每为一个只有两点线段找第三点,都可以保证第三点与原有点不重合,与原有线段线段不共线.=>是一个新点
而每增加一个这样的点,将增加>1条的只有两个点的线段,goto next:
2008/4/12 pongba <pon...@gmail.com>:
--
--
~~~~~~~~~~~~~~~~~~~~~~~~~
Blog(Chinese Edition):
http://zsp.javaeye.com/
Resume(Also Chinese):
http://zsp007.com.cn/
Graduating , where to go ......
Double major:
Biomedical Engineering
Computer Science
-- Hierarch Zhang(张教主)
--
> 现只需证明在(A1组+B1组偶数)构成的数集中,无法得到n/2+1个数字符合不存在相整除。
错,应该是(A1组+B1组奇数)
--
不过不会影响结果
这一点不是很理解
lim(m->无穷) n/2+n/4+n/8+...n/m = n
可能变为
lim(m->无穷)
n/2
n/4+1
....
后面可能还有+1
也是极限不是你下面说的n了
其实点猜想的初等方法很简单,我给大家一个提示吧:
考虑线外的点到线的距离。选一根线,使得线外的某个点到这条线的距离是所有点到直线距离最短的。想想假如这个线上至少有三个点能导出什么矛盾。
思路其实很简单,从极端情形入手。
这个帖子就总结经典的归纳题吧,归纳题的特质还是蛮清晰的,一般里面有某种变量n的,就是一个提示,可以尝试用用归纳法。
先提几道经典的:
1. 1~2n这2n个自然数中任取n+1个数,证明必有两个数能够互相整除。(据silwile说,这道题被Paul Erdos用来测试学生是不是有数学"sense",它有一个漂亮的证明和一个"规矩"的证明,能够想到前者的被认为有"sense")
2. 名人问题:一个名人A是指所有其他人都认识A,A不认识任何其他人。现在给定n个人,以及n个人之间的认识关系(单向的,即"A认识B"和"B认识A"是不同的)。要求一个O(n)的算法能确定是否存在一个名人,如果存在,给出这个名人。
3. 众数问题:n个数,求有没有这样一个数,它的出现次数>n/2。O(n)复杂性。
3.1. 泛化:如果找出现次数>n/3呢?>n/4呢?
(友情感谢silwile提供题目^_^)
P.S. 前两天的讨论发现这里真是藏龙卧虎啊:-) 点猜想有人自己做出来过吗,如果有的话,请教完整思路,不要证明,要思路:-)
点猜想虽然是一道初等题,但十几年没有人证出来,后来被人用初等手法证出来了,《费马大定理》上有介绍:平面上n个点,不全共线,证明存在一条直线仅过两点。
P.S. 讨论的目的不是为了答案,而是为了思路,已经知道答案的,我想知道是怎样想到那关键的一步的,只有思路才是对所有问题都相通的,如果你有一个灵感,千万不要直接把灵感就扔出来,在灵感背后,肯定有着艰苦的思考过程,正如没有前7个饼,第八个饼本身是吃不饱的。阿基米德如果不是思考得很艰苦,也不至于想出来之后那么得意忘形:-) 所以,我觉得,所有有可能带领你发现灵感的一般性思路,都有卓越的价值。
关于第1题,我有一个想法,不知道正确否:
因为两个数存在整除关系,那么这两个数就存在一个倍数关系,最小的是1倍,接着是2倍,3倍等等。给出的数列是1到2n,所以1倍关系不存在,那么最小的是2倍关系。
现在构造一个n+1个数的数列,要求数列中不存两个数有倍数关系,很自然应该从2n开始向前拿。依次拿到2n-1, 2n-2, ...。当拿到n+1这个数的时候,已经取得了n-1个数,这n-1个数之间不可能有存在整除关系的数对。
剩下的2个数,从余下的1到n中拿,无论怎么拿,这两个数的2倍的数必然在已经拿到的n-1个数中。
由于不能构造出一个不存在倍数关系数对的n+1个数的数列,所以原题得证。
第一题, 你们的想法似乎都太复杂了。 我的方法是, 将2n之内任取n+1个数, 找出有限个方法,这些方法构造的结果可以覆盖所有情况, 然后证明
这些方法构造出来的集合, 全都不能满足"在n+1这个集合内没有任何两个数存在整除关系"。 如果题设成立, 这显然是不可能的。
第一题的证明如下:
从2n个数中取n+1个数
把2n个数分成两个集合,(1-n)(n-2n)
n+1个数必定在两个集合都有数,假设在(1-n)的元素个数为x,如果证明这x个元素中每一个元素都能在(n-2n)中找到一个倍数就能证明问题。因
为如果(2-2n)中都有x的倍数的话,那至少这些元素就不能被选择,那么总数都不够n+1个了。
下面证明这x个元素中每一个元素都能在(n-2n)中找到一个倍数。
首先考虑这些元素的2倍,如果2倍在(n-2n)中,则证明成功,排除之。如果不在,那这些元素一定在(1-n/2),在考虑元素的4倍,如此推理,则
每个元素必定能在(n-2n)中找到一个倍数。
证明完毕!
对于{9,99,999....}这题证明如下(利用同余的思想即可得到):
选择n,那么对于10^0 -1, 10^1 -1,....,10^n -1,一定有n+1个数,那么一定存在同余的两个数。
假设为10^x -1和10^y -1(y>x),那么(10^y-1)- (10^x -1)一定能被n整除。
(10^y-1)- (10^x -1) = 10^y - 10^x = 10^x(10^(y -x) -1)
由于n不能被2和5整除,那么n一定能被10^(y-x) -1整除,命题得证!
liuxinyu的证明中的问题主要不在于分成多少组,而在于落在同一组的两个数不一定存在整除-被整除关系。但这个思路可以启发我们构造这样的分组:
同一组中的数皆存在整除-被整除的关系。
看看这样的分组能尽可能少到多少呢?要是能少到n,就可以利用鸽巢原理了。 为了构造尽可能少的分组,直觉上,我们应该在各组中容纳尽可能多的数,不妨
先对具体例子作些尝试。
比如 n = 10,分组如下:
[组1] 1, 2, 4, 8, 16
[组2] 3, 6, 12
[组3] 5, 10, 20
[组4] 7, 14
[组5] 9, 18
[组6] 11
[组7] 13
[组8] 15
[组9] 17
[组10] 19
发现10组就够了,而且所有组中的元素是存在整除-被整除关系的。
那么这个分组是怎样形成的呢?首先把1分到某组,然后把它能整除的最小元素,即2,分到同一组,再把2的最小倍数4分到同一组...... 这样的目的是使该组
元素尽可能多。当该分组无法容纳更多的元素时,开始新的分组。最终将所有元素分到某组中。
接下来,我们自然要去看看对于一般的n,按这种原则得到的分组数是多少。 稍作思考,容易发现,所有奇数作为各组中的最小元,而所有偶数按照不断除去素
因数2后得到的奇数分到对应的组。比如12,不断除去素因数2后得到3,故与3同组;比如20,不断除去素因数2后得到5,故与5同组。 也就是说,第
k组的元素必有形式 (2k-1) * 2^p,这样的组数显然就是1到2n中的奇数的个数,即n。 根据这个分组,接下来就容易用鸽巢原理证明原命题
了。
现在我们回顾一下我们到达问题的解答的路径:
[1] 出于应用鸽巢原理的直觉和动机,尝试构造分组 --〉
[2] 考虑鸽巢原理的使用方式(如果落在同一组,他们存在整除-被整除关系),尝试构造尽可能少的分组 --〉
[3] 考虑到分组尽可能少,根据直觉,各组应尽可能大 --〉
[4] 有原则地尝试而得到一种具体分组方案,推广到一般情形。如果可行,停止尝试;否则继续尝试 --〉
[5] 整理思路,给出形式化的证明。 --〉END
从这条路径看出,直觉(数学的----比如应用鸽巢原理;非数学的----比如各组尽可能大)起到了很大的作用,它是思维链上此结点到下一结点的路标。这或许就
是Erdos说的"sense"吧。