算法
文章平均质量分 92
fengkeyleaf
经常二次元,偶尔敲代码
展开
-
北大C++程序设计编程作业答案+解析·合集
※ 本文之中如有错误和不准确的地方,欢迎大家指正哒~原创 2024-07-09 03:48:35 · 318 阅读 · 0 评论 -
北大C++程序设计编程作业答案+解析·继承
以下习题答案全部通过OJ,使用编译器为:G++(9.3(with c++17))原创 2024-07-04 05:04:25 · 755 阅读 · 0 评论 -
北京大学C++程序设计编程作业答案+解析·运算符重载
以下习题答案全部通过OJ,使用编译器为:G++(9.3(with c++17))原创 2024-07-02 09:56:13 · 747 阅读 · 0 评论 -
北京大学C++程序设计编程作业答案+解析·类和对象提高
以下习题答案全部通过OJ,使用编译器为:G++(9.3(with c++17))原创 2024-06-30 00:40:45 · 310 阅读 · 0 评论 -
北京大学C++程序设计编程作业答案+解析·类和对象基础
以下习题答案全部通过OJ,使用编译器为:G++(9.3(with c++17))原创 2024-06-29 21:36:09 · 258 阅读 · 0 评论 -
北京大学C++程序设计编程作业答案+解析·从C走进C++
注意函数返回值是数组a在下标i的值,不是指针,如果我们只返回该值,而不是引用,在外部修改函数的返回值也只是修改该返回值自身,与数组a存储的值没有关联,因为没有返回引用,程序会对返回值进行复制,而不是返回值本身。解析:swap函数需要交换两个参数的值,但是调用函数的时候没有传入指针,所以我们很容易想到需要传入变量的引用,这样在函数内部变更参数的值,才能影响函数外部的变量的值,否则只会影响函数参数的值,而外部则不受影响。所以,这里的swap函数的参数需要:1)必须是指针类型,和外部传入的参数一致;原创 2024-06-28 03:32:53 · 831 阅读 · 0 评论 -
清华计算几何大作业(十):CG2017 PA5-2 FruitNinja(水果忍者)· 下
Half-plane Intersection算法非常的直接,使用的是Divide-and-Conquer(分治)进行计算,每次递归返回时,我们需要使用MapOverlay来计算半平面的交集(这个交集必为Covexll),但这个交集和之前的MapOverlay不太一样,这里的交集结果可能是平面,线段,或者是点。这个方法非常的直接,这里使用教材上面的图例。这里给到题目网页上的一个实例的可视化结果,左边的结果是线段在对偶平面求得的半平面相交区域,右边的结果是可视化解集中的其中一个解(一条满足题意的直线)原创 2022-08-20 09:49:19 · 605 阅读 · 1 评论 -
清华计算几何大作业(十):CG2017 PA5-2 FruitNinja(水果忍者)· 上
计算几何算法:1)Map Overlay,详见教材 2.3 计算子区域划分的叠合(2.3 Computing the Overlay of Two Subdivisions) 和 4.2 半平面求交 (4.2 Half-Plane Intersection) - 本章节主要讨论算法;2)4 线性规划:铸模制造 (Linear ProgrammingManufacturing with Molds) - 最优算法原创 2022-08-20 04:41:13 · 369 阅读 · 0 评论 -
124. Binary Tree Maximum Path Sum(二叉树中的最大路径和)
注意,当前Node应该返回Node在MaximumPath这种情况下的最大值,且其Parent也参与到MaximumPath之中,1)种的四种情况,只有1.4是不包含Node.parent在MaximumPath的,所以我们只需要返回1.1和1.2和1.3,三者之中的最大值即可。从这点也说明,MaximumPath一定向下取,就不能返回,所以当我们包含某个Node,那么我们只能包含其左孩子或右孩子,而不能两者都取到,否则该Node会被重复计算两次,不符合题目要求。那么具体应该怎么做呢?......原创 2022-07-23 04:02:10 · 218 阅读 · 0 评论 -
334. Increasing Triplet Subsequence(递增的三元子序列)
比如输入案例[1,0,2,0,-1,3],最后最小值为-1,次小值为2,最大值为3,但(-1,2,3)并不满足题意,因为-1和2的下标不满足,但在更新最小值为-1之前,我们找到了一个比-1大的最小值0,从而找到了下标m,也能找到满足的题意得三元组。当i>j时形成的三元组满足题意,当且仅当存在下标m...原创 2022-07-22 03:27:20 · 171 阅读 · 0 评论 -
MapOverlay & Boolean Operations 实现讲解(PS/Photoshop布尔运算底层算法)
从理论上来说,上述所有操作都可以SegmentIntersection算法中解决,但是这样做,Vertex和Edge相交会有问题,因为Edge会被分割成两段,会破坏原来Segment的输入集的范围,导致后续的操作变得困难。PS中的布尔运算可以说是设计师们非常强大和实用的工具之一,笔者探究计算几何的旅程之中,发现了这个算法设计得非常的精妙,所以尝试了实现它!2)Vertex和Vertex必然至少有一条完全重合的Edge,我们只保留其中一个Vertex,去除重合Edge,重定向其他Edge;...原创 2022-07-15 22:20:50 · 386 阅读 · 0 评论 -
清华计算几何大作业(九):CG2017 PA2-1 Shortest Path in The Room (房间中的最短路径)
这里给到必要观看的视频课程章节,这些内容对理解和实现 Triangulation 算法至关重要,标记有绿色√为必看章节:关于这道题的思路分析,笔者在小破站上面发布了系列讲解视频,相关内容视频都有涉及,大家可以观看相关视频,这里就不再赘述:※ 这部分的伪代码是笔者自己翻译的,所以和中文教材上面有些许不同3.2 三角拆分4. 可视化结果示例这里展示一个相对复杂的案例,输入多边形为正交多边形( Orthogonal Polygon ),且为迷宫多边形,用这个案例大家可以体会到整个算法项目可以应用到很多领原创 2022-07-13 19:45:59 · 263 阅读 · 0 评论 -
清华计算几何大作业(八):CG2017 PA2-2 Find Dancing Partners (寻找舞伴) · 下 | Voronoi Diagrams 构造实现讲解
在生成Voronoi Diagrams之后,我们需要查找某个点位于哪个Voronoi Cell之中,这个操作如果不借助Point Location,我们需要遍历所有Voronoi Cell,查询时间复杂度将会Unacceptable!那么我们可以借助Point Location算法将Voronoi Diagrams分割成一个个Trapezoid。我们在Trapezoidal Map之中进行Point Location,之后查找当前Trapzoid隶属于哪一个Voronoi Cell,即可完成题目要求的高效查原创 2022-07-13 18:00:38 · 369 阅读 · 0 评论 -
清华计算几何大作业(八):CG2017 PA2-2 Find Dancing Partners (寻找舞伴) · 中 | Voronoi Diagrams 构造实现讲解
将无限半边(Infinite Half-edge)连接到Bounding Box的思路也不难,首先,我们先将Bounding Box也看成一个方形的DCEL结构,然后计算出无限半边与边界边的节点,然后进行连接即可:但在进行连接的时候,需要注意四点:首先,在结束计算Voronoi Diagrams之后,Status Tree中存储的中间节点里面就包含了所需连接到R上的Infinite Half-edges,比如之前的例子:大家可以看到右侧Status Tree的中间节点刚好存储了需要进行连接的无限半边:e10原创 2022-07-13 15:23:24 · 184 阅读 · 0 评论 -
清华计算几何大作业(八):CG2017 PA2-2 Find Dancing Partners (寻找舞伴) · 上 | Voronoi Diagrams 构造实现讲解
这里给到必要观看的视频课程章节,这些内容对理解和实现 Voronoi Diagrams 算法至关重要,标记有绿色√为必看章节:问题描述:CG2017 PA2-2 Find Dancing Partners (寻找舞伴)这个作业属于最高难度一档,Voronoi Diagrams算法本身难理解,而且从这个算法开始,需要多个算法进行结合才能最终解决问题,因此大家需要有一定的心理准备哒~根据题目的提示,这道题有两种解题方法:因为为了结合我们学习的内容,这里我们主要介绍第一种解题方法,第二种大家有时间可以自己思考一下原创 2022-07-12 22:06:29 · 195 阅读 · 0 评论 -
清华计算几何大作业(七):CG2017 PA4-2 Orthogonal Windowing Query (正交矩形窗口查询)
清华计算几何大作业(七):CG2017 PA4-2 Orthogonal Windowing Query (正交矩形窗口查询)原创 2022-06-12 10:37:49 · 466 阅读 · 0 评论 -
清华计算几何大作业(六):CG2017 PA4-1 Planar Range Query (平面区域查询)
清华计算几何大作业(六):CG2017 PA4-1 Planar Range Query (平面区域查询)原创 2022-06-11 11:06:14 · 484 阅读 · 0 评论 -
清华计算几何大作业(五):CG2017 PA3-2 Which wall are you looking at (你在看哪面墙)
清华计算几何大作业(五):CG2017 PA3-2 Which wall are you looking at (你在看哪面墙)原创 2022-06-10 15:29:55 · 183 阅读 · 0 评论 -
清华计算几何大作业(四):CG2017 PA3-1 Delaunay Triangulation (Delaunay三角剖分)
清华计算几何大作业(四):CG2017 PA3-1 Delaunay Triangulation (Delaunay三角剖分)原创 2022-06-06 21:22:15 · 469 阅读 · 0 评论 -
清华计算几何大作业(三):CG2017 PA1-2 Crossroad (十字路口)
清华计算几何大作业(三):CG2017 PA1-2 Crossroad (十字路口)原创 2022-06-04 16:11:19 · 384 阅读 · 0 评论 -
清华计算几何大作业(二):CG2017 PA5-1 Dynamic Convex Hull(动态凸包)
清华计算几何大作业(二):CG2017 PA5-1 Dynamic Convex Hull(动态凸包)原创 2022-06-02 15:27:53 · 281 阅读 · 0 评论 -
清华计算几何大作业(一):CG2017 PA1-1 Convex Hull (凸包)
清华计算几何大作业(一):CG2017 PA1-1 Convex Hull (凸包)原创 2022-06-02 10:51:33 · 388 阅读 · 0 评论 -
清华计算几何大作业思路分析和代码实现
距离第一次接触计算几何到现在,不知不觉已经过去了一整年的时间,从一开始什么都不会,被DCEL折磨的死去活来,到现在基本还能玩转DCEL,这个过程真是既折磨又快乐,计算几何确实比较难,但是也是充满快乐的,借用邓俊辉老师在edX计算几何课程主页上面的一句话——体味几何之趣,领悟算法之美,可以完美诠释了笔者学习计算几何的感受,所以这里我给大家分享并整理一下清华x计算几何课程所涉及的10个大作业,以及它们的解题思路,可视化结果,以及我自己实现的代码,希望这些能让对计算几何有兴趣的童鞋根据自己的兴趣和学习进度,来选择原创 2022-06-01 23:48:52 · 833 阅读 · 0 评论 -
Voronoi图(四):抛物线的妙用
在上一节,我们已经了解了Voronoi图大致的构造思路:还是基于平面扫描线策略,但是需要引入抛物线来计算Voronoi Edge和Vertex,也就是上一节视频例子中所提到的海滩线(Beach Line,位于扫描线前进方向的后方)。接下来我们就来详解一下如何通过引入抛物线和海滩线,来完成Voronoi图的构建。原创 2022-03-29 23:41:22 · 796 阅读 · 0 评论 -
Voronoi图(三):构造Voronoi图
对于Voronoi的构造,我们究竟使用什么策略比较合适呢?针对这个问题,大家可以结合之前我们讲解的算法策略来分析一下呢。如果你之前看过笔者所著的其他计算几何算法详解,你应该对下面这些算法策略感到无比亲切原创 2022-03-26 23:15:24 · 2977 阅读 · 0 评论 -
Voronoi图(二):基本概念和性质
接下来,我们就先来看看Voronoi图的概念。就笔者自己的理解来说,Voronoi Diagrams(Voronoi图)主要由两部分组成:1)四个数据结构;2)一个基本性质。四个数据结构依次为。原创 2022-03-23 23:08:51 · 7512 阅读 · 0 评论 -
Voronoi图(一):塞尔达背后的计算几何
玩过塞尔达传说:荒野之息的朋友,应该都会赞叹海拉鲁风景的美丽。我们的林克时不时一人独自在战后废墟中探索一座座神庙,有时武器库告急,也会偶尔探望一下亲爱的人马们。现在林克一个人游荡在海拉鲁大地上,遇到了一个难题:他突然想回到河畔驿站修整一下,恢复心心,但是他究竟需要传送哪个传送塔,才能离驿站最近呢?下图给出了河畔驿站的位置,以及三个比较近的传送塔:平原之塔,双子山之塔和初始之塔原创 2022-03-22 12:15:33 · 1330 阅读 · 1 评论 -
点定位(五):处理退化情况·续(Point Location: handle degenerate cases)
点定位(五):处理退化情况·续原创 2022-03-20 21:19:49 · 907 阅读 · 26 评论 -
点定位(四):处理退化情况(Point Location: handle degenerate cases)
在前面几节,我们讲解了如何对梯形图和搜索结构进行拆解和更新,但是我们对输入做出了不少限制(即不允许退化情况),这一节我们就把关注点放在各种退化情况的处理上。总的来说,笔者总结的退化情况一共有三种。原创 2022-03-19 16:15:22 · 412 阅读 · 2 评论 -
双向链接的红黑树(二):直接删除
对于deleteMax()和deleteMin(),双向链接的逻辑和代码和原版是非常相似的,只需要在原版的基础上修复双向指向关系,和删除双向链表的头或尾节点即可,非常的简单。所以这一节我们把重点放在delete()上面,和之前分析put()的方法一样,我们也来看看原版delete()有哪些主要的步骤:原创 2022-03-17 14:52:12 · 289 阅读 · 0 评论 -
双向链接的红黑树(一):基础概念和插入
首先我们还是先来看看双向链接红黑树的概念,其实和双向链接BST相似,我们只是在此前的基础上引入红黑节点,其他的概念保持不变。下图展示了一个完整的双向链接红黑树:基本和之前的双向链接BST相似,所以这里不再详细介绍双向链接红黑树的概念。同样,经过这样处理的红黑树将不是一颗树,严格意义上来说,它是个连接图(Connected Graph)。原创 2022-03-16 13:53:52 · 886 阅读 · 0 评论 -
双向链接的二叉查找树(二):直接插入和删除
双向链接的二叉查找树(二):直接插入和删除1. 插入2. 删除3. 免责声明1. 插入首先实现双向的方法非常简单,我们只需在原来BST的基础上,每次插入或删除之后,修复一下子节点指向的父结点即可。另外因为BST在实际应用中因为效率问题,一般都是使用BBST,所以这里我没有实现BST的直接插入或删除,而是使用之前的插入或删除操作形成双向链接的BST,但BST的直接插入和删除方法基本和我下面讲解的非常相似,如果大家在自己实现的时候有问题可以留言哦~我们以插入(put)为例,原来的put()代码为:pri原创 2022-03-15 20:30:58 · 826 阅读 · 0 评论 -
双向链接的二叉查找树(一):基本概念
双向链接的二叉查找树(一):基本概念1. 背景介绍2. 基本概念2.1 为什们需要双向链接?2.2 结构和定义3. 直接前后继4. 免责声明1. 背景介绍从这章开始,我们将会深入讲解一下Voronoi图(Voronoi Diagrams)相关的内容,但是在进入到Voronoi图讲解之前,我们需要先来讲解一下特殊的数据结构——双向链接的红黑树(Doubly-linked red black tree),它的实现和理解对于我们高效实现Voronoi图算法至关重要,所以整个系列文章的结构如下:双向链接的二原创 2022-03-15 11:19:18 · 585 阅读 · 0 评论 -
点定位:如何拆分更新梯形图和二分搜索结构 · (三):处理S(Update trapezoidal map and search structure in point location)
点定位:如何拆分更新梯形图和二分搜索结构 · (三)原创 2021-12-21 11:49:30 · 182 阅读 · 0 评论 -
点定位:如何拆分更新梯形图和二分搜索结构 · (二):处理P和Q(Update trapezoidal map and search structure in point location)
点定位:如何拆分更新梯形图和二分搜索结构 · (二):处理P和Q原创 2021-12-21 11:37:41 · 165 阅读 · 0 评论 -
点定位:如何拆分更新梯形图和二分搜索结构 · (一):总思路分析(Update trapezoidal map and search structure in point location)
点定位(Point Location)是计算几何中非常重要的基础算法,一个最常用的应用就是GPS定位,在定位查找中,我们会用到点定位的算法进行快速查找。而且通过学习点定位算法,大家应该会见识到如何在空间内进行二分查找,以及如何创建这样一个支持在空间中进行二分查找的数据结构(即Search Structure,SS)。在此之前,我们一般接触的二分都是在一个数组中进行查找。原创 2021-12-20 22:40:03 · 619 阅读 · 0 评论 -
速来收藏 | 数据结构和算法文章汇总(含代码)
速来收藏!数据结构和算法文章汇总(含代码)原创 2021-08-22 11:00:06 · 148 阅读 · 0 评论 -
超详细 | 线段树讲解文章汇总(含代码)
超详细!线段树讲解文章汇总(含代码)原创 2021-08-22 10:26:03 · 165 阅读 · 0 评论 -
线段树(四):代码解析·续
线段树(四):代码解析·续原创 2021-08-22 10:23:26 · 107 阅读 · 0 评论 -
线段树(三):代码解析
线段树(三):代码解析原创 2021-08-22 10:11:17 · 127 阅读 · 0 评论