- 博客(423)
- 收藏
- 关注
原创 第4章栈和队列:栈的应用——括号匹配检验
本文介绍了一种基于栈的括号匹配检验算法,用于判断表达式中圆括号是否成对出现。算法利用栈的后进先出特性,遇到左括号入栈,遇到右括号与栈顶左括号匹配。扫描完成后,若栈空则匹配成功,否则失败。时间复杂度为O(n),空间复杂度最坏为O(n)。文中给出了算法步骤、C语言实现代码,并通过示例展示了匹配过程。该算法高效且易于扩展至多类括号匹配场景,为后续分治法解决同类问题奠定了基础。
2025-08-20 08:17:47
496
原创 第4章栈和队列:栈的应用——进制转换
本文介绍了栈在进制转换中的应用。通过"除余法"可将十进制整数转换为其他进制,利用栈的"后进先出"特性存储余数,最后依次出栈得到转换结果。以十进制转二进制为例,详细说明了算法步骤、实现代码和时间空间复杂度分析,时间复杂度为O(log₂N),空间复杂度为O(log₂N)。该方法可推广到其他进制转换,如八进制、十六进制等,具有普遍适用性。
2025-08-20 08:13:47
464
原创 第4章栈和队列:链栈的基本概念和操作
本文介绍了链栈的结构与基本操作。链栈采用链式存储结构实现,分为有头结点和无头结点两种表示方式,均以链表首元结点作为栈顶元素。详细讲解了链栈的初始化、入栈、出栈和取栈顶元素等基本操作,分析了各操作的时间复杂度为O(1)。通过两道例题说明链栈的操作特点,并指出循环单链表不适合作为链栈的实现方式。链栈无需考虑栈满问题,通过指针操作实现高效的数据存取。
2025-08-19 06:45:33
1046
原创 第4章栈和队列:顺序栈的基本概念和操作
本文介绍了顺序栈的实现原理和基本操作。顺序栈采用连续存储空间实现栈结构,通过指针base和top分别指示栈底和栈顶位置。文章详细阐述了顺序栈的初始化、入栈、出栈以及取栈顶元素等核心操作的算法步骤和实现代码,所有操作的时间复杂度均为O(1)。此外,通过两个典型例题解析了指针移动方向与栈操作的关系。顺序栈的优势在于存储效率高,但容量固定是其局限性。
2025-08-19 06:18:13
684
原创 饼图:直观展示数据占比的利器
本文介绍了饼图的定义、核心要素及其适用场景,并提供了Python实现饼图的三种代码示例:基础饼图展示部门预算分配、多层饼图分析电商销售结构,以及使用Plotly创建的交互式饼图。文章还总结了饼图的最佳实践,包括适用场景、避免误区和增强可读性的技巧,并推荐了不同需求下的可视化工具库。通过Matplotlib、Plotly等Python库,饼图可以从简单的静态图表发展为支持交互和动画的多维数据展示工具。
2025-08-18 12:46:10
403
原创 第4章栈和队列:栈的基础知识
本章介绍了两种特殊的线性表——栈和队列。栈是后进先出(LIFO)结构,只能在栈顶进行插入(push)和删除(pop)操作,其出栈序列个数为第n个卡特兰数(1/(n+1))C(2n,n)。通过示例展示了栈的操作特性,如入栈顺序1,2,3可能产生3,2,1或1,3,2等不同出栈序列。典型例题分析验证了栈的基本性质,如当第一个出栈元素为n时,后续出栈元素必为n-i+1。这些受限操作的线性表结构为特定场景提供了高效的解决方案。
2025-08-18 12:41:00
864
原创 第3章线性表:考研真题剖析
本文解析两道计算机考研真题,涉及线性表的基本操作与算法设计。第一题考查双向循环链表的删除操作,通过图示分析得出正确操作步骤为:先调整前驱和后继指针(p->next->prev = p->prev; p->prev->next = p->next),再释放结点(D选项正确)。第二题要求设计高效算法查找单链表倒数第k个结点,给出两种解法:方法1通过两次遍历(先求长度再定位),时间复杂度O(n);方法2采用双指针技巧(快慢指针),仅需一次遍历即可完成,时间复杂度同样为O(n)但
2025-08-17 13:05:00
667
原创 第3章线性表:线性表的应用(2)——有序表的合并和一元多项式的相加
摘要 本文介绍了两种有序数据结构的高效合并算法。首先详细讲解了基于顺序表的有序表合并方法,通过二路归并策略实现时间复杂度O(m+n)的合并操作,并给出具体示例和代码实现。其次,针对链表结构提出了空间复杂度O(1)的优化方案,直接复用原链表结点进行链接。最后,将合并思想拓展到一元多项式相加运算,通过比较指数大小实现多项式合并,并配以图示说明结点处理过程。全文重点阐述了不同存储结构下的合并算法设计思路、实现细节及性能分析。
2025-08-17 12:59:27
1069
原创 第3章线性表:线性表的应用(1)
本文介绍了线性表的两种应用:集合合并和有序表插入。对于集合合并问题,通过遍历两个线性表,将不存在于第一个表的元素追加到末尾,时间复杂度为O(m×n)。对于有序表插入问题,分别讨论了顺序表和链表的实现方式:顺序表需要移动元素,时间复杂度为O(n);链表只需修改指针,同样为O(n)时间复杂度。两种应用都强调了算法效率与存储结构的选择关系,展示了线性表在不同场景下的灵活运用。
2025-08-16 18:57:13
938
原创 第3章现象表:比较顺序表和链表
本文比较了顺序表和链表的存储结构、空间性能和时间性能。顺序表采用连续存储,存储密度高,支持随机访问(O(1)),但插入删除效率低(O(n));链表采用离散存储,支持动态扩容,插入删除效率高(O(1)),但存储密度低且随机访问慢(O(n))。适用场景上,顺序表适合固定规模、频繁查询的数据;链表适合频繁增删、规模变化大的数据。选择数据结构需根据具体需求权衡访问效率与修改成本。
2025-08-16 18:54:26
628
原创 第3章线性表:循环链表
本文介绍了循环链表的概念、类型和特点。循环链表通过将尾节点指向头节点形成环形结构,分为循环单链表和循环双向链表两种。与非循环链表相比,循环链表的主要区别在于终止条件的判断。文章通过示例说明了循环链表插入节点的操作步骤,并分析了循环链表的适用场景:环形数据结构(如任务调度)、简化边界处理、高效合并操作(O(1)时间复杂度)以及需要反复遍历的场景。循环链表在表达环形逻辑、简化操作和优化性能方面具有优势,特别适合需要循环访问或频繁头尾交互的应用。
2025-08-15 13:41:50
864
原创 茎叶图(Stem-and-Leaf Plot)详解
茎叶图是一种直观展示数据分布的统计图表,由约翰·图基发明。它将数值分为"茎"(高位数字)和"叶"(低位数字),既能保留原始数据,又能显示分布特征。茎叶图适合中小数据集(n<150),通过将相同茎的叶值排序排列,可快速分析数据集中趋势和离散程度。文中提供了Python实现的三种方法(手动、Pandas和Matplotlib)及分析技巧,包括茎分裂、小数处理等扩展应用。作为探索性分析工具,茎叶图是直方图的文本替代方案,特别适合需要保留原始值的分析场景。
2025-08-15 08:18:23
348
原创 第3章线性表:双向链表
本文介绍了双向链表的基本概念和操作实现。双向链表在单链表基础上增加了前驱指针,使得可以双向遍历。关键点包括:1) 双向链表结点包含数据域和两个指针域(prior和next);2) 插入操作需要处理四个指针的修改(如将新结点插入到指定结点前后);3) 删除操作需要调整前驱和后继结点的指针指向。文章通过图示和代码示例详细说明了双向链表的插入和删除算法,时间复杂度均为O(n),空间复杂度为O(1)。双向链表相比单链表操作更复杂,但能更方便地访问前驱结点。
2025-08-14 09:30:57
920
原创 点图:数据分布的可视化利器
点图是一种简洁有效的数据可视化方法,通过横坐标上的点显示数据分布,相同数值的点会纵向堆叠。它适合中小规模数据集(通常<100个观测值),能直观展示数据分布形状、集中趋势和异常值,且可重构原始数据。点图擅长展示数据细节和比较多组数据,但不适合大数据集或复杂分布。Python中可用matplotlib和seaborn实现点图,常见变体包括蜂群图和带箱线图的点图,后者能同时显示数据摘要和原始数据点。点图广泛应用于成绩分布、生物特征比较、满意度调查等场景。
2025-08-14 08:49:27
781
原创 正态分布:自然界的普遍规律
正态分布(高斯分布)是统计学中的核心概念,其发现源于18世纪科学家对直方图的观察。从天文学测量到生物特征研究,数据直方图普遍呈现钟形分布特征,促使数学家建立了正态分布的概率密度函数。本文通过Python可视化展示了直方图如何揭示正态分布特性,包括均值、标准差的影响及样本量的作用,并演示了从直方图拟合正态分布的过程。应用案例表明,直方图分析能有效评估工业生产的质量控制。正态分布的发展历程印证了从数据观察到理论建模的科学路径,而直方图至今仍是判断数据正态性的首要工具。
2025-08-13 08:46:05
1201
原创 第3章线性表:单链表的创建方法和单链表例题
摘要: 本文介绍了单链表的两种创建方法——前插法和后插法。前插法将新结点插入链表头部,时间复杂度为O(n);后插法将新结点插入链表尾部,需维护尾指针,同样具有O(n)复杂度。文中通过图示和代码详细说明了两种方法的实现步骤,并分析了时间/空间复杂度。此外,还解答了相关例题,包括链表适用场景、结点插入操作及带头结点/尾指针链表的操作特点。关键点在于:链表适合频繁插入删除操作,顺序表更适合随机访问;链表插入操作需注意指针修改顺序;尾结点删除操作与链表长度相关。
2025-08-13 08:39:30
709
原创 第 3 章线性表:单链表的基本操作
摘要 本文详细介绍了单链表的基本操作,包括初始化、取值、按值查找、插入和删除。单链表的初始化通过创建头结点完成;取值和查找操作均需遍历链表,时间复杂度为O(n)。插入操作需定位前驱结点后修改指针,删除操作则需定位并释放目标结点。所有操作均通过指针修改实现动态逻辑关系调整,体现了链式存储结构的灵活性。算法分析表明,主要时间复杂度集中在定位步骤,而指针操作本身为O(1)。附代码示例清晰展示了各操作的具体实现。
2025-08-12 08:13:34
971
原创 直方图:数据分布的可视化利器
摘要:直方图是一种通过矩形条展示数据分布的统计图表,将连续数据分组并用矩形高度表示频数。其核心要素包括组距、频数和密度。绘制时需确定范围、选择组数、计算组距并统计频数。直方图常用于数据探索、异常检测和模型验证,可通过相对频数实现不同数据集的比较。解读时需关注分布形态(对称、偏态、多峰)和统计量(均值、标准差)。最佳实践建议合理选择组距,配合其他图表全面分析,是数据探索的基础工具。
2025-08-12 08:02:43
549
原创 第3章线性表:单链表的基本概念
单链表是线性表的链式存储结构,通过指针域建立元素间的逻辑关系,解决了顺序表存储空间连续性和插入删除效率低的问题。单链表由头指针唯一确定,结点包含数据域和指针域,支持顺序存取但不支持随机存取。与顺序表相比,单链表在存储空间利用和操作效率上更具优势,适用于动态数据管理场景。文中还介绍了头结点、头指针和首元结点的区别,以及单链表在多项式存储中的应用实例。
2025-08-11 08:40:03
887
原创 累积频数分布表的原理与实现:从理论到Python实践
本文介绍了累积频数分布表的原理、构建方法及Python实现。累积频数分布表通过累加频数显示数据分布特征,可直观反映数据集中趋势和离散程度。文章详细演示了手工计算步骤,包括数据分组、频数统计和累积计算,并提供了完整的Python代码实现,涵盖数据分组、频数统计、累积计算及可视化。此外,还探讨了累积频数分布表的应用场景(如百分位数计算、数据比较)和结果解读技巧,强调了分组区间选择和边界处理等注意事项。通过将统计理论与编程实践相结合,为数据分布分析提供了实用工具和方法。
2025-08-11 08:14:41
481
原创 第3章线性表:顺序表的基本操作
摘要:本文介绍了顺序表的五种基本操作:初始化、取值、查找、插入和删除。初始化操作构造空表,时间复杂度为O(1)。取值操作通过下标直接访问元素,时间复杂度O(1)。查找操作需遍历比较元素,平均时间复杂度O(n)。插入和删除操作涉及元素移动,平均时间复杂度均为O(n)。文中详细描述了各算法的步骤、实现代码和时间复杂度分析,并配以图示说明元素移动过程。这些操作是顺序表实现的基础,体现了顺序存储结构随机存取的特点和元素移动的代价。
2025-08-07 09:04:11
699
原创 相对频数分布表详解
本文介绍了相对频数分布表的原理与实现方法。通过30名学生数学成绩的实例,详细演示了分布表的制作步骤:数据准备、分组区间确定、频数统计、相对频率和累积频率计算。结果显示,33.33%的学生成绩集中在85-90分区间,整体呈正态分布特征。文末提供了Python实现代码,包含数据分组处理、分布表生成和可视化展示(直方图与累积频率图),适用于各类连续数据的分布分析。该分析方法可直观展示数据集中趋势和离散程度,为统计研究提供有效工具。
2025-08-07 08:38:42
740
原创 第3章线性表:顺序表的基本概念
顺序表是线性表的一种顺序存储结构,通过一组连续的存储单元依次存储数据元素。其特点是逻辑上相邻的元素物理存储位置也相邻,支持O(1)时间复杂度的随机存取。顺序表通过基地址和元素长度可快速计算任意元素地址(LOC(a_i)=LOC(a_0)+i×l)。存储结构通常包含基地址指针和当前长度字段,可用数组实现。顺序表适用于元素数量固定且需要高效随机访问的场景,如一元多项式的存储(系数和指数作为数据元素)。与编程语言中数组不同,顺序表更强调数据结构的逻辑特性而非具体实现。
2025-08-06 13:02:54
1128
原创 频数分布表:数据分析的基础工具
频数分布表是统计学中用于整理数据的工具,通过将数据分组并统计频数来展示分布特征。构建步骤包括:确定组数(常用Sturges公式)、计算组距、定义区间、统计频数等。本文以Python代码演示了30名学生数学成绩的频数分析,结果显示72-79分区间人数最多。频数分布表能快速识别数据集中趋势,为统计推断和可视化提供基础,组距选择需平衡细节与概括性。最终输出包含分组区间、频数、频率和累积频数的完整分布表。
2025-08-06 08:17:28
552
原创 第3章线性表:线性表的定义
线性表是计算机科学中最基础的数据结构之一,由n(n≥0)个相同类型的数据元素组成的有序序列。它具有有限性、有序性、一致性和明确的前驱后继关系四个核心特征。线性表既能表示简单序列(如学生信息),也能表示复杂结构(如稀疏多项式),是栈、队列等数据结构的基础。其顺序性特征决定了插入删除操作需要移动元素,但这也使其在歌单管理、文档编辑等场景中具有广泛应用。
2025-08-05 09:28:11
684
原创 霍桑效应与罗森塔尔效应:数据收集中的潜在影响因素解析
霍桑效应与罗森塔尔效应是心理学研究中影响数据真实性的重要现象。霍桑效应指被观察者因知晓受关注而改变行为;罗森塔尔效应则指权威者的期望会无意识地影响被观察者的表现。这两种效应可能导致收集的数据偏离真实情况,建议在研究中采取相应措施加以控制,确保数据可靠性。
2025-08-05 09:26:17
536
原创 第3章线性表:数据结构概述
本文系统介绍了数据结构的基本概念和理论框架。首先阐述了数据结构的定义,区分了数据、数据元素、数据项和数据对象等核心概念。其次详细分析了数据的逻辑结构(集合、线性、树、图)和存储结构(顺序、链式),对比了两者的优缺点:顺序存储具有随机访问优势但修改效率低,链式存储灵活但访问效率较低。随后探讨了数据类型与抽象数据类型(ADT)的区别,说明了ADT由数据对象、关系和基本操作三部分组成,并列举了创建、插入、删除等常见操作。全文通过学生信息管理等实例,将抽象理论与具体应用相结合,为后续深入学习各类数据结构奠定了理论基
2025-08-04 08:24:03
1174
原创 第2章算法分析:空间复杂度
摘要:空间复杂度衡量算法运行中临时占用的存储空间大小,记作S(n)=O(f(n))。重点分析辅助变量占用的空间,不包括输入数据本身。原地工作算法空间复杂度为O(1)。示例比较了两种数组逆序算法:算法1使用辅助数组,S(n)=O(n);算法2仅用临时变量,S(n)=O(1)。时间与空间复杂度常相互制约,存在以空间换时间的取舍。递归算法的空间复杂度分析见第5章。(149字)
2025-08-04 08:14:22
327
原创 第2章算法分析:其他渐进复杂度符号
本文介绍了三种渐进复杂度符号:大Ω符号表示算法运行时间的下界,用于描述最好情况;大Θ符号则同时给出上界和下界,提供了算法复杂度的准确估计;此外还提及了小o和小ω符号分别表示严格上界和下界。这些符号共同构成了分析算法性能的理论工具,能够精确描述算法在不同输入规模下的时间效率边界。
2025-08-03 09:21:58
412
原创 第2章算法分析:最好、最坏和平均时间复杂度
本文讨论了算法时间复杂度的三种情况:最好、最坏和平均时间复杂度。使用大O记号的时间复杂度估算是保守估计,实际运行时间还与输入数据特性有关。以一维数组顺序查找为例:最好情况是目标元素在首位,时间复杂度为O(1);最坏情况是目标元素在末位,时间复杂度为O(n);平均情况考虑元素等概率分布,时间复杂度为O(n/2)。这三种情况分别对应算法计算量的最小值、最大值和均值,为算法分析提供了更全面的评估视角。
2025-08-03 09:19:13
370
原创 贝叶斯定理:从历史到实践,全面入门指南
本文系统介绍了贝叶斯定理的核心概念与应用。从18世纪贝叶斯的发现讲起,详细解析了定理的数学形式P(A|B)=[P(B|A)·P(A)]/P(B),并通过条件概率推导其来源。重点阐述了定理的"信念更新"本质,即用新证据修正先验概率。通过疾病诊断和硬币测试两个典型案例,展示了如何计算后验概率,并揭示罕见病检测中假阳性率高的问题。最后提供Python实现代码,演示了定理的实际应用。贝叶斯定理不仅是概率工具,更是一种数据驱动的思维方式,广泛应用于医学、AI等领域。文章建议读者从简单案例入手,在实
2025-08-02 08:15:13
880
原创 《机器学习数学基础》补充资料:泰勒定理与余项
本文介绍了泰勒定理及其余项的概念,重点讨论了三种余项形式:拉格朗日型、皮亚诺型和积分型。泰勒定理表明,函数可以用多项式加上余项来近似表示。拉格朗日型余项给出了误差的具体表达式,皮亚诺型余项通过高阶无穷小描述误差特性,而积分型余项则用积分表示误差。文章通过具体例子(如sin(1)的近似计算)展示了如何利用余项估计近似值的误差范围,并比较了泰勒展开与幂级数收敛区间的区别。这些理论为函数近似和误差分析提供了重要工具。
2025-08-02 08:07:21
688
原创 第2章算法分析:时间复杂度估算方法(3)——立方阶对数阶和其他情况
本文分析了不同算法的时间复杂度类型,包括立方阶(O(n³))和对数阶(O(logn)、O(nlogn))等。通过具体代码示例,详细推导了循环嵌套结构的时间复杂度计算方法,如三重循环的立方阶特性和以几何级数增长的对数阶特性。文章还讨论了步长变化对复杂度的影响,并比较了多项式时间复杂度(如O(1)、O(logn)、O(n)、O(n²))之间的定性关系,指出多项式时间复杂度算法是实际可行的,而指数时间复杂度算法则难以应用于大规模问题。最后简要介绍了P问题和NP问题的概念差异。
2025-08-01 11:07:04
870
原创 《机器学习数学基础》补充资料:利用泰勒展开求高阶导数
本文介绍了泰勒展开在计算高阶导数中的应用。通过将函数在某点展开为泰勒级数,其系数与高阶导数直接相关,从而可以推导出任意阶导数的解析表达式。具体步骤包括获取泰勒级数展开式、识别级数系数,并通过公式f^(n)(a)=c_n·n!计算导数。文中以e^x和ln(1+x)为例进行演示,验证了该方法的有效性。该方法适用于解析计算,尤其适合多项式、指数函数等具有简单级数展开的函数,在数学分析、物理和工程领域应用广泛。
2025-08-01 07:46:46
1240
原创 第2章算法分析:时间复杂度估算方法(2)——平方阶
本文通过三个示例分析了平方阶($O(n^2)$)时间复杂度的计算方法。例2.4.4展示了嵌套循环导致$n^2$次基本操作;例2.4.5通过求和公式证明循环次数为$n(n+1)/2$;例2.4.6则说明步长变化不影响阶数。文中强调了大O符号的渐进性,指出小规模数据时$O(n)$可能比$O(n^2)$更慢(若其常数因子大),并提供了比较表格。最后总结了平方阶的典型特征及常见误区。
2025-07-30 10:00:00
690
原创 第2章算法分析:时间复杂度估算方法(1)——常量阶和线性阶
本文介绍了非递归算法时间复杂度的分析方法。通过矩阵相加、数组求和等示例,阐述了时间复杂度的基本概念和估算方法。重点说明了基本语句的确定原则(最深层循环内语句)以及不同复杂度类型:常量阶O(1)适用于与问题规模无关的算法;线性阶O(n)适用于单重循环算法;平方阶O(n²)适用于双重循环算法。文章还强调了时间复杂度关注的是n趋近无穷大时的增长趋势,而非具体执行次数。对于递归算法的时间复杂度分析将在第5章单独讨论。
2025-07-30 09:55:32
858
原创 第2章算法分析:大O符号的定义和性质
本文介绍了大O符号的定义及其重要性质。大O符号用于描述函数的渐近上界,当存在常数M使得f(x)≤M·g(x)时,记作f(x)=O(g(x))。文章通过实例展示了如何证明函数的大O关系,如3n²+5n+2=O(n²)。系统地阐述了大O符号的7个关键性质:自反性、传递性、常数倍性质、和的性质、乘积性质、多项式性质和对数性质,并给出了详细证明。这些性质为分析算法时间复杂度提供了理论基础,特别是多项式函数的大O关系和不同对数函数间的转换关系。
2025-07-29 16:01:56
899
原创 第2章算法分析:算法的优劣评价和估算时间
本章重点介绍了算法分析的基本方法,主要围绕算法效率评估展开。算法优劣评价标准包括正确性、可读性、健壮性和高效性(时间与空间效率)。通过构建理想化计算机模型,采用语句频度分析法估算程序执行时间,其中问题规模n是关键因素。分析示例展示了如何通过统计语句执行次数(频度)来计算总执行时间f(n)。本章为后续算法复杂度分析奠定了基础,强调了理论模型与实际计算机系统的差异,特别是内存访问效率对算法性能的影响。
2025-07-29 08:49:10
1023
原创 第 1 章 绪论
《数据结构入门教程》摘要:本文为零基础读者系统讲解数据结构基础知识。首先通过生活比喻阐释数据结构是计算机存储、组织和管理数据的方式。重点解析数据结构的两个层次:逻辑结构(集合、线性、树形、图状)描述数据间的抽象关系;存储结构(顺序、链式)实现数据在内存中的物理存放。同时介绍算法的基本概念和五大特性,强调数据结构与算法的紧密关系——数据结构是算法操作的基础,算法是发挥数据结构效能的关键。最后指出评价算法效率的时间复杂度和空间复杂度标准,为后续深入学习奠定基础。(149字)
2025-07-28 14:05:48
1023
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人