如何实现这个快速算法?

quiton 2007-01-18 04:47:06
现有一个int型(32位)数组,如何快速实现任意三个数它们的前8位异或之后为0??

数组长度为20000,如要是用三重循环,速度相当慢,有没有快速算法?
...全文
487 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangbch 2007-02-08
  • 打赏
  • 举报
回复
c(256,3) =256*255*254/(1*2*3)= 2763520, 应该能够在1秒内得到结果.
fosjos 2007-02-07
  • 打赏
  • 举报
回复
a^b^c=0 => a^b=c

如果存在a=0,那么只要找到b=c(b和c对应同一项)

如果不存在a=0,那么取两个不同的a和b,异或后得到c(c≠0),找找c是否存在
ruanzheng13 2007-02-07
  • 打赏
  • 举报
回复
每个数字的前8位都设成0
任意三个数字前8位的异或都是0了
quiton 2007-02-07
  • 打赏
  • 举报
回复
如果第0项有元素,找有两个以上元素的项
如果0项为空,找两个不同的项进行异或,得到的结果对应的项是否空

能否具体解释解释?
第一种情况:如果要是很多元素的前8位都是0的话,那么这里边任意三个组合都满足条件!
第二种情况:还要找出1到255这255个数中哪三个数异或后为0,然后在那满足条件的这三个数对应的元素再组合!!感觉也很麻烦!

感慨本科时候算法没学好,现在后悔末及!

quiton 2007-01-19
  • 打赏
  • 举报
回复
小弟未写过类似的程序,能否给个类似的例子,楼上已经说的很清楚了!谢谢
bigc2000 2007-01-19
  • 打赏
  • 举报
回复
同意楼上,用一个容量为255的hash表
fosjos 2007-01-19
  • 打赏
  • 举报
回复
一次遍历生成hash表
举个例子:
前8位 数字下标
0 1 -> 2 -> 4 -> 5
1 0 -> 3
... ...
255 ...

如果第0项有元素,找有两个以上元素的项
如果0项为空,找两个不同的项进行异或,得到的结果对应的项是否空
quiton 2007-01-19
  • 打赏
  • 举报
回复
但有一点是,我要记录到底是哪3个数异或之后是0的!
gnefuil 2007-01-18
  • 打赏
  • 举报
回复
20000个数只取前8位,相当于把20000个数映射到256个值上,一定有很多重复的值
把这些重复值缩成一个数,这样实际上你所要考虑的只是256个数,而非20000
fosjos 2007-01-18
  • 打赏
  • 举报
回复
先转成char*或char[],每四个取一个

a^b^c=0 => a^b=c
a=array[i]: 0->n-1
b=array[j]: i->n-1
用hash保存c(表长度2^8,空间不大)
c=array[k]: 0->n-1
quiton 2007-01-18
  • 打赏
  • 举报
回复
就是在这个数组中,任意三个int型的数,他们的前8位异或之后为0啊!!
Diboy 2007-01-18
  • 打赏
  • 举报
回复
题目没明白..

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧