创新工场一道算法题

seqingzi 2011-09-16 09:33:27
条件:两组数目相同的石头,a1,a2,a3...an;b1,b2,b3...bn,其中a1 != a2 != a3 != ... != an,b1 != b2 != b3 != ... != bn;对于每一个ai ,均能找到一个bj满足 ai == bj.
问题:找到每一组对应的ai = bj.

目前只想到用快排,复杂度O(nlgn)

求更好的解法

...全文
205 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairywell 2011-09-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 seqingzi 的回复:]

怎么只有说排序的.
有没有从分治法方面想一个更好的.
[/Quote]
有戏~~ :)
seqingzi 2011-09-18
  • 打赏
  • 举报
回复
果然还是要学好数学...

[Quote=引用 8 楼 litaoye 的回复:]

lz不用多想了,既然是用天平,排序就可以了,可以用信息论求下界log(3,n!) = O(n*log(n))

引用 7 楼 seqingzi 的回复:
怎么只有说排序的.
有没有从分治法方面想一个更好的.
[/Quote]
绿色夹克衫 2011-09-18
  • 打赏
  • 举报
回复
lz不用多想了,既然是用天平,排序就可以了,可以用信息论求下界log(3,n!) = O(n*log(n))

[Quote=引用 7 楼 seqingzi 的回复:]
怎么只有说排序的.
有没有从分治法方面想一个更好的.
[/Quote]
tswwz 2011-09-18
  • 打赏
  • 举报
回复
上面是比较笨得方法时间复杂度是n2。

如果排序的话时间复杂度是nlogn。

tswwz 2011-09-18
  • 打赏
  • 举报
回复
用天平的话可以这样,先把a组所有石头和b组所有石头各放在天平两边。

按照题目给出的条件,这时候天平必然是平衡的。

这时从a组哪掉一个石头,那么天平就不平衡了,一个一个的尝试从b组哪掉一个石头,当天平平衡了说明从a组拿掉的石头和b组拿掉的石头重量是相同的。

重复上面的动作,就可以找出每一组ai==bj的石头了。

fairywell 2011-09-17
  • 打赏
  • 举报
回复
插入排序就可以了,复杂度不错的

桶排序呢?
seqingzi 2011-09-17
  • 打赏
  • 举报
回复
怎么只有说排序的.
有没有从分治法方面想一个更好的.
nkorange 2011-09-17
  • 打赏
  • 举报
回复
归并排序,n*logn。快速排序不能保证一定是n*logn。
如果天平有砝码的话,可以用桶排序。
seqingzi 2011-09-16
  • 打赏
  • 举报
回复
就算石头质量已知,基数排序也无法实现.基数排序要求数必须是整型或者字符型,实数无法实现.
icessl 2011-09-16
  • 打赏
  • 举报
回复
如果 a1,a2,...,an 和 b1,b2,...bn 均为正整数,且它们的最大值不大于n,则可以用"基数排序".
算法如下:
STEP1: 令 R=max(a1,a2,...,an} // 该步耗时 O(n)
STEP2: 开设数组 A[0..R],把它们清零 // 该步耗时 O(R), 又因 R<=n,所以该步耗时 O(n)
STEP3: for (i=1;i<=n;i++) A[ai]=i; // 该步耗时 O(n)
STEP4: 开设数组 B[0..R],把它们清零 // 该步耗时 O(n)
STEP5: for (i=1;i<=n;i++) B[bi]=i; // 该步耗时 O(n)
STEP6: for (i=0;i<=R;i++)
if (A[i]!=0 && B[i]!=0) 输出 A[i]和B[i] // 该步耗时 O(n)
所以,总耗时O(n)
seqingzi 2011-09-16
  • 打赏
  • 举报
回复
忘了说了,只能用天平比较.质量未知
lzc52151 2011-09-16
  • 打赏
  • 举报
回复
哈希。。。。。。

33,008

社区成员

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

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