【Day3】【纪中OJ】2019.1.25C组每日总结

游记

Morning

【Before 8:00】 起得很晚,赖了20分钟(大概是因为昨天晚上FB了)
【Before 11:00】 发觉没有C组赛,码昨天题解中。。。
【Before 12:00】 听各位大佬重讲昨天的题解(只有第1题没重讲,是我太弱了吗)

题号题目讲题人
2【东莞市选2008】幻灯片LZC(小六大佬强无敌
3【东莞市选2008】导弹CJJ(第一个A掉第三题的大佬)
4【东莞市选2008】医院FY(SSL的女大佬都这么强的吗)

码匈牙利时因为过于真实被大佬LYF吊了一顿,报复时还被XC抓了。

Afternoon

【Before 14:00】 心情糟糕,在宿舍FB了一个中午
【Before 17:00】 听XC讲堆,困得一匹,我为什么来听会了的堆。。。
【Before 19:00】 洗了澡,开心(误)

Evening

【Before 20:00】 终于补完了昨天的题解
【Before 22:00】众人FB中—(隔壁三个大佬把扫雷玩成见刀插刃游戏)
大家FB的都很开心呢(很神奇XC没来过,来一次就得GG ) 就我一个人码了一整天题解嘤嘤嘤~~~
【21:38】XC姗姗来迟
【All Day】 看着隔壁大佬PRJ腐败了小说一整天,分数没变化


备忘知识点

匈牙利算法

【定义】匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。
【讲解】我们可以把每一个城市看成人

首先,我们先按升序连线

当连到大佬LYF时,我们发现LYF的凤姐被大佬PRJ抢了。这时,我们先看大佬PRJ还可以连微笑狗,可微笑狗被大佬CNH连了,我们可以发现大佬CNH还可以连如花,就把如花给大佬CNH,把微笑狗腾出来给大佬PRJ,把凤姐腾出来给大佬LYF。

最后把蒟蒻ddk与工口小萝莉连接。

此时,所有右边的女生(?)都已经连完了,这就说明匹配成功。


离散化

【定义】离散化是程序设计中一个常用的技巧,它可以有效的降低时间复杂度。其基本思想就是在众多可能的情况中,只考虑需要用的值。离散化可以改进一个低效的算法,甚至实现根本不可能实现的算法。要掌握这个思想,必须从大量的题目中理解此方法的特点。例如,在建造线段树空间不够的情况下,可以考虑离散化。
【讲解】离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。
通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。例如:
原数据:1,999,100000,15;处理后:1,3,4,2;
原数据:{100,200},{20,50000},{1,400};
处理后:{3,4},{2,6},{1,5}。
有些数据本身很大, 自身无法作为数组的下标保存对应的属性。如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理。当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。
例如:
91054与52143的逆序对个数相同。
设有4个数:
1234567、123456789、12345678、123456
排序:123456<1234567<12345678<123456789
=>1<2<3<4
那么这4个数可以表示成:2、4、3、1
使用STL算法离散化编辑的思路是:先排序,再删除重复元素,最后就是索引元素离散化后对应的值。
建议配合T2幻灯片某大佬博客进行食用


堆(堆排序)

【定义】堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
【概念】将初始待排序关键字序列(R1,R2…Rn)构建成大顶堆,此堆为初始的无序区
将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,…Rn-1)和新的有序区(Rn)
由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,…Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2…Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成
下图来张教材的图,是整个堆排序的过程: 整个过程的核心就是先初始化大顶堆,将最大数(堆顶)的放到堆的最后一个, 堆长度-1, 继续调整成大顶堆,直至有序序列为len(array_list)-1。
------------------------------------------------------一条WA的分界线----------------------------------------------
给定一个列表[16,7,3,20,17,8],对其进行堆排序。
首先根据该数组元素构建一个完全二叉树,得到

然后需要构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:
第一步: 初始化大顶堆(从最后一个有子节点开始往上调整最大堆)


20和16交换后导致16不满足堆的性质,因此需重新调整

这样就得到了初始堆。

第二步: 堆顶元素R[1]与最后一个元素R[n]交换,交换后堆长度减一
即每次调整都是从父节点、左孩子节点、右孩子节点三者中选择最大者跟父节点进行交换(交换之后可能造成被交换的孩子节点不满足堆的性质,因此每次交换之后要重新对被交换的孩子节点进行调整)。有了初始堆之后就可以进行排序了。

第三步: 重新调整堆。此时3位于堆顶不满堆的性质,则需调整继续调整(从顶点开始往下调整)


重复上面的步骤:



、




这就是堆的基本操作了,建议配合P3378堆食用


相关链接

多么崭(fu)新(bai)的一天啊!纪中网吧实锤了。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值