③ 递归与分治算法
空
贝贝今天AC了吗
这个作者很懒,什么都没留下…
展开
-
解谜游戏 | 感受算法的魅力
3. 解谜游戏成绩 10 开启时间 2020年09月7日 星期一 09:00 折扣 0.8 折扣时间 2020年09月15日 星期二 09:00 允许迟交 否 关闭时间 2020年10月10日 星期六 23:00 Description小张是一个密室逃脱爱好者,在密室逃脱的游戏中,你需要解开一系列谜题最终拿到出门的密码。现在小张需要打开一个藏有线索的箱子,但箱子上有下图所示的密码锁。每个点是一个按钮,每个按钮里面有一个小灯。.原创 2020-09-10 03:03:38 · 5496 阅读 · 4 评论 -
递归与分治 / 序列DP | 最大子数组问题
问题:寻找数组A[ l..r ] 中各元素之和最大的连续非空子数组。我们称这样的数组叫最大子数组。本文将给出三种解法:暴力求解、分治、动态规划。时间复杂度依次递减。为了方便函数传出结果,我们定义一个结构体来储存最大子数组的要素,即该子数组在原数组的下标界限和对应的和。typedef struct subArray { int l; //子数组的左边界 int ...原创 2020-03-06 14:51:13 · 573 阅读 · 0 评论 -
分治与递归 | 5:主元素问题的三种解法
问题:设T[0:n-1]是n个元素的数组。对任一元素x, 设S(x)={ i | T[ i ] = x }。当|S(x)|>n/2时, 称x为主元素。 设计一个线性时间算法, 确定T[0:n-1]是否有一个主元素,如果有,则返回。参考了一下网上的思路,大多是直接求主元素的问题。至于是否有主元素,我们假设存在,然后在求完后进行验证,如果不是,则答案值无效。由主元素的定义可以推证如下...原创 2020-03-03 23:32:49 · 3779 阅读 · 0 评论 -
递归与分治 | 4:寻找 a[i] = i 的不动点
问题:设n个不同的整数排好序后存于T[1:n]中。若存在下标i,1<=i<=n,使得T[i]=i,设计一个有效算法找到这个下标。要求算法在最坏情况下的计算时间为O(logn).暴力扫描的算法时间复杂度时O(n),要达到 O(logn) 需要用到分治的思想。既然已经给出了排好序的序列,我们假设是增序的(降序同理)。由于下标以1为单位增长的,而数组对应的值是以 >=1 的...原创 2020-03-03 21:35:41 · 1989 阅读 · 0 评论 -
递归与分治 / 排序 | 3:归并排序(递归与非递归两种实现)
排序算法是算法领域十分经典的一类算法,它的名字通俗易懂:给数字排序,让一组无序的数据通过排序算法后,能增序或者降序地输出。 排序算法有很多种,本文来详细讲讲 "归并排序法"。(本文均是增序排序,降序排序同理即略)本文目录一、算法理解二、算法实现1、merge(合并)的实现2、mergeSort的实现Ⅰ、递归实现Ⅱ、非递归实现完整代码...原创 2020-02-27 20:12:16 · 528 阅读 · 0 评论 -
递归与分治 | 2:最接近点对问题 —— 例题:套圈
耐心整理的精品笔记,花点时间耐心看完,相信会有收获 ^_^ )问题:给n个点的坐标,求最近的一对点之间的距离。解法一:暴力穷举法,将所有点两两距离都算出,最终取最小的值。时间复杂度为 解法二:分治法,下面具体说。时间复杂度为,理论上是最快的方法一、算法理论1、分(Divide)对于最初输入的 n 个点构成的点集S,大致均分成两部分:以所有点的x坐标的中位数mid为界,分为点...原创 2020-02-26 23:09:36 · 2763 阅读 · 5 评论 -
递归与分治 | 1:选择算法/中位数 —— 例题:油井
耐心整理的精品笔记,花点时间耐心看完,相信会有收获 ^_^ )本文目录解法一:RandomizedSelect算法一、算法描述1、分(divide)2、治(conquer)二、算法实现1、partition的实现2、RandomizedSelect的实现完整代码:解法二:BFPTR算法1、选取pivot2、partition的实现3、B...原创 2020-02-27 11:04:58 · 3102 阅读 · 2 评论