自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 分析报文理解TCP IP协议栈(计算机网络)

TCP/IP协议栈的精妙之处在于它用分层的思想将复杂的网络通信问题分解为多个可管理的部分,每一层都专注于解决特定层面的问题,同时又通过清晰的接口与相邻层交互。(3)FLAGS:FIN=1,ACK=1,服务端发送数据完毕,关闭服务端到客户端的数据传送,请求连接释放。(3)FLAGS:ACK=1,服务端收到连接释放报文段后即发出确认报文,客户端到服务端的连接释放。(3)FLAGS:ACK=1,客户端接收到来自服务器端的关闭请求,发回确认收到报文,连接释放。(1)SEQUENCE NUMBER:472,序号。

2025-05-23 19:38:24 873

原创 编译原理实验--LL(1)语法分析器的设计

表中的每个条目可以是一个产生式(如"TA", "+TA", "FB"等),表示从当前非终结符到下一个状态的转换,或者是一个特殊符号(如"ε"表示空操作,"#"表示错误恢复)。完成度分析:这段代码的可利用率很低,只能应用于这个实验中给出的文法,因为没有将终结符,非终结符单独设立符号表,所以如果我们要换一种文法来实现的话,就要将代码中出现的所有非终结符都修改一遍,工作量有点大,这段代码还有很大的改进空间。如果不一致说明当前字符不是该文法中的中间符,进行错误处理,将指针后移,处理下一字符。

2025-05-20 19:16:54 1093

原创 中国邮递员问题

把城市看作一个连通的、简单的带权无向图,节点代表街道的交叉,边代表街道,其权重是街道的长度。中国邮递员问题的核心在于:当图中存在奇度顶点时,我们需要通过添加边的方式构造欧拉回路,这可以通过在奇度顶点间寻找图中边的一个子集,使得每个顶点恰好与一条边相连来实现,从而确保邮递员能够遍历所有街道且总路径最短。中国邮递员问题生动展示了图论在解决现实世界路径优化问题中的强大能力,通过将城市街道网络抽象为带权无向图,将复杂的路线规划问题转化为寻找最小权重欧拉回路的图论问题。(5)在原图中复制匹配对应的最短路径上的边;

2025-05-17 21:31:32 618

原创 人体体重随时间变化的数学模型(MATLAB)

脂肪变化量(千克/天)= 净热量 / 每千克脂肪热量 = [10467 - (5038 + 69 × w)] / 41868 = (5429 - 69w)/41868。(2)两边积分:∫ dw/(5429 - 69w) = ∫ dt/41868 - 1/69 ln|5429 - 69w| = t/41868 + C。因此,解为:w(t) = 5429/69 - (5429 - 69w₀)/69 e^(-69t/41868)解出w:w(t) = (5429 - C' e^(-69t/41868))/69。

2025-05-15 20:33:41 654

原创 汽车折扣定价策略(MATLAB)

(3)重要启示:销售对折扣的敏感性显著影响最优策略,高敏感性(15%)允许更大折扣但单车利润更低,低敏感性(10%)建议较小折扣保持较高单车利润。求导:P'(d) = -100(1.15)^d + (1500-100d)(1.15)^d ln(1.15)将上述关系数学化,我们得到利润函数:P(d) = (1500 - 100d) × (1.15)^d。令P'(d)=0:-100 + (1500-100d)ln(1.15) = 0。利润函数:P(d) = (1500 - 100d)(1.15)^d。

2025-05-13 21:49:46 422

原创 石油设备制造厂的最优生产与存储策略分析(MATLAB)

某石油设备制造厂每月需要100套压缩机用于维护和运营石油开采设备,这些零件由工厂内部生产,每月生产500套每批压缩机的生产费用为5万元,而每套压缩机的存储费用为每月0.2万元。当批量从79套增加到150套时,总成本从12.65万元升至15.3万元(上升20.9%),(Q/2)(1-D/P)H项开始主导,与Q近似线性增长。当批量从50套增加到79套时,总成本从14.0万元降至12.65万元(下降约9.6%),计算公式中(D/Q)S项主导,随Q增大而快速减小。5. MATLAB实现。(2)成本敏感性分析。

2025-05-09 15:27:29 507

原创 老式录像机计数器(MATLAB)

尝试用更高次的拟合(如三次或四次),虽然拟合曲线更贴近数据点,但对于n=4450的外推预测结果变化不大,这说明二次模型已经足够描述这种非线性关系。这是因为随着播放的进行,供带盘上的磁带减少,半径变小,同样的角速度对应的线速度也变小,因此计数器增加的速度会减慢。在某一次使用中录像带已经转过大半,计数器读数为4450,问剩下的一段还能否录下一小时的节目。根据磁带缠绕的几何关系,我们可以推导出:磁带长度L = π(r^2 - r0^2) / d,而计数器读数n与旋转圈数k的关系为n = ck(c为比例常数)

2025-05-07 13:18:25 634

原创 鱼类质量估计模型(MATLAB)

常见的有三种简化方式:椭圆柱模型(鱼身视为椭圆柱体)、圆锥台模型(考虑鱼头大、尾小的特点)、分段组合模型(将鱼分为头、身、尾三部分分别建模)。一垂钓俱乐部鼓励垂钓者将钓上的鱼放生,打算按照放生的鱼的质量给予奖励,俱乐部只准备了一把软尺用于测量,请你设计按照测量的长度估计鱼的质量的方法。根据我们的常识,鱼越大越重,鱼的身长和胸围都是用来描述鱼的大小的一个物理量,所以我们可以探究软尺能测量的鱼的身长以及胸围(鱼身的最大周长)与鱼的质量的关系,用鱼的身长以及胸围来对其质量进行估计。将鱼的胸围记为D,身长记为L。

2025-05-06 19:48:25 572

原创 汽车刹车距离模型(MATLAB)

基于模型分析,我国城市道路可以采用3秒准则,覆盖大多数驾驶员的反应时间和湿滑路面条件,高速公路建议采用4-5秒准则,考虑高速行驶时刹车距离显著增加。刹车距离随车速变化:在干燥路面,从车速30km/h的刹车总距离约11m增加到120km/h的约总距离130m;在湿滑路面,从车速30km/h的刹车总距离约14m增加到120km/h的约192m。驾驶员从发现情况到踩下刹车的反应时间内车辆行驶的距离:d1 = v × t1,v为车速(m/s),t1为反应时间(通常0.5-2秒)(3) 总刹车距离模型。

2025-05-02 15:15:00 778

原创 曲线最小二乘拟合问题(MATLAB)

而非线性拟合则相对更复杂,其拟合效果高度依赖初始参数的选择,且不同优化算法各具特点,lsqcurvefit直接易用而lsqnonlin灵活可定制。实践表明,数据可视化对判断拟合合理性至关重要,同时,对于多项式拟合,虽然实现简单,但要小心过拟合,对于非线性拟合需要确保非线性模型的参数具有物理意义,合理选择模型、初始值和算法是成功拟合的关键。(1) 设计思路:用 polyfit 函数来进行多项式拟合,并使用 polyval 函数来计算拟合多项式在给定点上的值,使用 plot 函数绘制原始数据点和拟合曲线。

2025-04-30 20:33:45 1105

原创 矩阵极值查找(MATLAB)

从算法复杂度角度看,极值查找问题在无序矩阵中的时间复杂度下界为O(n),因为必须遍历所有元素才能确定极值。基于前面的分析,MATLAB矩阵极值查找没有放之四海而皆准的最优解,应当根据矩阵规模和具体应用场景,选择最适合的实现方案。从测试结果中可以看出,极小矩阵(4x5)查找极值采用循环法最优,大型矩阵(1000x1000)查找极值向量化方法显著优势,循环法性能急剧下降。最直观的设计思路:使用max()和min()函数找出矩阵中的最大值和最小值,使用find()函数定位这些极值在矩阵中的位置,然后输出结果。

2025-04-29 15:04:50 501

原创 有向图的存储结构

在课本上学习时,这些概念可能显得抽象,但通过实际编码实现,我对它们的优缺点有了更直观的认识:邻接矩阵实现简单,可以快速判断任意两个顶点间是否有边,但空间复杂度高(O(n²)),尤其不适合稀疏图;w表示某条边的权值对于edges[i][j]二维数组存储边的关系中,数组的i,j一般都是图的顶点数,即i = j = v;寻找从u到v的所有路径长度为l的简单路径:void PathlenAll(AdjGraph *G, int u, int v, int l, int path[], int d)

2025-04-25 14:53:03 388

原创 构造哈夫曼树及哈夫曼编码

实验结果验证了哈夫曼编码的有效性,高频字符如'A'获得了最短的编码,而低频字符如'L'获得了较长的编码,计算得到的平均编码长度明显小于等长编码所需的长度,这体现了哈夫曼编码在数据压缩中的优势。产生 一个新节点,此节点为队列中移除节点的父节点,且此节点的权重值为两节点之权值之和,把新结点加入队列中。哈夫曼编码作为一种高效的无损数据压缩方法,其核心思想是通过构建最优二叉树(哈夫曼树)来为不同频率的字符分配不同长度的编码,使得高频字符使用较短的编码,低频字符使用较长的编码,从而达到压缩数据的目的。

2025-04-24 13:42:08 480

原创 二叉树的链式存储结构以及二叉树的各种基本运算

我学会了怎么用一个字符串来创建二叉树,实现了四种不同的遍历方法,先序、中序、后序和层次遍历,也实现了求二叉树高和节点查找。在实现括号表示法输出树结构时,看着打印出的清晰的树形结构特别有成就感,这种可视化方法对调试帮助很大,比单纯看遍历结果直观多了。输出二叉树:对于非空二叉树b,先输出结点b的结点值,当它存在左孩子或右孩子时输出一个“(”符号,然后递归输出左子树;当存在右孩子时,输出一个“,”符号,再递归输出右子树,最后输出一个“)”符号。先序遍历:先访问根结点,然后先序遍历左子树,最后先序遍历右子树。

2025-04-22 14:02:57 475

原创 用栈求解n皇后问题

否则,继续将下一行位置结点从后向前读进栈,重复前面的操作。通过使用栈数据结构来解决经典的N皇后问题,加深对栈的理解和应用能力,同时掌握回溯算法的实现原理,实现了非递归的解决方案。在实验过程中,初始版本效率低,当n=8时运行时间较长,我通过优化冲突检测函数解决了效率低下的问题,最终使程序能够正确处理1-20范围内的所有输入。本次实验让我认识到数据结构选择对算法效率的关键影响,虽然栈模拟递归的方法能够解决问题,但在n较大时,算法的时间复杂度仍然较高,也希望之后可以考虑使用更高效的算法或数据结构来优化求解过程。

2025-04-18 22:55:01 333

原创 链队的实现

在编写liqueue.cpp时,我掌握了以下关键点:InitQueue函数需动态分配头结点,并让front和rear均指向它,表示空队列;当头指针和尾指针均指向头结点时,队列为空(front == rear);实验让我认识到链队相比顺序队列在动态扩容方面的优势,链式存储天然支持动态增长,而顺序队列可能因rear越界需特殊处理,同时也发现了可以改进的地方,如可扩展为双端队列,支持两端插入/删除,增强实用性等。采用链表实现队列,链队列的操作即为单链表的插入和删除操作的特殊情况,只是需要修改头指针和尾指针。

2025-04-16 20:53:15 195

原创 链栈的实现

说实话,刚开始接触链栈时,我对它的理解还停留在书本上的概念,但通过实际编码,我有了更深刻的认识。特别是在测试第7步"依次出栈直到栈空"时,看着栈一步步被清空的过程,让我对"后进先出"的特性有了直观感受。通过判断top是否为空来判断链栈是否为空,为空则为空栈;入栈操作首先为链栈分配空间,若成功,将入栈元素赋值到申请的链栈结点,并插入栈顶,使其成为栈顶元素;每次malloc后要记得free,操作指针前要检查是否为NULL,总的来说,这次实验巩固了我的数据结构基础知识。(2)判断栈s是否为空。

2025-04-14 21:12:31 400

原创 顺序栈的实现

顺序栈通过数组和栈顶指针的配合,以O(1)时间复杂度完成入栈和出栈操作,这种高效性在exp3-1.cpp的测试程序中得到了充分验证。通过本次顺序栈的实现与应用实验,我对栈这一线性数据结构有了更加深入的理解,栈作为计算机科学中最基础的数据结构之一,其简洁而强大的特性在本次实验中得到了充分展现。在sqstack.cpp程序开发过程中,我系统实现了顺序栈的初始化、入栈、出栈、判空等基本操作,深刻体会到顺序存储结构在栈实现中的优势与特点。判断栈是否为空:bool StackEmpty(SqStack *s)

2025-04-11 21:45:27 384

原创 有序单链表

实现过程中充分运用双指针技巧同步遍历两个有序链表,这种高效的操作方式不仅适用于集合运算,也揭示了数据结构与算法之间的紧密联系。实验过程中需要特别关注边界条件的处理,如空链表和单元素链表等特殊情况,健壮的数据结构实现必须考虑各种临界场景。题目:用单链表表示集合(假设同一个集合中不存在重复的元素),并将其递增排列,构成有序单链表。求并集:bool Union(LinkNode* L1, LinkNode* L2, LinkNode*& L3)求差集:同时扫描两个链表,将在表1不在表2中的元素放在第三个链表中。

2025-04-10 12:35:56 273

原创 一元线性多项式的实现

一元多项式链表相加相减算法体现了数据结构选择对问题建模的关键性——链表结构以其动态扩展的特性完美契合了多项式非零项的离散特征,而有序归并算法则展现了如何将数学逻辑转化为指针操作。链表牺牲了随机访问效率,换来了项式操作中O(1)时间复杂度的插入删除优势,这种时空取舍的智慧正是算法设计的精髓所在。创建两个链表,其中包含数据域(系数、指数),以及指向下一个结点的指针域。将两个多项式链表按照指数递增的规则排序,对比两个链表中的数据,如果指数相等则进行相加及相减操作,如果指数不相等则复制该结点的值。

2025-04-08 13:16:01 322

原创 单链表的实现

从实验中可以得知,单链表是通过指针实现的动态连接:每个节点像是一节独立的火车车厢,通过"挂钩"(指针)连接起来,与顺序表连续的内存空间形成鲜明对比。单链表通过指针动态连接各个节点,不需要预先分配固定空间,可以随时添加新节点,这种非连续的存储结构使得节点可以分散在内存各处,虽然因此失去了空间局部性优势,但带来了高效的插入删除性能,在已知位置操作时只需修改指针即可完成,时间复杂度为O(1)。设置一个移动指针和计数器,从首结点开始扫描到尾结点,每扫描到一个结点,计算器加1,直到结束。

2025-04-05 16:51:50 305

原创 顺序表的实现

从实验中可以得知,顺序表的内存是连续的,就像一列火车的车厢必须紧密相连,插入元素就像在中间加车厢,后面的都得往后挪,查找元素就像按座位号找人,一步直达。插入第i个元素:bool InsertElem(SqList*& L, int i, ElemType e)从第一个元素开始依次遍历顺序表中的所有元素,直到遇到第一个与给定值匹配的元素位置,并返回此元素的下标。在删除某元素之前,需要把指定位置的所有后继元素全部向前搬移一个位置,然后删除表尾的冗余元素。(10)删除顺序表L的第3个元素。

2025-04-03 23:22:30 470

空空如也

空空如也

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

TA关注的人

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