问 最少几只蜜蜂才能建巢 注意是最少几只蜜蜂才能建巢。 最少几只蜜蜂才能建巢换什么 才能...

关于&给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数&这个算法有两个很巧妙的解答:例如:序列: 2 2 1 3 3 3 2 3 1
要变成序列: 1 1 2 2 2 3 3 3 3最少需要的交换次数为4。
解法一:设 cAB 为在A位置上的B的数目,则***为:c21 + c31 + (c21 & c12 ? c23 + c21 - c12 : c32 + c12 - c21)按照这一方法,再看上面那个例子:c21 + c31 + (c21 & c12 ? c23 + c21 - c12 : c32 + c12 - c21)=1
1 )=4根据这个公式算得的***为4,其他的例子我也测试过,确实是正确的。
解法二:统计在应该是1的位置出现2的个数为a1;统计在应该是2的位置出现1的个数为a2;统计应该是1、2的位置出现3的个数为a3;那么最少交换次数为:a3 + (a1 & a2 ? a1: a2)果然根据这个公式算得的***为4,其他的例子我也测试过,确实是正确的。
请问这两个方法中的公式是什么道理,为什么这样列?求详细解释!关于这个算法题如果有更好的解答方法的话也欢迎回答!谢谢
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖***。
该问题已成功删除,仅对您可见,其他人不能够查看。
将数字(或者别的什么东西)以任意方式重新排列的过程称为置换,置换总是可以唯一地写成若干个轮换的组合,所谓轮换是指a-&b-&c-&d-&a这样的a,b,c,d四个数循环着交换位置的过程,比如说
a b c d e f gc e f a g b d
就可以写成(acfbegd)
而a b c d e f ga e b c d g f可以写成(a)(bedc)(fg)
而通过交换来完成某个置换的最小次数就等于通过交换完成这些轮换的次数,轮换长度为N的需要N-1次,因此总的次数就等于元素个数 - 轮换个数
回到原问题,显然就是找出一个置换,使得能将数列调整成目标状态,而且轮换个数最多。显然优先使用一轮换(不变),其次二轮换,最后是三轮换。也就是:1-1、2-2、3-3的不交换(一轮换),1-2和2-1,1-3和3-1,2-3和3-2配对成二轮换,剩下的形成1-2-3或1-3-2的三轮换。最后的交换次数是二轮换的数量加上三轮换的数量乘以二。用公式表示的话就是:min(c12,c21) + min(c13,c31) + min(c23,c32) + |c12 - c21| * 2(因为剩余的不能匹配的1-2或者2-1每个都会对应一个三轮换)
注意到min(c12,c21) + |c12 - c21| = max(c12,c21)而min(c12,c21) + max(c12,c21) = c12 + c21因此min(c12,c21) + max(c12,c21) = min(c12,c21) + min(c12,c21) + |c12 - c21|= 2 * min(c12,c21) + |c12 - c21| = c12 + c21同理2 * min(c13,c31) + |c13 - c31| = c13 + c312 * min(c23,c32) + |c23 - c32| = c23 + c32
而|c12 - c21| = |c13 - c31| = |c23 - c32|(都是三轮换个数)把前面三个等式左右两边分别相加得到:2 * min(c12,c21) + 2 * min(c13,c31) + 2 * min(c23,c32) + 3 * |c12 - c21| = c12 + c21 + c13 + c31+ c23 + c32
因此min(c12,c21) + min(c13,c31) + min(c23,c32) + |c12 - c21| * 2= 0.5 * (c12 + c21 + c13 + c31+ c23 + c32 + |c23 - c32|)
然后:注意到c11 + c12 + c13 = 1的个数 = c11 + c21 + c31因此c12 + c13 = c21 + c31因此0.5 * (c12 + c21 + c13 + c31+ c23 + c32 + |c23 - c32|)= c12 + c13 + 0.5 * (c23 + c32 + |c23 - c32|)而由之前的结论:c23 + c32 + |c23 - c32| = 2 * max(c23,c32)因此原式 = c12 + c13 + max(c23,c32)和解法二等效(只不过1,2,3的顺序有差异)
而解法一:c21 + c31 + (c21 & c12 ? c23 + c21 - c12 : c32 + c12 - c21)由于c23 + c21 = c32 + c12,因此原式 = c21 + c31 + c32 + c12 - min(c21,c12)= c31 + c32 + (c21 + c12 - min(c21,c12))= c31 + c32 + max(c21,c12)可见也是等效的
不是您所需,查看更多相关问题与***
德问是一个专业的编程问答社区,请
后再提交***
没有相关问题
关注该问题的人
共被浏览 (3680) 次弱弱的问一下 民生全币种白金信用卡 最低额度是多少能曲线吗-民生银行信用卡中心 -
信用卡之窗_专业的信用卡门户网站_在线信用卡申请平台轻松办理信用卡
后使用快捷导航没有帐号?
查看: 8011|回复: 4
弱弱的问一下 民生全币种白金信用卡 最低额度是多少能曲线吗
论坛体力2524
卡窗金币2605 枚
签到天数: 1 天连续签到: 1 天[LV.1]初来乍到帖子精华好友
钛金卡会员, 积分 2847, 距离下一级还需 153 积分
钛金卡会员, 积分 2847, 距离下一级还需 153 积分
卡窗金币2605 枚
在线时间337 小时
亲,快登录吧,能够浏览更多精彩内容哦!
才可以下载或查看,没有帐号?
弱弱的问一下 民生全币种白金信用卡 最低额度是多少能曲线吗
论坛体力3199
卡窗金币280 枚
该用户从未签到帖子精华好友
白金卡会员, 积分 3561, 距离下一级还需 2439 积分
白金卡会员, 积分 3561, 距离下一级还需 2439 积分
卡窗金币280 枚
在线时间629 小时
居住地山东省 济南市
50000& && &
论坛体力7095
卡窗金币1540 枚
签到天数: 15 天连续签到: 2 天[LV.4]偶尔看看III帖子精华好友
钻石卡会员, 积分 7559, 距离下一级还需 2441 积分
钻石卡会员, 积分 7559, 距离下一级还需 2441 积分
卡窗金币1540 枚
在线时间830 小时
居住地福建省
50K起步价!!!
论坛体力5872
卡窗金币1535 枚
签到天数: 3 天连续签到: 1 天[LV.2]偶尔看看I帖子精华好友
钻石卡会员, 积分 6549, 距离下一级还需 3451 积分
钻石卡会员, 积分 6549, 距离下一级还需 3451 积分
卡窗金币1535 枚
在线时间1130 小时
居住地福建省
很不错,祝福下楼煮
理性用卡,有惊喜!
恶性用卡,有手铐!
论坛体力1773
卡窗金币427 枚
星座天蝎座
该用户从未签到帖子精华好友
钛金卡会员, 积分 2484, 距离下一级还需 516 积分
钛金卡会员, 积分 2484, 距离下一级还需 516 积分
卡窗金币427 枚
在线时间1315 小时
居住地浙江省 温州市
13号申请全币白在路上了,不知道有没有曲线成功
腾讯QQ达人
绑定QQ并分享到微博的用户
新浪微博达人
绑定新浪微博账户
卡窗十八周年
参与十八周年活动
帅哥专用勋章
美女专用勋章
捐助卡窗建设
Powered by

参考资料

 

随机推荐