隐含的排序问题 质量相同石头木头配对问题


问题:有n块石头,n根木头,凭外观无法判断重量相对轻重,石头两两重量不同,木头两两重量不同,但是任何一块石头都有一根木头与其质量相同,给你一个天平,将其分成n对质量相同的<石头,木头>堆。[注:天平左边只能放石头,右边只能放木头]

天平两边可以放物体A和物体B,这样就可以A与B的重量大小关系,如果没有限制条件,那么就可以利用天平对石头和木头分别进行快排,快排以后得到的石头序列和木头序列一一对应,问题迎刃而解。由于没有砝码,所以不能确切的确定石头和木头的质量,只能确定其相对质量关系。

但是,问题限制天平左边只能放石头,右边只能放木头。这样,就只能比较石头和木头的相对质量大小了。

类似于快速排序,我们可以随机选择一块石头A,将木头分为两堆:

               比A重的木头堆M1

               比A轻的木头堆M2

以及与A重量相等的木头B,然后用木头B对石头进行同样操作,石头可以分为两堆:

               比B重的石头堆N1

               比B轻的石头堆N2

然后M1对N1,M2对N2,分别进行上述过程,时间复杂度为O(nlgn)。

最坏情形下的时间复杂度为O(n^2),为了杜绝最坏情况的发生,可以每次随机选择三块石头,取质量居中的石头,不过此时就与备注相矛盾了,在这里只是提供一种思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值