标题: IBM挑戰
瓜小南
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 128
精华 32
积分 1808
帖子 3485
活跃指数 10
LU金币 188 个
LU金条 0 个
阅读权限 200
注册 2003-9-26
 
发表于 2004-1-24 13:43  资料  个人空间  短消息  加为好友 
IBM挑戰2004年1月原文

Ponder This Challenge: This month's puzzle was sent in by Joe Buhler.
It came from a SIGCSE meeting via Eric Roberts.



A read-only array of length n, with address from 1 to n inclusive,
contains entries from the set {1, 2, ..., n-1}.
By Dirichlet's Pigeon-Hole Principle there are one or more duplicated
entries. Find a linear-time algorithm that prints a duplicated value,
using only "constant extra space". (This space restriction is
important; we have only a fixed finite number of usable read/write
memory locations, each capable of storing an integer between 1 and n.
The original array entries can not be altered.) The algorithm should
be easily implementable in any standard programming language.
一个长度为n的唯读阵列(位址为1至n)所包含的元素是整数,每个元素的大小是由1至n-1。由鴿巢原理,至少有兩个不同位址的元素值是重复的。
请作出一个算法,以列印出其中一个重复的元素值。条件是:
1. 算法运行所需的时间是线性的;
2. 只有固定有限个記憶位址可供读寫之用,每个記憶位址只可儲存一个大小是由1至n的整数;
3. 原阵列不能修改;
4. 算法应该以任何標準程式語言都可容易施行。





我们匆匆相识 匆匆言爱 匆匆相许一生,
爱情也许并没有那么真的让我们那么失望,
失望只是由于我们自己的放弃。

午夜梦回。
略为清醒的时刻,
总是会想起她。
相信, 她也会想起我。
顶部
sunshinesh
LU新生
Rank: 1



UID 2663
精华 0
积分 18
帖子 35
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-11-18
 
发表于 2004-1-24 22:42  资料  个人空间  短消息  加为好友 
不能求和? 然后减去S(1~(n-1))

明确一下吧,楼主也不说话的
对矩阵各位相加求和,然后减去 1~N-1 的和就得出重复的数值了

顶部
南卉
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


LU爱心使者  
UID 61
精华 22
积分 1953
帖子 3726
活跃指数 38
LU金币 6670 个
LU金条 0 个
阅读权限 210
注册 2003-9-19
 
发表于 2004-1-27 10:11  资料  个人空间  短消息  加为好友 
晕倒~~

看见这样的题目,哦只有吐血而S的份了 ninja.gif

连题目哦都看不懂~~ cry_smile.gif





万事皆缘,随遇而安 
顶部
sunshinesh
LU新生
Rank: 1



UID 2663
精华 0
积分 18
帖子 35
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-11-18
 
发表于 2004-1-27 12:08  资料  个人空间  短消息  加为好友 
卉mm就是这么可爱 rose.gif 术业有专攻嘛。

顶部
larryh
超级版主
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17



LU爱心使者  
UID 133
精华 29
积分 3989
帖子 7369
活跃指数 258
LU金币 3777 个
LU金条 5409 个
阅读权限 251
注册 2003-9-26
 
发表于 2004-1-27 12:22  资料  个人空间  短消息  加为好友 
没那个水平,只能分析难点了:
1、只读数组:意味着不能排序
2、并非只能有两个个重复的值(可以同时有3个1、2个8、7个109…):累加算法无用

一般直接比较的算法,复杂度都不可能是线性的

顶部
sky-walker
LU大天使
Rank: 6Rank: 6



UID 1585
精华 21
积分 1537
帖子 2989
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 70
注册 2003-11-3
 
发表于 2004-1-27 12:29  资料  个人空间  短消息  加为好友 
鸽巢原理说的是-至少-
算法时间的线性是要重点考虑的





user posted image
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
sky-walker
LU大天使
Rank: 6Rank: 6



UID 1585
精华 21
积分 1537
帖子 2989
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 70
注册 2003-11-3
 
发表于 2004-1-27 12:32  资料  个人空间  短消息  加为好友 
嘿嘿,又想了一下,晕了
复杂的远远超出了
数学没学好,后悔呀





user posted image
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
sunshinesh
LU新生
Rank: 1



UID 2663
精华 0
积分 18
帖子 35
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-11-18
 
发表于 2004-1-27 13:43  资料  个人空间  短消息  加为好友 
呵呵 这下明白题目了 :)
得想想了。。。。。。

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
sunshinesh
LU新生
Rank: 1



UID 2663
精华 0
积分 18
帖子 35
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-11-18
 
发表于 2004-1-27 14:04  资料  个人空间  短消息  加为好友 
那这样行不行?:
假设原矩阵为OLD,这样各元素表示为OLD(x) 1<=x<=(n-1)

建立位址为 1~n-1 的线性矩阵 NEW,预置所有值为零

For x= 1 to n-1
If NEW(OLD(x)) =0
Then NEW(OLD(x)) =1
Else Print(OLD(x))


只是把现有矩阵里面的值转换为新矩阵的下标来记录 第一次读到则置为1
下次读到则输出
你看行不行?

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
 



当前时区 GMT+8, 现在时间是 2008-8-30 11:50
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.083356 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver