算法导论8-4

问题:n个红色水壶和n个蓝色水壶,相同颜色水壶可盛的水都不一样多,但每一个红色水壶都有一个对应的蓝色水壶,二者可盛的水一样多。不同颜色的水壶可以互相比较判断可盛的水是否一样多。但是相同颜色的水壶不能相互比较。设计一个随机算法,其期望的比较次数为O(nlgn).

思路:红色水壶和蓝色水壶比较,可在找到与其容量一样多的蓝色水壶的同时将剩下的蓝色水壶分为两组:容量比它大的和容量比它小的;

            利用找到的相同容量的蓝色水壶可以反过来与剩下的红色水壶比较,将红色水壶也分为两组:容量比它大的和容量比它小的;

伪代码:

Match(RED,BLUE,p,r)
1.let C[p,...,r] be a new array//记录配对信息 
2.if RED.length==1
3.	C[p]=p
4.i=random(p,r)
5.q=FAST-SORT(BLUE,p,r,RED[i])//以RED[i]为主元快排BLUE			
6.FAST-SORT(RED,p,r,BLUE[q])//以BLUE[q] 为主元快排RED 		 
7.Match(RED,BLUE,p,q-1) 	
8.Match(RED,BLUE,q+1,r)	


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值