自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

闻缺陷则喜何志丹

本人拙作《闻缺陷则喜》欢迎指教,可在CSDN下载

  • 博客(2483)
  • 资源 (86)
  • 收藏
  • 关注

原创 【计算几何 第十一章】凸包:混合物

数学 几何所谓凸多面体是指这样一类多面体——将其任意一个面扩展成平面,其他所有面都在该平面的同一侧。泼德猜想指出,每个凸多面体都允许自无重叠展开 (Shephard 1975)我们只关心产品的两类成分–不妨称之为A和B。假设混合物ξ1,ξ2,ξ3\xi_1,\xi_2,\xi_3ξ1​,ξ2​,ξ3​。ξ1\xi_1ξ1​中含有10%的A,35%的B;ξ2\xi_2ξ2​含有16%的A,20%的B;ξ3\xi_3ξ3​,含有7%的A、15%的B分成。将ξ1,ξ2,ξ3\xi_1,\xi_2,\xi_3ξ1

2026-08-27 07:00:00 1094 46

原创 博客下载学院导航

【摘要】"亲士CAD工具箱"是一款支持中望CAD2024、AutoCAD2013及以上的辅助工具,提供文本处理(TXT导入/导出、批量编辑)、图形优化(面域修复、自动排料)、三维建模(五角星生成)等实用功能,兼容Windows系统并需.NET框架。另提供独立运行的"亲士ODA工具箱",支持DWG文件文本与CSV互转(仅限2013及以下版本)。开发者何志丹在CSDN分享算法、CAD技术及软件工程经验,并提供《喜缺全书算法册》等学习资源及视频课程(C#/C++入职培训)。相关工具和资料可通过博客、GitCode

2026-08-13 10:57:59 603 11

原创 【计算几何 第10章】更多几何数据结构:截窗

本文介绍了计算几何中的几种重要数据结构和算法。主要内容包括:1)快速选择算法(Quickselect)及其优化方法;2)线段树的基本概念;3)优先查找树的构建和查询方法,用于处理二维点集的在线查询;4)区间树的原理和应用,用于查询与矩形相交的线段。文章还讨论了这些算法的时间复杂度和空间复杂度,其中优先查找树的查询时间复杂度为O(K+logN),区间树为O(logn+k)。最后提供了测试环境和相关数学知识的预备内容。这些算法在计算几何和计算机图形学中有广泛应用。

2026-08-24 07:00:00 771 54

原创 【计算几何 第九章】Delaunay三角剖分:高度插值

本文介绍了与Delaunay三角剖分相关的数学几何知识。首先阐述了泰勒斯定理和圆周角定理,证明了圆周角与圆心角的关系。接着讨论了四点共圆的条件和圆内外的位置关系。正文部分重点讲解了平面点集三角剖分的概念,包括极大平面子区域划分、角度向量比较等。通过定理9.1证明了三角剖分的性质,并引入合法三角剖分和边翻转操作的概念。最后指出翻转操作能优化三角剖分,使角度向量单调增加,最终得到更优解。文章为理解Delaunay三角剖分奠定了理论基础。

2026-08-20 07:00:00 820 55

原创 【高等几何 线性代数】正交矩阵、正交变换、齐次矩阵

本文系统探讨了二阶正交矩阵与几何变换的关系。首先定义了正交矩阵的基本性质,指出旋转矩阵和反射矩阵都是正交矩阵的特例。通过数学推导证明所有二阶正交矩阵均可表示为旋转或反射矩阵。文章引入齐次矩阵处理平移变换,并分析了仿射变换的等效操作顺序问题,提出任意仿射变换可分解为缩放、旋转和平移的组合。最后提及更复杂的矩阵分解方法(QR分解、极分解)和高级变换表示,为CAD等应用场景中的几何变换问题提供了理论基础。文中包含详细的矩阵运算示例和几何解释,适合需要深入理解二维几何变换的读者。

2026-08-17 07:00:00 1336 68

原创 【计算几何 八章】排列与对偶:光线跟踪超采样

本文研究了单位正方形内点集的半平面差异值问题,通过几何分析和对偶变换等方法,给出了计算最大差异值的有效算法。主要结论包括: 差异值最大半平面必经过至少一个点或两个点 提出了基于对偶变换的O(n²)时间算法 分析了直线排列在差异值计算中的作用 证明了排列复杂度上界为O(n²) 研究结果为计算机图形学中的抗锯齿问题提供了理论基础,通过建立采样点分布与半平面覆盖面积的量化关系,为改进像素着色算法提供了新思路。

2026-08-13 07:00:00 1116 50

原创 【计算几何】第七章 Voronoi图:邮局问题

本文介绍了Voronoi图(沃罗诺伊图)的定义、性质及其构造算法。Voronoi图将平面划分为若干子区域,每个子区域包含到特定基点距离最近的所有点。文章首先阐述了Voronoi图的基本概念和欧拉公式的应用,随后详细讨论了平面扫描算法(Fortune算法)的构造过程,包括基点事件和圆事件的处理。此外,还探讨了线段集Voronoi图的复杂性,描述了不同断点类型及其对应的几何特征。该算法的时间复杂度为O(nlogn),空间复杂度为O(n)。文章还简要提及了退化情况的处理方法。

2026-08-10 07:00:00 1042 54

原创 【高等几何 梅向明 第一章】正交变换与仿射变换

本文摘要:文章系统介绍了点变换与正交变换的基本概念和性质。首先定义了集合间的对应关系和点变换的基本概念,包括变换的乘积、恒等变换和逆变换。随后重点讨论了正交变换,通过平移、旋转和反射等实例展示其特性,并证明正交变换保持点间距离不变,能够将共线点映射为共线点且保持角度不变。文章详细推导了正交变换的代数表示形式,并证明了满足正交条件的线性变换必为正交变换。这些内容为几何变换理论提供了坚实的数学基础。

2026-08-06 07:00:00 836 54

原创 【计算几何 第六章】点定位:找到自己的位置

本文主要研究平面子区域中的点定位问题,提出基于梯形图的随机增量式算法。通过引入垂线将平面分割为垂直条带,利用二分查找可在O(logn)时间内确定查询点位置。梯形图T(S)最多含6n+4个顶点和3n+1个梯形。算法通过逐步插入线段构建梯形图和相关查找结构D(一个有向无环图),支持高效点查询。关键点包括梯形性质分析、邻居关系定义以及增量更新策略,确保在O(nlogn)期望时间内完成构造,为几何计算提供有效解决方案。

2026-08-03 07:00:00 847 53

原创 【C++数论】P10403 「XSOI-R1」跳跃游戏|普及+

摘要 题目要求计算在特定条件下,从数组中选择若干区间能获得的最大经验值。经验值计算规则为: 当区间gcd为2且长度为偶数时,经验值为区间长度; 当区间gcd为3且长度为奇数时,经验值为区间长度; 其他情况经验值为0。 解法利用数论知识,通过预处理每个位置的区间gcd值,高效计算满足条件的区间贡献。时间复杂度为O(n log n),适用于大规模数据(n ≤ 6×10^5)。

2026-07-30 08:06:48 873 52

原创 【计算几何第五章】正交区域查找:数据库查询

本文介绍了空间数据结构的几种关键算法及其应用。首先讨论了一维区域查找,通过排序和二分查找实现高效查询。接着详细讲解了kd树(k-dimensional tree)的构建与查询方法,分析了其O(√n + k)的时间复杂度。然后介绍了区域树(二维线段树/树套树)结构,阐述了其在多维查询中的优势。最后扩展到高维空间,说明区域树在d维空间中的存储和查询性能。文章还探讨了处理坐标相同点的技巧,并提供了相关数学知识和算法学习资源。这些数据结构在计算机图形学、地理信息系统等领域有广泛应用。

2026-07-27 07:00:00 922 64

原创 【计算几何 第四章】线性规划:铸模制造

本文探讨了半平面几何与线性规划在计算几何中的应用。首先介绍了半平面的数学定义及其几何表示,分析了凸多边形的性质。然后将三维铸造问题转化为二维半平面求交问题,证明了铸造可行性的判定条件。针对半平面求交问题,提出了线性时间和O(nlogn)时间复杂度的算法。进一步讨论了二维线性规划的递增式和随机化解法,分析了有界和无界情况下的处理方法。最后简要提及了最小外接圆问题与三维线性规划的联系。这些几何算法在二维和三维空间中的约束求解问题上展现出高效性和理论保障。

2026-07-23 07:00:00 1303 68

原创 【计算几何 第三章】多边形三角剖分:画廊看守问题

本文探讨了艺术画廊问题相关的多边形几何性质。首先通过数学归纳法证明了简单多边形内角和公式(n-2)×180°。随后介绍了艺术画廊问题的基本概念,提出通过三角剖分将多边形分解为n-2个三角形,并利用三色染色法得出⌊n/3⌋台摄像机即可监控整个画廊的结论。文章还详细阐述了Meisters两耳定理,证明任何简单多边形至少存在两个"耳朵"顶点。此外,分析了多边形单调划分的条件,指出当多边形不含分裂和汇合顶点时即为y-单调多边形。最后讨论了如何在分裂和汇合顶点处添加不相交的对角线来实现单调划分。

2026-07-20 07:00:00 834 49

原创 【计算几何】第二章 线段求交:专题图叠合

本文介绍了计算几何中线段求交的平面扫描算法,以及用于表示平面子区域划分的双向链接边表结构。主要内容包括: 线段求交的平面扫描算法,通过维护扫描线状态和事件队列实现,时间复杂度为O(nlogn + Ilogn),其中I为交点数量。 双向链接边表(DCEL)数据结构的设计,用于表示平面子区域划分,包含顶点、面和半边三种记录类型,支持高效的拓扑查询操作。 两个子区域划分的叠合计算,通过线段求交和DCEL调整实现,并介绍了如何识别交集、并集和补集区域。 文章还介绍了这些算法在CAD领域的应用,并提供了相关扩展学习资

2026-07-16 07:00:00 896 66

原创 计算几何--算法与应用 邓俊辉译(第三版) 第一章 凸包与导言

本文介绍了计算几何中的凸包概念及其应用场景,重点讲解了Andrew单调链算法。首先通过几何性质定义了凸包,并分析了暴力算法的不足。然后详细阐述了Andrew算法的实现步骤:排序后分别计算上下凸包,通过向量叉积判断点的位置关系来维护凸包顶点。算法利用字典序排序和栈结构高效构建凸包,处理了共线点和浮点误差等特殊情况。文章还提供了算法正确性的几何证明,并指出合并上下凸包得到最终结果的策略。该算法在机器人路径规划、图形处理等领域有重要应用。

2026-07-13 07:00:00 972 75

原创 【解析几何 计算几何】重心坐标、凸组合

本文介绍了重心坐标和凸组合的概念及其几何意义。重心坐标描述了点在非共线三点构成的坐标系中的唯一表示方法,通过向量运算证明了表示的唯一性。凸组合是点集的加权平均,权重非负且和为1。文章证明了三角形内的点与凸组合一一对应,而三角形外的点无法表示为凸组合,并扩展讨论了凸多边形的情况,指出凸多边形内的点存在凸组合,而外部点则不存在。最后提供了相关算法和CAD工具的学习资源。

2026-07-09 07:00:00 557 56

原创 【栈 临项交换】P7915 [CSP-S 2021] 回文|普及+

本文讨论了CSP-S 2021的一道回文构造题目。给定一个长度为2n的序列,其中1到n各出现两次,要求通过每次取首或尾元素构造一个回文序列。若能构造,则输出字典序最小的操作序列(L表示取首,R表示取尾),否则输出-1。 解题思路采用双向队列模拟栈的操作,分两种初始选择情况(首或尾)进行处理。通过比较队首和队尾元素是否相同来判断回文构造的可能性,优先选择L操作以保证字典序最小。文章提供了详细的输入输出格式说明、样例解释和代码框架,并讨论了特殊情况的处理方法。时间复杂度需满足大规模数据要求(n≤5×10^5)。

2026-07-06 07:00:00 508 54

原创 【区间合并】P6801 [CEOI 2020] 花式围栏|普及+

花式围栏问题摘要 题目要求计算满足特定条件的矩形数量,这些矩形必须完全包含在由N个连续矩形部分组成的围栏内。每个部分有高度hi和宽度wi,矩形需满足整数坐标和边界限制。核心思路是将问题分解为高度区间处理,使用区间合并技术统计不同高度的有效矩形数。通过有序映射维护连续区间,从高到低计算各高度对应的矩形总数,最终求和所有高度贡献的总矩形数,结果对1e9+7取模。该算法有效处理大规模数据(N≤1e5),确保时间复杂度为O(N log N)。

2026-07-02 07:00:00 337 64

原创 【同济线性代数第五版】第五章 相似矩阵及二次型

本文主要介绍了线性代数中的几个核心概念:向量内积、正交性、特征值与特征向量、相似矩阵、对称矩阵对角化以及二次型。首先阐述了向量的内积运算和正交性判定,并介绍了施密特正交化方法。接着讨论了矩阵的特征值与特征向量的定义及性质,证明了不同特征值对应的特征向量线性无关。然后介绍了相似矩阵的概念及其与对角化的关系,指出n阶矩阵可对角化的充要条件是有n个线性无关特征向量。特别地,对于对称矩阵,证明了其特征值为实数,不同特征值对应的特征向量正交,并给出了正交对角化的具体步骤。最后简要提及二次型及其标准形的概念。这些内容为

2026-06-29 07:00:00 746 79

原创 【同济线性代数第五版】第四章 向量组的线性相关性

本文摘要: 本文系统介绍了向量组及其线性相关性的核心概念和定理。主要内容包括:1) 向量组的线性组合与等价性定义,以及相关判定定理;2) 向量组线性相关性的定义和判定方法,特别是秩与线性相关性的关系;3) 向量组的秩和最大无关组概念;4) 线性方程组解的结构理论,包括基础解系和解空间的维度;5) 向量空间的定义、基和坐标表示。文中通过多个定理和例子深入阐述了这些概念之间的内在联系,如矩阵秩与向量组秩的关系(三秩合一),以及齐次线性方程组解空间的性质等。这些内容构成了线性代数中向量空间理论的基础框架。

2026-06-28 07:00:00 326 7

原创 【同济线性代数第五版】第三章 矩阵的初版变换与线性方程组

本文介绍了矩阵的初等变换、矩阵的秩以及线性方程组的解。主要内容包括: 矩阵初等变换的三种类型及其性质,初等矩阵的定义,矩阵等价的概念及性质; 矩阵秩的定义及计算方法,秩的性质和相关定理; 线性方程组解的判定条件(定理3-7),包括非齐次和齐次方程组的解的存在性、唯一性条件,以及求解步骤和实例。 文章还阐述了矩阵的初等变换与秩的关系,以及矩阵方程的解与秩的关系。这些内容是线性代数中矩阵理论和线性方程组求解的基础知识。

2026-06-25 07:00:00 942 71

原创 【同济线性代数第五版】第二章 矩阵及其运算

本文主要介绍了矩阵的基本概念与运算规则。首先定义了矩阵的表示方法,包括m×n矩阵、方阵、行/列矩阵、对角矩阵等。然后详细讲解了矩阵的加法、数乘、乘法三种线性运算,以及矩阵转置运算的性质。特别强调了矩阵乘法不满足交换律但满足结合律和分配律。接着介绍了方阵的行列式和伴随矩阵,并给出了逆矩阵的定义、判定条件和基本性质。文章通过定理证明和实例分析,系统阐述了矩阵运算的核心概念和规律,为线性代数的学习奠定了基础。

2026-06-22 07:00:00 1195 88

原创 【同济线性代数第五版】第一章 行列式

本文系统介绍了行列式的核心概念与性质:1)定义二阶、三阶及n阶行列式,阐释全排列与逆序数的关系;2)分析行列式对换操作对奇偶性的影响;3)详细论述行列式的6大性质,包括转置不变性、行变换规则等;4)提出行列式按行(列)展开定理及代数余子式计算方法;5)运用数学归纳法证明范德蒙德行列式;6)阐述克拉默法则,说明线性方程组解的求解条件。全文通过严格数学证明,构建了行列式理论的完整框架,为线性代数奠定重要基础。

2026-06-18 07:00:00 2111 76

原创 【解析几何丘维声 第二章】空间的平面和直线

定义1.10两个向量a⃗与b⃗\vec a与\vec ba与b的内积(记作a⃗⋅b⃗a⋅b)规定为一个实数。a⃗⋅b⃗∣a⃗∣∣b⃗∣cos⁡a⃗b⃗a⋅b:=∣a∣∣b∣cosaba⃗⋅b⃗Πba⃗∣b∣a⋅bΠb​a∣b∣定理1.5对于任意的向量a⃗bc,任意实数λ\vec a,b,c,任意实数\lambdaabc,任意实数λ,有a⃗⋅b。

2026-06-15 08:24:42 346 71

原创 【解析几何丘维声 第一章】向量代数第二部分

本文系统介绍了向量运算中的外积(叉乘)和混合积概念及其几何意义。外积定义为两个向量构成的平行四边形有向面积,方向遵循右手定则,具有反交换律、数乘分配律等运算规律。在直角坐标系下,外积可通过行列式计算。混合积则代表三个向量构成的平行六面体定向体积,其值为零时三向量共面。文章详细推导了坐标计算方法,证明了拉格朗日恒等式等关键定理,并给出了四点共面的判定条件。这些内容为向量代数在几何和物理中的应用提供了理论基础。

2026-06-11 07:00:00 707 73

原创 【解析几何丘维声 第一章】向量代数第一部分

本文主要介绍了向量的基本概念、线性运算以及坐标系中的表示方法。首先定义了向量的概念,包括向量的大小、方向、零向量、单位向量和反向量。然后详细讲解了向量的加减法和数量乘法(数乘),并阐述了这些运算的基本性质。接着讨论了共线(共面)向量组的判定条件,并通过命题形式给出了相关结论。 在坐标系部分,介绍了仿射坐标系和直角坐标系的定义,说明了如何在坐标系中表示向量和点,并通过坐标进行向量的线性运算。此外,还探讨了三点共线、两向量共线的条件,并给出了线段的定比分点公式。 最后,文章引入了向量的内积(点乘)概念,解释了其

2026-06-08 07:00:00 750 68

原创 【前缀和 数论】P10724 [GESP202406 七级] 区间乘积|普及+

文章摘要: 题目要求统计序列中满足区间乘积为完全平方数的子区间数量。关键思路是将乘法转换为质因数加法,利用完全平方数的质因数均为偶数的特性。通过前缀和与状态压缩技术,记录质因数出现次数的奇偶性,使用哈希表统计相同奇偶性状态的数量来高效求解。时间复杂度为O(n),适用于大规模数据。示例代码展示了如何实现这一算法,并通过单元测试验证正确性。该问题结合了数论、前缀和和状态压缩等算法思想,是典型的数学与计算机科学交叉问题。

2026-06-04 07:00:00 301 70

原创 【计算几何】指定半径倒角的实现,暂不考虑误差

本文介绍了CAD制图中倒角绘制的数学原理及实现方法。首先阐述了直线与直线倒角的两种解法:一是利用角平分线和三角函数计算圆心位置,二是通过平行线交点确定圆心。其次讲解了直线与圆弧、圆弧与圆弧倒角的处理方法,均基于几何切圆原理。文章还提供了AutoCAD环境下的C#实现代码片段,并指出精度问题。最后推荐了相关算法学习资源,包括视频课程和测试环境配置。全文结合数学理论与工程实践,为CAD倒角功能开发提供了系统性的解决方案。

2026-06-01 07:00:00 497 78

原创 P8134 [ICPC 2020 WF] Opportunity Cost|普及+

这篇文章介绍了ICPC 2020 WF的一道题目"Opportunity Cost",要求计算购买手机时的机会成本。题目给出了n个手机的三维属性(价格、性能、用户友好度),定义机会成本为当前手机与其他所有手机在各维度上差值的最大值之和。文章分析了问题的数学性质,提出了预处理优化方法,将时间复杂度从O(n²)降低到O(8n)。核心思路是通过枚举所有可能的组合情况,预处理出最大值函数,从而快速计算每个手机的机会成本。最后给出了部分C++代码实现框架,展示了如何读取输入数据和处理多维属性的计算。

2026-05-28 07:00:00 815 75

原创 CAD子系统,是自研还是外包?

摘要: 本文探讨软件开发的"自研vs外包"选择,指出外包的核心优势在于专业团队已踩平技术坑、降低决策成本、实现高效复用。针对发包方对后续维护的顾虑,提出通过交付完整源码、文档及自动化测试确保可持续性。文章强调专业分工的价值,认为外包能让企业聚焦核心业务,并通过提高交付质量减少沟通成本。最后提供相关工具和课程资源,倡导"专业的人做专业的事"理念。(149字)

2026-05-25 07:00:00 1622 70

原创 【图论 树 启发式合并】P7165 [COCI2020-2021#1] Papričice|普及+

本文摘要: 题目要求在一棵n个节点的树中删除两条边,将树分成三个连通块,使得三个连通块节点数的最大值与最小值之差最小。输入为树的边,输出这个最小差值。 解题思路: 使用邻接表存储树结构 通过BFS确定节点层次和父子关系 计算各子树大小 枚举所有可能的边对组合,计算三种情况下的差值: 当一条边是另一条的祖先时,计算三个连通块大小 否则计算三个独立子树的大小 在所有可能组合中寻找最小差值 时间复杂度分析: 基础解法为O(n²),适用于小规模数据 优化思路涉及启发式合并,可将复杂度降至O(n log n log

2026-05-21 07:00:00 1877 71

原创 【C++动态规划】B3734 [信息与未来 2017] 加强版密码锁|普及+

题目摘要: 本题描述了一个密码锁问题,由n个拨盘组成,每个拨盘初始值为0到99之间的整数。拨盘可以向上或向下拨动,每次拨动花费k²单位时间(k为拨动次数)。要求将所有拨盘调整为严格递增序列,求最小总花费时间。 输入为拨盘数量n和随机数种子R1,拨盘初始值由Ri mod 100生成。输出解开密码锁的最小时间。 解题思路: 使用动态规划,dp[i][j]表示前i+1个拨盘严格递增且第i个拨盘为j时的最小成本 状态转移时考虑从j1到j2的拨动成本(min(顺时针或逆时针拨动)) 时间复杂度O(n*100²),空间

2026-05-18 07:00:00 1437 72

原创 【区间合并】P7912 [CSP-J 2021] 小熊的果篮|普及+

本文介绍了小熊水果店问题的C++解决方案。题目要求将一排水果按特定规则分批次挑出,每次挑出每个"块"的最左边水果。作者使用链表结构记录各水果块的区间信息,通过迭代处理每次挑出的水果编号,并动态合并相邻同类型的水果块。核心算法时间复杂度为O(n),提供了样例输入输出及单元测试验证代码正确性。文章还包含相关算法学习资源的扩展阅读链接,适合需要解决类似区间合并问题的读者参考。

2026-05-14 07:00:00 573 65

原创 【动态规划 前缀和】P7074 [CSP-J2020] 方格取数|普及+

本文介绍了解决方格取数问题的动态规划方法。题目要求从n×m方格左上角到右下角,只能向上、向下或向右移动,求路径上整数和的最大值。采用动态规划,状态dp[r][c]表示到达(r,c)时的最大收益。通过预处理前缀和优化转移过程,将时间复杂度从O(R²C)降至O(RC)。核心思路是分情况处理不同移动方向,利用前缀和快速计算区间和。代码实现了这一优化算法,适用于大规模数据(n,m≤1000)。样例测试验证了算法的正确性。

2026-05-11 07:00:00 1373 73

原创 高等数学 定理及习题

本文整理了高等数学(同济第八版)上下册的完整知识体系,涵盖函数与极限、导数与微分、积分学、微分方程、多元函数微积分、重积分、曲线曲面积分以及无穷级数等核心内容。作者提供了详细的章节索引和对应的CSDN博文链接,方便读者系统学习。此外,还推荐了相关视频课程和测试环境,并分享了学习建议:"专业的人做专业的事",强调系统学习和实践操作的重要性。文章末尾附有作者的联系方式和资源下载指引,为读者提供全面的学习支持。

2026-05-07 12:00:00 474 18

原创 【高等数学 第十二章】无穷级数

本文系统介绍了常数项级数和幂级数的核心概念与审敛方法。主要内容包括:1)常数项级数的收敛性质与比较审敛法;2)交错级数的莱布尼茨判别法;3)幂级数的收敛半径确定(阿贝尔定理)及泰勒展开条件;4)常见函数的幂级数展开式(如指数函数、三角函数等)。文章重点阐述了正项级数比较审敛法、比值审敛法等重要工具,并详细说明了绝对收敛与条件收敛的区别。通过严格的数学推导,为分析级数收敛性提供了系统的方法论指导。

2026-05-07 07:00:00 1115 68

原创 【高等数学 十一章】曲线积分与曲面积分

本文介绍了曲线积分的两类主要形式及其计算方法。第一部分阐述了对弧长的曲线积分(第一类曲线积分)的定义、性质及参数方程计算法。第二部分讨论了对坐标的曲线积分(第二类曲线积分)的概念、性质和参数方程求解方法,并通过实例展示了计算过程。第三部分重点讲解了格林公式及其应用,包括平面单连通区域的概念、格林公式的表达式,以及曲线积分与路径无关的条件判定定理。全文通过数学定义、定理证明和典型例题相结合的方式,系统介绍了曲线积分的基本理论和实际应用方法。

2026-05-04 22:03:18 558 3

原创 【高等数学 第十章】重积分

本文系统地介绍了二重积分和三重积分的概念、性质及计算方法。主要内容包括: 二重积分的定义:通过曲顶柱体体积和平面薄片质量两个实际问题引入,给出二重积分的极限表达式。 二重积分的6个重要性质:包括线性性、可加性、积分不等式、估值定理和中值定理等。 二重积分的计算方法: 直角坐标系下的计算(先x后y或先y后x) 极坐标系下的转换公式及应用实例 三重积分的概念:类比二重积分,给出空间区域上的三重积分定义。 文中通过典型例题(如计算特定区域上的二重积分、求球体与圆柱面相交部分的体积等)演示了积分方法的应用,并配有示

2026-05-04 07:00:00 1967 72

原创 【调和级数 最大公约数 容斥原理】P6298 齿轮|普及+

本文研究了齿轮组合的损耗因子计算问题。给定n个齿数不超过m的齿轮,要求统计选取k个齿轮时,所有可能组合中损耗因子(即齿轮齿数的最大公约数)为t(1≤t≤m)的方案数。通过调和级数预处理每个数作为倍数的出现次数,利用组合数计算初始方案数,再通过容斥原理从大到小处理,得到最终结果。算法时间复杂度为O(n log n),适用于大规模数据。

2026-04-30 07:00:00 449 67

原创 【高等数学 第九章】多元函数微分法及其应用

本文主要介绍了多元函数的基本概念和相关性质,包括平面点集、多元函数的定义、极限与连续性、偏导数和高阶偏导数的计算方法,以及全微分的定义和求导法则。重点讨论了多元函数的极限存在条件、连续性定理、偏导数的定义与计算、二阶偏导数的对称性,以及复合函数的求导法则。通过具体例子展示了如何判断极限存在性、计算偏导数和全微分,并阐述了多元函数与一元函数在连续性、可微性等方面的差异。这些内容是多元函数微积分的基础知识,为后续学习多元函数的极值、梯度等概念奠定了基础。

2026-04-27 07:00:00 942 82

喜缺全书算法册 C++实现

电子书和博文的分工。电子书以:原理、正确性证明、总结为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。 当前阶段:以二分查找为主,前缀和为辅,之后会有其它算法的。文字算法见我的博文,视频算法见我的学院课程。 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的:

2023-09-17

喜缺全书之平凡的经历最新版

《闻缺陷则喜》这本书由何志丹与魏家瑜共同创作,其核心理念是通过暴露和面对问题,促进个人和团队的成长。书名源于作者们对于缺陷的积极态度,他们认为缺陷是学习和进步的契机,而不是阻碍。在当前知识爆炸的时代,分享和交流成为提升效率的关键。 书中涵盖的工作经历部分,作者强调了工作中遇到的挑战和陷阱,这些经历不仅对于技术开发者,如C/C++/VC程序员,具有宝贵的参考价值,也适用于任何行业。作者提到,许多工作中需要但网络上难以找到的信息,正是他们书籍想要填补的知识空白。他们提倡通过阅读、实践和再传授来深化理解和掌握知识,比如,通过反复阅读多本书籍,甚至制作教学视频,以教促学。 生活中的点滴和女儿的成长部分,反映了作者对个人生活和家庭教育的关注。这部分内容可能包含如何平衡工作与家庭,以及如何培养孩子独立思考和解决问题的能力。作者的人生态度和教育观念,可能会给读者提供关于如何在生活中学习和成长的新视角。 投资理财的亏损与教训部分,则揭示了作者在财务管理和投资上的经验和反思。他们可能分享了投资失败的案例,从中提炼出的教训,旨在帮助读者避免同样的错误,提高投资决策的明智程度。这部分内容对于希望提升理

2023-08-18

闻缺陷则喜2021九月版

主要增加:C#调用托管C++,托管C++调用C++

2021-09-11

有向图访问计数的原理及C++实现

现有一个有向图,其中包含 n 个节点,节点编号从 0 到 n - 1 。此外,该图还包含了 n 条有向边。 给你一个下标从 0 开始的数组 edges ,其中 edges[i] 表示存在一条从节点 i 到节点 edges[i] 的边。 想象在图上发生以下过程: 你从节点 x 开始,通过边访问其他节点,直到你在 此过程 中再次访问到之前已经访问过的节点。 返回数组 answer 作为答案,其中 answer[i] 表示如果从节点 i 开始执行该过程,你可以访问到的不同节点数。 2 <= n <= 100000 无自环。

2023-10-01

朴素迪氏最短单源路径的原理及C++源码及测试用例

Dijkstra算法,翻译为迪杰斯特拉或狄克斯特拉。在下驽钝,记不住如此长的翻译,故简称迪氏。 3.1.时间复杂度 O(n2),端点数的平方。 3.2.使用前提 边的权为正。可以非连通,非连通的距离为-1。

2023-09-30

01BFS最短距离原理和C++实现

n个端点的无向图,编号范围[0,n)。Edges0表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有路联接。Edges1表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有损坏的路连接。要想让s和d之间至少有一条通道,最小需要维修多少条路。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-29

深度优先搜索(BFS)的原理和C++实现

n个端点的无向图,编号范围[0,n)。每个端点最多4条出边。edges表示{{n1,n2},...{n3,n4}}表示n1和n2,n3和n4之间有边联接。求s到d的最少需要经过多少条边。如果无法到达,请返回-1。可能有环,但无自环,重边,可能不联通。

2023-09-28

美丽塔单调栈O(n)解法

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-27

较难算法: 美丽塔 时间复杂度O(nlongn)

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。 如果以下条件满足,我们称这些塔是 美丽 的: 1 <= heights[i] <= maxHeights[i] heights 是一个 山状 数组。 如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组: 对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j] 对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k] 请你返回满足 美丽塔 要求的方案中,高度和的最大值 。

2023-09-24

让数组不相等的最小总代价

让数组不相等的最小总代价 可运行源码,VS2022 C++17 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都为 n 。每次操作中,你可以选择交换 nums1 中任意两个下标处的值。操作的 开销 为两个下标的和。你的目标是对于所有的 0 <= i <= n - 1 ,都满足 nums1[i] != nums2[i] ,你可以进行 任意次 操作,请你返回达到这个目标的 最小 总代价。请你返回让 nums1 和 nums2 满足上述条件的 最小总代价 ,如果无法达成目标,返回 -1 。

2023-09-23

《闻缺陷则喜》之《主册》

闻缺陷则喜 1 第一章:平凡的经历 5 第二章:观念与想法 5 1. 基础 6 1.1. 认知鸿沟 6 2. 传播 6 3. 沟通 6 3.1. 淡化对错 6 3.2. 不要随意批评别人 6 3.3. 参与感 6 3.4. 如果错了,马上认错 7 3.5. 从别人的立场说服对方 7 3.6. 具体到场景 7 4. 交往与合作 7 4.1. 双赢思维 7 4.2. 合作层次 8 4.3. 能力+信息(情报)+资源=成就 8 5. 工作相关 8 5.1. 金融骗局 8 5.2. 对小白而言创业比股票危险的多 9 5.3. 投资比创业稳妥的多 9 5.4. 程序员干不到30岁 9 5.5. 忠诚度与能力 10 5.6. 拒绝无意义加班 10 5.7. 内卷的历史 11 5.8. 关于社保 11 6. 家庭相关 12 6.1. 我的遗产 12 6.2. 金钱观 12 6.3. 借贷观 13 6.4. 女儿的婚姻 13 6.5. 轶事 14 6.6. 生育观 15 6.7. 教育观 15 6.8. 不要因为担心亲友不舒服,而不指出错误 16 7. 工作技巧 16 7.1. 八二原理 16 8.

2022-09-10

二分查找旋转数组源码和视频

包括视频和三个版本的源码(初始、寻找右数组左边界、完成) 已知整数数组nums,先按升序排序后,再旋转。旋转k位后,元素分别为nums[k],nums[k+1]...nums[0]...nums[k-1]。请查找target 是否存在,如果存在返回所在索引;否则返回-1。假定nums没有重复的元素。 假定排序后的数组为{1,2,3,4,5}。 旋转0位:不变。 旋转1位:{2,3,4,5,1} 旋转2位:{3,4,5,1,2} 旋转3位:{4,5,1,2,3} 旋转4位:{5,1,2,3,4} 1.解题思路 观察后,可以得到如下结论: 旋转数组,可以拆分成左右两个升序数组,且左数组的任意元素都大于右数组的任意元素。 分两步: 一,找到数组的分界线RBegin,[0,RBegin)是左数组,[RBegin,n)是右数组。特殊情况:只有一个升序数组,则RBegin为0,左数组为空。 如果是小于等于nums.back(),在右边找;否则在左边找。升序寻找元素之前已经讲过了,就不累赘了。

2023-08-20

C# 获取C++的连续数据

C# 获取C++的连续数据。 两种方式:1,返回C++指针,2,将值存到C#的数组中。

2022-04-02

闻缺陷则喜版本号20220123

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2022-01-23

闻缺陷则喜2021年12月26.doc

闻缺陷则喜,本人拙作,注将软件工程。

2021-12-26

闻缺陷则喜20211205

包括:问题定义、系统分析、架构、概要设计、详细设计、测试等!

2021-12-07

Windows性能监控工具Perfmon使用

Windows性能监控工具Perfmon使用

2021-10-31

关于halcon膨胀腐蚀开闭.doc

关于halcon膨胀腐蚀开闭

2021-11-14

简单的C#类 生成对应的C#类

开发工具: C#2013 功能: 针对简单的C#类,生成对应的非托管C++类,并生成托管C++的转换函数。 应用场景: 界面层、数据层C#,逻辑层C++。 简单的C#类:类型只包括 double string List

2021-11-07

保存文件的同时删除文件,保存用时会略微升高

保存文件的同时删除文件,保存用时会略微升高。没必要花大功夫专门处理 保存500文件用时(毫秒):30906 删除文件同时,保存500文件用时(毫秒):30263 删除500文件用时(毫秒):363 保存500文件用时(毫秒):29155 删除文件同时,保存500文件用时(毫秒):29258 删除500文件用时(毫秒):426 保存500文件用时(毫秒):27992 删除文件同时,保存500文件用时(毫秒):29068 删除500文件用时(毫秒):686 保存500文件用时(毫秒):29172 删除文件同时,保存500文件用时(毫秒):31837 删除500文件用时(毫秒):337 保存500文件用时(毫秒):29373 删除文件同时,保存500文件用时(毫秒):29563 删除500文件用时(毫秒):321 保存500文件用时(毫秒):29663 删除文件同时,保存500文件用时(毫秒):30180 删除500文件用时(毫秒):350

2021-10-11

从CAD熟练工到算法攻坚者:尝试用计算几何与Clipper库实现高效二维排样

内容概要:本文介绍了资深CAD二次开发专家何志丹的职业履历与技术专长,涵盖其在C++、C#、CAD二次开发、计算几何、算法设计及软件架构等领域的深厚积累。文档重点展示了其主导或参与的多个CAD插件开发项目,如亲士CAD工具箱、消防水管设计图转生产图插件等,突出其在AutoCAD与中望CAD平台上的.NetAPI和ObjectArx开发能力,并体现其利用ODA工具独立解析DWG文件的技术实力。同时,文档列举了其在机器视觉(Halcon)、软件架构设计、团队建设及复杂算法(如排样、几何处理)方面的实践经验,并提供了个人作品集链接与技术博客资源。; 适合人群:具备一定C++或C#编程基础,从事CAD二次开发、工业软件研发、智能制造或计算几何相关工作的工程师及架构师,尤其是希望提升自动化设计效率或开发专用CAD工具的专业人员。; 使用场景及目标:① 学习如何基于AutoCAD/中望CAD开发高效实用的二次开发插件,提升设计自动化水平;② 借鉴其在软件架构设计、混合编程(C++/C#)、系统稳定性保障(如崩溃恢复机制)等方面的工程实践;③ 获取CAD文本处理、图形优化、批量排料等功能的技术实现思路;④ 参考其项目合作模式,开展高风险或探索性技术项目的分阶段验证。; 阅读建议:建议结合文中提供的CSDN博客链接、作品下载地址及技术案例进行实践对照,重点关注其工具箱功能实现逻辑与架构设计理念,适用于希望将CAD操作自动化、提升生产效率或构建专业工业软件的开发者参考学习。

2025-09-27

亲士ODA工具箱不依赖于CAD

使用方法:解压亲士ODA工具箱.zip,运行QinShiToolODA.exe。不依赖中望Cad和AutoCad。 支持:AutoCAD 2013/LT2013 Drawing (".dwg)及以下版本。 不支持:AutoCAD 2018 Drawing (".dwg)及以上版本。 不支持大文件,超过2G的文件一定无法处理。 功能: 一,从dwg种导出文本到csv。从csv中导入文本到dwg。

2026-06-21

亲士CAD工具箱支持中望CAD2022、AutoCAD2013及以上版本

CAD亲士工具箱只有功能选项卡,没有菜单。如果功能选项被关闭,请用Robbon命令打开。 文本处理: 1.1避免笔误:支持从TXT文件直接读取文本,避免手动输入出错。TXT文件可选择,内容可排序,可过滤。可以插入当前文件的文件名,不带扩展名。修改《文本.txt》后,无需重启CAD,下次命令生效。插入时,可以选择是否有后缀,如果后缀自动从1开始编号,后缀和原始文本之间用减号分开。 1.2批量编辑:可批量修改单行文本或多行文本的字号大小,并保持文本中心点不变。 1.3导入、导出文本:典型应用场景:一,翻译。二,和其他系统交互。a,导入到csv。b,手动或自动修改csv。c,从csv导入文本。csv支持两种格式:a,带bom的UTF8。b,ANSI默认编码。 图形编辑与优化: 2.1优化图形:可处理因距离过近导致无法创建面域的图形,通过移动端点使线段与圆弧精确重合,还能删除重复线条。 2.2移动实体:微移部分实体时,可延长至与未选择实体相同的端点。 2.3自动排料:能将源边框内的实体,按任意顺序重新排列到指定的目标边框中。源边框和目标边框都可以多选。 2.4图层清理:支持删除指定图层外的所有图层内容。 2.5标注翻转:可将选中的标注移动到指定直线下方,用于手动避让。 三维与建模辅助: 3.1提供基础的三维零件建模功能,例如内置了五角星的快速生成工具。 3.2支持三维建模功能,演示了一个较复杂的零件。 系统与兼容性: 软件环境:支持AutoCAD 2013及以上版本,以及中望CAD 2022及更高版本。安装盘会在线安装.NetFrame。 运行系统:支持Windows操作系统。

2026-01-02

本博文算法对应源码单元测试用例

电子书、博文和附录分工。电子书以总结、原理、正确性证明为主;博文(题解)以思路、源码、封装类(模板)、测试用例、流程图为主。附录:封装好的类、小题题解、很长的源码和单元测试。 本书针对读者:刚刚入职的软件工程师,假定已经学完了“C++”和“算法与数据结构基础”。工程师和学生不同,工程师的首要目标的实用。工程师用到的知识是未知的,很多都是临时用一下,之后几年甚至一辈子都不会用到。受精力的限制,不可能将所有遇到的知识全部学完。本文会有超多用例,方便工程师从最相近的样例开始修改。所以,本文先讲如何使用,再讲原理,最后讲样例;设计(如:流程图)和源码会作为附录提供。

2024-07-05

位运算、状态压缩、枚举子集汇总.html

位运算、状态压缩、枚举子集汇总.html

2024-04-27

本博客配套流程图,会经常更新

Bob 站在单元格 (0, 0) ,想要前往目的地 destination :(row, column) 。他只能向 右 或向 下 走。你可以为 Bob 提供导航 指令 来帮助他到达目的地 destination 。 指令 用字符串表示,其中每个字符: 'H' ,意味着水平向右移动 'V' ,意味着竖直向下移动 能够为 Bob 导航到目的地 destination 的指令可以有多种,例如,如果目的地 destination 是 (2, 3),"HHHVV" 和 "HVHVH" 都是有效 指令 。 然而,Bob 很挑剔。因为他的幸运数字是 k,他想要遵循 按字典序排列后的第 k 条最小指令 的导航前往目的地 destination 。k 的编号 从 1 开始 。 给你一个整数数组 destination 和一个整数 k ,请你返回可以为 Bob 提供前往目的地 destination 导航的 按字典序排列后的第 k 条最小指令 。

2024-04-24

利用二分查找解决H指数问题

利用二分查找解决H指数问题。

2024-01-01

搜索矩阵C++实现:二分查找Z形查找

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。

2023-12-17

长度最短的子数组C++实现

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2: 输入:target = 4, nums = [1,4,4] 输出:1 示例 3: 输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0 提示: 1 <= target <= 109 1 <= nums.length <= 105 1 <= nums[i] <= 105

2023-12-10

[二分查找双指针]LeetCode881: 救生艇

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。

2023-12-03

两数之和 - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

2023-11-26

C++二分查找算法:132 模式

给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。 如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。

2023-11-12

C++算法:第 N 位数字原理、源码、测试用例

给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1: 输入:n = 3 输出:3 示例 2: 输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。 提示: 1 <= n <= 231 – 1

2023-11-05

C++二分查找算法应用:最长递增子序列 原理、源码、测试用例

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 示例 2: 输入:nums = [0,1,0,3,2,3] 输出:4 示例 3: 输入:nums = [7,7,7,7,7,7,7] 输出:1 参数范围: 1 <= nums.length <= 2500 -104 <= nums[i] <=104

2023-10-29

二分应用:峰值查找 原理、源码、测试用例

1. 题目 长度为n的数组nums,请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>1 i等于0 nums[i] >nums[i+1] n>1 i等于n-1 nums[i] > nums[i-1] 0<i<n-1 nums[i]>nums[i-1] nums[i]>nums[i+1] 题目保证nums[i]不等于nums[i+1]。 2. 分析 假定: nums[left,r)符合nums[left]>nums[left-1],且nums[r-1]>nums[r]。显然初始情况nums[0,n)符合。 推论一:如果[left,r)的长度为1,则left就是返回的索引。 推论二:假定left < mid<r。如果mid[mid] > mid[mid-1],则nums[mid,r)也符合假定。如果mid[mid] < mid[mid-1],则nums[left,mid)也符合假定。 推论三:推论二也可以也可以理解成分别抛弃[left,mid)和[mid,r)。令mid = left+(r-left)/2,由于r-left>=2,所以left<mid<

2023-10-22

C++算法:前缀和基础

长度为n的数组nums,共有n+1个以nums[0]开始的子数组。索引范围分别为[0,i),i取值区间[0,n]。preSum[i]记录子数组[0,i)的和。比如:nums = {1,2,3,4},则preSum = {0,1,3,6,10}。通过preSum,我们可以求任意nums的子数组和。子数组[i,j)等于子数组[0,j)减去[0,i),也就是子数组[i,j)的和等于preSum[j] – preSum[i]。如果i等于j,则preSum[i]-preSum[i],和为0,符合计算公式。如果i大于j,则非法,需要提前排除。

2023-10-15

时间复杂度O(40n*n)的C++算法:修改图中的边权

给你一个 n 个节点的 无向带权连通 图,节点编号为 0 到 n - 1 ,再给你一个整数数组 edges ,其中 edges[i] = [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。 部分边的边权为 -1(wi = -1),其他边的边权都为 正 数(wi > 0)。 你需要将所有边权为 -1 的边都修改为范围 [1, 2 * 10^9] 中的 正整数 ,使得从节点 source 到节点 destination 的 最短距离 为整数 target 。如果有 多种 修改方案可以使 source 和 destination 之间的最短距离等于 target ,你可以返回任意一种方案。 如果存在使 source 到 destination 最短距离为 target 的方案,请你按任意顺序返回包含所有边的数组(包括未修改边权的边)。如果不存在这样的方案,请你返回一个 空数组 。 注意:你不能修改一开始边权为正数的边。

2023-10-14

多源最短路径的原理及C++实现

当一层循环执行完后,m_vMat[i1][i2]表示经过[0,i)中的任意个点的最短距离。 初始状态下, m_vMat[i1][i2]表示直达的最小距离,也就是经过0个点。 通过[0,i)中任意个点,i1到i2的最短路径记为PrePathi1i2,通过[0,i+1)中任意个点,i1到i2的距离的路径为Pathi1i2,如果Path不经过Pathi1i2,则和PrePathi1i2相同。如果经过则可以拆分成{i1…i}+{i…i2},显然{i1…i}是PrePathi1i,{i…i2}是PrePathii2,否则替换成PrePathi1i和PrePathii2。 m_vMat同时表示PreMath和Math,如果m_vMat[i1][i]或m_vMat[i][i2]已经更新,会带来错误的结果么?结果是不会,会更新但值不变。 当i1等于i时: m_vMat[i][i2] = min(…, m_vMat[i][i] + m_vMat[i][i2]); 由于m_vMat[i][i]为0,所以右式就是左式。 当i2等于i时,类似。

2023-10-04

堆优化迪氏最短单源路径原理及C++实现

4.1. 时间复杂度 O(ElogE),E是边数。适用与稀疏图。 4.2. 使用前提 边的权为正。可以非连通,非连通的距离为-1。 4.3. 原理 优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果距离相等,先处理谁都可以。可以用pair记录,不用重写小于。优先队列只记录如下情况的距离: 一,{0,源点}。 二,任意点的最短距离和可以直达的边。 如果是有向图,则入队数量等于边数,计算出起点最短路径的那一轮。无向图,则翻倍。显然出队数量等于入队数量。优先队列入队和出队时间复杂度都是O(logn),故总时间复杂度为O(nlogn)。

2023-10-03

.有向图计数优化版原理及C++实现

不需要拓扑排序,也不需要并集查找,直接dfs了。完成以下三个职责: 一,DFS那些端点在环上。 二,DFS环上各点此环的长度。 三,DFS非环上各点。

2023-10-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除