自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你的指尖有改变世界的力量

目前计划写完五个专栏:数据结构、算法思想、经典问题、数学算法、计算几何

  • 博客(363)
  • 资源 (4)
  • 收藏
  • 关注

原创 字符串搜索算法之有限自动机

本文介绍了有限自动机(Finite Automaton)的基本原理及其在字符串匹配中的应用。有限自动机由状态集合、初始状态、区分集合、输入字母表和转移函数五部分组成。文章详细解释了如何通过转移函数实现状态转换,并给出了一个具体的匹配示例。随后介绍了生成状态表的方法,重点阐述了后缀函数σ的计算逻辑。最后提供了Python实现代码,包括后缀判断函数is_suffix、状态转移函数sigma_value以及有限自动机类FiniteAutomaton的实现。测试案例展示了该自动机对模式"ababaca&q

2025-12-23 14:15:24 120

原创 Java浮点数编码

本文介绍了科学计数法在计算机浮点数表示中的应用。Java中浮点数采用IEEE 754标准,通过尾数、基数和阶码表示数值。文章详细解释了浮点数的二进制编码规则,包括符号位、尾数规范化处理和移码表示阶码的方法。通过比较float和long的范围,说明浮点数能表示更大范围的数值。最后介绍了Java中十六进制和八进制的表示方法,特别是十六进制浮点数的科学计数法表示形式。全文从理论到实践,系统阐述了计算机中浮点数的表示原理和Java中的具体实现方式。

2025-12-23 11:39:00 484

原创 Java classloader

本文介绍了Java类加载器的继承性和隔离性。类加载器分为四个层级:Bootstrap、Extension、System和Plugin,遵循"父委托"机制。隔离性体现在父级不能调用子级类、同级加载器不能互相调用、无法获取Bootstrap实例。文章展示了如何使用URLClassLoader加载外部jar包,并提供了自定义ClassLoader的示例代码,通过读取jar文件字节码实现类加载。最后指出规范实现应优先调用父加载器并缓存已加载类,以提升性能。

2025-12-22 21:19:42 541

原创 Java Compiler API使用

Java Compiler API 提供了在运行时编译 Java 源代码的能力,主要应用于 JSP 编译、代码生成工具、动态脚本引擎和热部署等场景。使用该 API 可以通过两种方式:编译磁盘源码和编译内存源码。前者直接编译文件系统中的 Java 文件,后者则支持动态生成的代码。内存源码编译需要自定义 JavaFileObject 来存储源代码和编译结果,并重写关键方法以实现内存操作。这种技术为动态代码生成和执行提供了灵活支持,是 Java 生态中重要的底层能力。

2025-12-22 18:57:45 98

原创 递归三种分类方法

摘要:本文系统梳理了递归算法的三种分类方法。按调用路数分为线性递归(单次调用)和树形递归(多次调用);按调用关系分为直接递归(自调用)和间接递归(相互调用);按调用位置分为头递归(先递归后计算)和尾递归(递归为最后操作)。重点分析了各类递归的特点、代码示例及优化方案,指出尾递归可通过尾调用优化避免栈溢出。文末以表格形式总结了递归分类的关键特征,为递归算法的理解和优化提供了系统参考。

2025-12-22 18:11:03 394

原创 6.8 组合数学-子集合问题(markdown版)

本文探讨了三种求集合所有子集的算法:1)DFS解法通过树状结构递归遍历每个元素的取舍;2)BFS解法采用队列按层级扩展子集;3)位运算解法利用二进制掩码表示元素存在状态。三种方法时间复杂度均为O(2^n),但空间复杂度不同:DFS为O(n),BFS为O(2^n),位运算最优为O(1)。位运算实现简洁高效,性能最佳;DFS空间效率高;BFS则需存储中间状态。实验表明位运算解法在代码可读性和运行效率上表现最优。

2025-12-20 20:55:10 204

原创 空间直线方程

本文介绍了空间直线的基本概念和性质。首先解释了直线的方向向量定义,即直线上任意两点的坐标差构成方向向量,并通过二维几何图形进行了直观说明。然后推导了空间直线的对称式方程(点向式方程)和参数方程。接着讨论了直线间夹角的计算方法,利用方向向量的点积和范数公式求解。最后分析了直线与平面夹角的求解方法,通过平面法向量与直线方向向量的关系,给出了相应的计算公式。文中还包含了用于绘制说明图形的LaTeX代码。

2025-12-16 23:20:45 1117

原创 三角函数和角公式

本文通过几何方法推导了正弦和余弦的和角公式。借助单位圆构造图形,利用三角函数定义和线段关系,得出sin(α+β)=sinαcosβ+cosαsinβ和cos(α+β)=cosαcosβ-sinαsinβ。证明过程通过分解线段长度,直观展示了公式的几何意义。

2025-12-13 14:36:15 666

原创 redis源码研究方法

本文介绍了在Windows环境下使用Clion和WSL Ubuntu虚拟机调试Redis 8.0源码的方法。首先通过华为云镜像下载源码,然后配置WSL环境并安装必要的开发工具。文章详细说明了编译步骤和调试过程,包括如何设置断点跟踪keys命令执行。最后列出了Redis源码的主要目录结构,涵盖核心数据结构、持久化、数据类型实现、集群管理等关键模块。该方法为开发者提供了便捷的Redis源码研究环境,特别适合Windows平台用户。

2025-11-22 02:04:13 274

原创 7.4 欧几里得空间与一次多项式空间

本文探讨了二维欧几里得空间与一次多项式空间的对应关系。在欧几里得空间中,过固定点$(x_0,y_0)$的直线可以表示为$y=kx+b$,其中$b=y_0-kx_0$。在一次多项式空间中,这些直线对应坐标为$(b,k)$或$(b,-\frac{b}{x_0}+\frac{y_0}{x_0})$,从而将欧几里得空间的点转化为一次多项式空间的直线。例如,点$(2,3)$对应直线$k=-\frac12b+\frac32$。两个空间通过这种转换实现了完美的同构关系。

2025-11-20 23:45:27 297

原创 9.12 sinc插值

摘要:本文介绍了Sinc插值公式及其应用,该公式可以将离散采样点还原为连续函数。公式核心为$x(t) = \sum x[n] \cdot \operatorname{sinc}((t-nT)/T)$,其中sinc函数定义为$\sin(\pi x)/(\pi x)$。通过一个采样周期T=0.5的数值示例(5个采样点),演示了公式的具体应用。Python代码实现了Sinc插值,并绘制出重建曲线,结果显示在采样范围外重建效果明显失真。这表明Sinc插值虽然能完美通过采样点,但在外推时会出现偏差。

2025-11-18 00:42:53 678 1

原创 9.11 傅里叶变换家族介绍

本文介绍了傅里叶变换家族及其应用,包括傅里叶变换(FT)、Sinc插值、离散时域傅里叶变换(DTFT)、离散傅里叶变换(DFT)和Dirichlet插值。通过具体实例展示了如何将时域信号转换为频域信号,以及不同变换方法之间的转换关系。傅里叶变换能够实现时域与频域信号的双向转换,而Sinc插值则用于将采样数据还原为连续时间信号。文章还详细说明了离散傅里叶变换的计算过程和Dirichlet插值的实现方法,揭示了傅里叶变换在信号处理中的重要性。

2025-11-17 23:30:57 826

原创 11.3 Sobol序列

本文介绍了Sobol序列的生成方法及其实现。Sobol序列是一种n维均匀分布序列,具有确定的起始点(0和0.5)和低差异性特点。文章详细解释了基于灰码和方向数的递推公式,并提供了两种Python实现算法:算法1直接套用公式,算法2采用结果缓存提升性能。通过二维示例展示了前16个Sobol点的均匀分布特性,并通过可视化图表验证了两种算法的等效性。代码实现包含方向数初始化、两种生成算法及结果对比,适用于需要高质量低差异性序列的数值计算场景。

2025-11-17 00:44:40 388

原创 9.10 插值法应用之照片修复

本文介绍了使用线性插值和拉格朗日插值方法将128×128的Lena图像放大4倍至512×512的过程。首先说明了图像插值的基本步骤,包括确定照片类型、选择插值范围和算法应用。重点展示了线性插值(双线性插值)的实现原理和Python代码,通过2×2像素块计算中间值,但结果存在模糊和锯齿问题。接着改用3×3像素块的二次拉格朗日插值来改善效果,提供了核心插值函数代码。两种插值方法都通过坐标转换实现图像放大,比较了它们的效果差异。

2025-11-16 20:40:48 893

原创 9.9 有理立方贝塞尔曲线

有理立方曲线是一种可有理参数化的三维曲线,包括圆锥曲线及其退化形式。它可通过有理Bézier曲线或NURBS算法实现插值。文中重点介绍了平面有理Bézier立方曲线的参数化公式,并详细展示了de Casteljau算法的计算过程:先将控制点转换为齐次坐标,通过迭代线性插值后投影回二维空间。同时提供了Python代码实现该算法,通过权重和控制点的齐次坐标转换,最终得到参数t对应的曲线点坐标。该方法能有效计算有理Bézier曲线上的任意点。

2025-11-16 17:07:28 868

原创 9.8 贝塞尔曲线

本文介绍了贝塞尔曲线的基本概念与实现方法。贝塞尔曲线由控制点决定,n次曲线需要n+1个控制点,其数学表达式类似于二项式定理。文章展示了用Python直接实现贝塞尔曲线的公式计算方法,并提供了三次贝塞尔曲线的示例代码和效果图。针对高次曲线计算误差问题,介绍了更优的德卡斯特柳算法,通过递归线性插值降低计算复杂度。文中详细图解了该算法的计算过程,并提供了对应的Python实现。两种方法都展示了如何从控制点生成光滑曲线,德卡斯特柳算法在精度和扩展性上更具优势。

2025-11-16 13:39:12 1125

原创 9.7 Kochanek-Bartels样条曲线

本文介绍了TCB样条曲线(Kochanek-Bartels样条)的原理与实现。TCB样条通过张力(Tension)、连续性(Continuity)和偏差(Bias)三个参数控制曲线形态,区别于传统样条曲线。其核心在于计算每个控制点的进入和离开切向量,当二者相等时满足C1连续性。文章详细推导了切向量计算公式,并给出Python实现代码,包括参数化控制、Hermite插值和可视化方法。实验展示了不同参数组合下的曲线效果,该算法适用于需要精细控制曲线平滑度和形状的图形应用场景。

2025-11-15 21:53:53 782

原创 9.6 Catmull-Rom样条曲线逼近

摘要:Catmull-Rom样条曲线是一种具有C1连续性的插值曲线,通过4个控制点生成平滑路径。文章给出了曲线的矩阵定义公式,其中u∈[0,1]为参数,τ为控制曲线松紧的张力系数。通过将矩阵展开为u的三次多项式参数方程,分析了各系数分量。针对示例点(1,0)~(4,5),使用Python绘制了τ在[-1.5,1.5]范围内7种取值时的曲线形态变化图。结果显示曲线仅经过中间两个控制点,当τ=0时退化为直线,直观展示了张力参数对曲线形状的影响。

2025-11-15 14:55:45 673

原创 12.3 Newton Raphson方法

牛顿-拉夫逊方法是一种高效的数值解非线性方程算法,通过迭代逼近方程根值。其核心公式为xₙ₊₁=xₙ-f(xₙ)/f'(xₙ),利用切线与x轴交点逐步逼近解。以求解x²-2=0为例,Python实现显示该方法能精确计算√2,结果与math.sqrt(2)一致,验证了其有效性。该方法收敛速度快,适合求解高次方程,代码实现简洁且精度可达1e-12。

2025-11-15 01:34:04 536

原创 多重组合问题与矩阵配额问题

实际生活中,一定会遇到多重组合问题。多重组合就是把n个元素分配到大小为k1​k​⋯km​的集合中。​符号用的还是组合的符号,上面代表总数$n),下面是拆分的数量。举个例子,把6个不同的小球,拿出5个,放到两个盒子里,第一个盒子放2个,第二个盒子放3,最后一个小球留着,其实相当于最后1个小球放入了第三个盒子。236​2!3!6−2−3。

2025-11-14 23:22:32 730

原创 12. 2 不动点迭代法

本文介绍了不动点迭代法的原理与应用。该方法通过构造迭代等式x=g(x)进行数值计算,可用于求解方程。文章分析了收敛条件(Lipschitz条件),指出该方法存在收敛性不确定、只能求正根、迭代速度慢等局限性。以x^6+x^4-12=0为例,通过Python代码演示了迭代过程,计算结果接近√2。相比其他算法,不动点迭代法在高次方程求解中存在明显不足。

2025-11-12 23:41:41 418

原创 12.1 连分数法求平方根

我们时常在短视频里刷到根号2的连分数求法。2025年12月19日,解释了连分数法求根号2的过程。

2025-11-11 21:19:58 270

原创 mockito-junit使用

本文不搞junit的深层原理,只谈如何使用。

2025-11-05 22:43:28 331

原创 恒功率启动问题

本文研究了新能源汽车在恒定功率启动时的动力学特性。通过建立微分方程模型,分析了汽车速度随时间的变化关系。模型假设不考虑空气阻力,仅考虑恒定摩擦力f,推导出速度v(t)满足的微分方程dv/dt=(P-fv)/(mv)。通过变量替换和积分求解,得到了包含对数项的速度时间关系表达式。数值计算表明,当功率为300马力时,汽车速度随时间呈非线性增长趋势,最终趋近于理论最大速度P/f。研究提供了理解新能源汽车启动特性的理论框架,并附有Python代码实现数值求解和可视化。

2025-08-08 00:32:45 571

原创 2.8 逻辑符号

介绍了数理逻辑里常用符号的latex写法。

2025-08-07 22:03:18 781

原创 java解析word文档

本文介绍了使用Apache POI库解析Word文件的方法,包括读取段落、图片、表格内容以及页码处理。读取段落通过XWPFParagraph获取文本内容;图片通过XWPFPictureData获取字节数组保存;表格采用XWPFTable-XWPFTableRow-XWPFTableCell三级结构遍历单元格。值得注意的是,获取特定页码内容较为困难,因为页码需渲染后才能确定。文章提供了完整的Java代码示例,展示了各类内容的解析实现方式。

2025-07-16 23:53:36 412

原创 Java操作word实战

摘要:本文介绍了使用Apache POI操作Word文档的基本方法,包括创建文档、设置段落样式、添加页眉页脚、插入页码、表格和图片等功能。文章指出POI在Word操作方面存在技术不成熟和兼容性问题(如页眉页脚在WPS中不可见),并提供了具体代码示例。重点内容包括:1)通过XWPFDocument类创建文档;2)段落和字体设置;3)复杂的页码生成方式;4)表格创建和图片插入的实现方法。文中代码示例详实,但同时也提示了该技术存在一定局限性。

2025-07-03 21:14:02 1252

原创 相对论速度叠加公式与双曲正切

相对论速度叠加公式表明,当两个速度$u$和$v$叠加时,结果速度$w$为$w=\frac{u+v}{1+uv/c^2}$,其中$c$为光速。这一公式确保了任何速度都不会超过光速。通过引入快度(Rapidity)的概念,速度叠加可以转化为双曲正切函数的加法,即$w = \tanh(a+b)c$,其中$a$和$b$分别为速度$u$和$v$的快度。快度的定义为$r=\mathrm{arctanh}\thinspace \frac v c$,使用快度可以简化速度的线性叠加计算。通过图形化表示,可以更直观地理解速度与

2025-05-13 18:05:14 1080

原创 数学分析文章目录

文章主要分为两部分:双曲函数和积分。在双曲函数部分,作者详细介绍了双曲函数及其图形、公式以及反双曲函数的相关内容。积分部分则涵盖了必背积分表、三角换元积分法和分部积分法的讲解。每部分均附有相关链接,供读者进一步学习和参考。这些内容为数学学习者提供了实用的工具和方法,帮助理解和掌握双曲函数和积分技巧。

2025-05-13 16:36:40 232

原创 8.5 表格进阶

介绍了论文三线表并拓展了表格颜色。

2025-05-10 14:15:53 464

原创 8.4 化学分子

本文介绍了如何使用LaTeX中的chemfig宏包绘制化学分子结构。通过甲烷、乙烯、苯环、萘、蒽和菲等例子,展示了chemfig的基本语法和功能。文章详细说明了如何通过调整键角和位置来绘制单键、双键以及多环芳烃结构,并提供了相应的代码示例和效果图。最后,文章还展示了chemfig的高级用法,鼓励读者进一步探索其强大功能。

2025-05-09 10:51:37 1196

原创 8.3 Tikz位置属性

Tikz的位置需要引入positioning宏包,本文介绍了位置的定义方法。

2025-05-07 13:34:12 691

原创 【LaTex】3.8流程图绘制

介绍了latex流程图绘制以及flowchart宏包的使用

2025-04-29 17:04:58 659

原创 【LaTex】8.2 段落格式

在word里,段落格式包括首行缩进、行间距、段前、段后等。LaTex同样支持这些功能。

2025-04-28 19:39:10 707

原创 【LaTex】8.1 文档类与层级

非目录层级只有paragraph和subparagraph。

2025-04-27 14:33:39 260

原创 【Golang】协程

好久没学习golang了,今天学习了一下协程。

2024-11-21 17:11:00 927 1

原创 Golang文件操作

os模块可以创建文件,使用fmt可以写入文件。

2024-11-20 21:03:59 585

原创 Golang时间操作

golang的时间格式化,就完全不一样了。它要求你记住golang的诞生时间,2006年1月2日,15点04分05秒。golang的时间格式化非常奇怪,正常的时间格式化,比如java是yyyyMMdd这种,而python是%Y,%m等格式。该函数有三个参数,第一个是年数,第二个是月数,第三个是天数。golang的时间是只读的,不能修改。如果要加减时间,需要使用time.Add()函数,返回一个新的时间。不过也挺好记忆的,12345,1月2日3点4分5秒,不过这个3点是下午3点,而不是上午3点。

2024-11-20 21:03:11 724

原创 下跌多少才能涨回来?

利用数学分析解释下跌多少才能涨回来。

2024-11-01 17:05:28 1087

原创 双曲函数(Hyperbolic functuons)公式

介绍双曲函数常见的公式,考研的话需要记住。

2024-10-28 19:42:34 1697

Gnuplot 5.5 Windows版

官网在日本,因为网络原因,官网下载链接http://tmacchant33.starfree.jp/gnuplot_files/gp550-20220531-win64-mingw.zip会非常慢,所以我上传到CSDN,比直接从官网下载快。

2022-06-07

麻省理工学院研究生数论I课程笔记(英文版)

该电子书为公开资源,不涉及版权问题。原始下载页面为: https://ocw.mit.edu/courses/18-785-number-theory-i-fall-2019/resources/mit18_785f19_full_notes/

2022-04-28

麻省理工学院本科数论课程笔记(英文版)

属于公开资源,原始下载页面:https://ocw.mit.edu/courses/18-781-theory-of-numbers-spring-2012/pages/lecture-notes/。 原始文件为24个零散的PDF,由我简单合并为一个PDF文件。

2022-04-28

约翰·霍普金斯大学公开的算法课程笔记(英文版),不存在版权问题

约翰·霍普金斯大学公开的教学资源(英文版),不存在版权问题

2022-04-09

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

TA关注的人

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