- 博客(86)
- 收藏
- 关注
原创 算法【单调栈】
单调栈最经典的用法是解决如下问题:每个位置都求:1.当前位置的左侧比当前位置的数字小,且距离最近的位置在哪。2.当前位置的右侧比当前位置的数字小,且距离最近的位置在哪。或者每个位置都求:1.当前位置的左侧比当前位置的数字大,且距离最近的位置在哪。2.当前位置的右侧比当前位置的数字大,且距离最近的位置在哪。用单调栈的方式可以做到:求解过程中,单调栈所有调整的总代价为O(n),单次操作的均摊代价为O(1)。单调栈分为有重复值的情况和无重复值的情况。
2024-08-23 20:20:02
596
原创 算法【二分答案法】
本文需掌握二分搜索。二分答案法1.估计最终答案可能的范围是什么,可以定的粗略,反正二分不了几次。2.分析问题的答案和给定条件之间的单调性,大部分时候只需要用到自然智慧。3.建立一个f函数,当答案固定的情况下,判断给定的条件是否达标。4.在最终答案可能的范围上不断二分搜索,每次用f函数判断,直到二分结束,找到最合适的答案。核心点:分析单调性、建立f函数下面通过几个题目加深理解。
2024-08-13 11:19:58
503
原创 算法【滑动窗口】
滑动窗口指的是维持左、右边界都不回退的一段范围,来求解很多子数组(串)的相关问题。滑动窗口的关键是找到范围和答案指标之间的单调性关系(类似贪心)。滑动过程:滑动窗口可以用简单变量或者结构来维护信息。求解大流程:求子数组在每个位置开头或结尾情况下的答案(开头还是结尾在于个人习惯)。下面通过几个题目加深理解。
2024-08-09 16:27:35
636
原创 算法【前缀和与差分】
差分的应用场景主要是那些对于数组进行一系列操作后,才查询数组中的值,不是边操作边查询。在这种情况下,如果我们每一次操作都是通过遍历数组实现的,速度就会大打折扣。而使用差分我们只需遍历一次数组就可以完成。
2024-08-08 13:47:13
1047
原创 算法【构建前缀信息解决子数组问题】
本文需要对掌握哈希表的用法。构建某个前缀信息比如最早出现、最晚出现、出现次数等,是很常见的技巧。除此之外,还有很多种类的前缀信息可以构建出来,解决很多子数组相关问题。下面通过几个题目加深对构建前缀信息这个方法的理解。
2024-08-04 16:58:57
960
原创 算法【前缀树】
注意:学习本篇最少应知道什么是树结构和哈希表怎么用。前缀树又叫字典树,英文名trie。每个样本 都从头节点开始 根据 前缀字符或者前缀数字 建出来的一棵大树,就是前缀树。没有路就新建节点;已经有路了,就复用节点。前缀树的使用场景:需要根据前缀信息来查询的场景前缀树的优点:根据前缀信息选择树上的分支,可以节省大量的时间前缀树的缺点:比较浪费空间,和总字符数量有关,字符的种类有关。
2024-08-04 16:58:42
990
原创 算法【N皇后问题位运算实现】
其中,ans表示个数,row表示进行到第几行,col、left、right表示分别从竖直、右上到左下、左上到右下三个方向上哪些列不能被放置,1为不能,0为能。遍历找到可放置的列,place中1的位数代表当前行皇后放在哪列。3.int right: 0..i-1行皇后放置的位置因为右下方向延伸的原因,哪些列不能再放皇后。2.int left: 0..i-1行皇后放置的位置因为左下方向延伸的原因,哪些列不能再放皇后。1.int col: 0..i-1行皇后放置的位置因为正下方向延伸的原因,哪些列不能再放皇后。
2024-08-02 21:50:10
229
原创 算法【位运算】
注意:本篇讲解的位运算是基于掌握二进制数及基本二进制数的加减乘除过程的基础上更细致地加深理解。(大致是学习过计算机组成原理中的机器数部分)特别提醒:Python同学实现位运算的题目需要特别注意,需要自己去手动处理溢出和符号扩展等问题。因为Python遇见溢出会自动扩展,比如将32为扩展到64位,所以上面的代码是手动将其限制在32位。
2024-08-02 11:24:10
1094
原创 西南交通大学【算法分析与设计实验7】
同时加深了对于手动求解堆以及堆的变化过程的熟练度和理解,并且对于搜索空间树的画法过程更加清楚明白。(3)学会如何利用分支限界法求解具体问题,了解动分支限界法的应用范围及在实际应用中的局限性。调试步骤(5)的程序,验证样例输入时程序执行过程中堆的变化过程是否与步骤(3)的分析结果一致。分析采用分支限界法求解样例输入时的求解过程,堆结点的定义,堆结点的值以及堆中元素的变化过程。(2)分析分支限界法的时间复杂度,比较分支限界法算法与其他算法的时间效率差异。通过此次实验,理解分支限界法的求解过程。
2024-07-03 17:44:29
445
原创 西南交通大学【算法分析与设计实验6】
其中,res是用来存储结果的数组,index代表res中数的个数,cur_sum为当前res数组中的和,nums[i]为当前层遍历的数,used数组用来判断数是否被使用。通过本次实验,理解了回溯法的求解过程,学会了分析回溯法的时间复杂度。上机验证程序在样例输入1时的执行过程是否与步骤(3)所得到的搜索空间树一致,写出程序调试过程中搜索空间树上每个结点的值,并与前面的结果进行比对。(3)学会如何利用回溯法求解具体问题,了解动回溯法的应用范围及在实际应用中的局限性。(1)理解回溯法的求解过程。
2024-07-03 17:40:18
184
原创 西南交通大学【算法分析与设计实验5】
理解了动态规划算法的求解过程,学会了分析动态规划算法的时间复杂度和比较了动态规划算法与其他算法的效率差异。则dp[i][j][0] = dp[i+1][j][0] + 1。如果dp[i+1][j][0] == dp[i][j-1][0]则dp[i][j][0] = dp[i+1][j][0] + 1。则dp[i][j][0] = dp[i][j-1][0] + 1。如果dp[i+1][j][0] > dp[i][j-1][0]如果dp[i+1][j][0] < dp[i][j-1][0]
2024-07-03 17:35:39
1504
原创 西南交通大学【算法分析与设计实验4】
在快速排序的过程中,通过判断返回的枢轴的值和第k大数的下标是否相等,如果相等则代表第k大数已固定位置,直接返回,输出部分有序数组中第k大数的下标即可得打第k大的数;注:返回枢轴的值范围不一定是所有下标,此情况需要在将数组全部排序后才会得到第k大的值。(3)撰写实验报告,实验报告内容包括实验目的、实验任务、实验环境、实验步骤、实验结果和实验总结等部分。(3)掌握用分治算法求解具体问题,了解其面临的瓶颈。(1)设计在未排序的数组中查找第K大的数的高效算法。设计在未排序的数组中查找第K大的数的高效算法。
2024-07-03 17:26:34
318
原创 西南交通大学【算法分析与设计实验3】
通过具体学习了排列这种典型的穷举算法的求解过程以及程序框架,分析了其算法的求解过程,时间复杂度分析方法,以及如何设计穷举法解决实际问题。通过此次实验,正确理解了穷举法的特点以及实际运用中的局限性,并为以后得学习打下基础。通过图可以看出第一个人执行第二个任务,第二个人执行第一个任务,第三个人执行第三个任务,第四个人执行第四个任务成本最小。(3)撰写实验报告,实验报告内容包括实验目的、实验任务、实验环境、实验步骤、实验结果和实验总结等部分。(2)学习穷举法的时间复杂度分析方法,并通过实验验证算法的执行效率。
2024-07-03 17:21:45
311
原创 西南交通大学【算法分析与设计实验2】
可以看出,在m为不同的数时,n在8之前增加引起的时间复杂度和算法运行时间的增加十分微弱,8之后时间复杂度和算法运行时间呈指数级增加,并且m越大增加越多。可以看出,在节点个数不变的情况下,当颜色个数n在6之后时,每次增加颜色个数都会引起指数级时间复杂度和算法运行时间的增加。可以看出,颜色个数不变的情况下,当节点个数n在8之后时,每次增加节点个数都会引起指数级时间复杂度和算法运行时间的增加。(3)用C++语言实现该算法,绘制不同的m、n组合时算法的时间复杂度曲线和运行时间曲线,并进行简要分析。
2024-07-03 10:34:12
373
原创 西南交通大学【算法分析与设计实验1】
通过本次实验,掌握了如何去阅读和理解算法的伪代码表示方法以及基于算法的伪代码实现算法程序。熟悉了程序的调试过程,并学会了如何分析算法的执行过程以及验证算法及程序的正确性。(4)撰写实验报告,实验报告内容包括实验目的、实验任务、实验环境、实验步骤、实验结果和实验总结等部分。按照实验教程上图1-6的伪代码,实现基于深度优先(DFS)的有向图拓扑排序算法。从顶点1开始,按照字典序进行DFS,给出每一步TS-Visit的中间结果。(1)掌握算法的自然语言描述法,流程图绘制方法以及伪代码描述方法。
2024-07-02 21:16:08
707
原创 西南交通大学【操作系统实验7】
/重新启动Linux系统重新启动Linux系统,开机时长按shift键直到进入启动加载界面,选择新编译的内核版本,按回车进入系统。//导入原系统的内核配置ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$//验证pf内核模块是否加载到内核进程中,运行命令出现pf信息说明加载成功。//打印/proc/pf/pfcount,查看缺页统计次数。打印/proc/pf/pfcount,查看缺页统计次数。//导入配置到欲编译内核中 )
2024-06-11 16:21:39
1194
1
原创 西南交通大学【操作系统实验6】
在/usr/src/linux-2.6.32.60/arch/x86/kernel/syscall_table_32.S中增加新的内核函数的指针。在/usr/src/linux-2.6.32.60/arch/x86/include/asm/unistd_32.h中增加新的系统调用号。编写加到内核中的源程序,即将要加到一个内核文件中去的一个函数,该函数的名称应该是新的系统调用名称前面加上sys_标志。注意要在/usr/src/linux-2.6.32.60/kernel/sys.c文件中添加源代码。
2024-06-11 16:19:45
582
原创 西南交通大学【操作系统实验5】
可以看到,当使用的是FIFO算法时,当第一次page fault时,将page1换出,并换入page2;当第二次page fault时,将page4换出,并换入page1;当第三次page fault时,将page0换出,并换入page4;当第四次page fault时,将page2换出,并换入page3。可以看到,当使用LRU算法时,每当遇到page fault时,总是保留之前最近几次访问过的几个page,并将驻留集中最久没有访问过的page换出,然后换入当前需要的page,符合LRU算法。
2024-06-11 16:18:08
304
原创 西南交通大学【操作系统实验2】
子进程15325由父进程创建,孙进程15326由子进程15325创建,输入Crtl+\后,孙进程被子进程终止,子进程被父进程终止,随后父进程终止。实验 1:编译并运行程序test2.c,当按下Crtl+\组合键时,打印出子进程结束的信息,最后打印出父进程结束的信息。子进程14763和14764由父进程14762创建,输入Crtl+\后,子进程分别被父进程终止,随后父进程终止。进程14571由父进程14570创建,输入Crtl+\后,子进程14571被父进程终止,随后父进程终止。实验2第一种情况运行结果。
2024-06-11 16:11:04
1078
原创 西南交通大学【操作系统实验1】
4. 46-ubuntu SMP Fri Jul 27 17:25:43 UTC 2012:这是关于Linux内核的编译信息,指示了内核的构建时间和日期。3. (gcc version 4.6.3(ubuntu/Linaro 4.6.3-1ubuntu5)):这是关于系统中安装的GNU编译器套件(GCC)的版本信息。2. 内核版本: Linux version 3.2.0-29-generic-pae:这是系统中正在运行的Linux内核的版本号。- Cached:用于缓存的内存量,以KB为单位。
2024-06-11 16:06:33
609
原创 数学建模【对粒子群算法中惯性权重和学习因子的改进】
设置较大的c1值,会使粒子过多的在局部搜索(这里的局部搜索指的是粒子会过多的在自身的局部范围内进行搜索,从全局来看实际上增大了搜索范围。反之,较大的c2值会使粒子过早收敛到局部最优值。设置c1较大的值,会使粒子过多地在自身的局部范围内搜索,而较大的c2的值,则又会促使粒子过早收敛到局部最优值。为了有效地控制粒子的飞行速度,使算法达到全局搜索与局部搜索两者间的有效平衡,Clerc构造了引入收缩因子的PSO模型,采用了压缩因子,这种调整方法通过合适选取参数,可确保PS0算法的收敛性,并可取消对速度的边界限制。
2024-03-10 16:49:29
2526
原创 数学建模【时间序列】
时间序列也称动态序列,是指将某种现象的指标数值按照时间顺序排列而成的数值序列。时间序列分析大致可分成三大部分,分别是描述过去、分析规律和预测未来,本篇将主要介绍时间序列分析中常用的三种模型:季节分解、指数平滑方法和ARIMA模型。还是推荐使用SPSS软件操作。在 数学建模【多元线性回归】 中我们提到过时间序列,这里再来复习一下。时间序列数据:对同一对象在不同时间连续观察所取得的数据从出生到现在,你的体重的数据(每年生日称一次)中国历年来GDP的数据在某地方每隔一小时测得的温度数据。
2024-03-10 16:49:15
1114
原创 数学建模【模糊综合评价分析】
提到模糊综合评价分析,就先得知道模糊数学。1965年美国控制论学家L.A.Zadeh发表的论文“Fuzzy sets”标志着模糊数学的诞生。模糊数学又称Fuzzy数学,是研究和处理模糊性现象的一种数学理论和方法。模糊性数学发展的主流是在它的应用方面。由于模糊性概念已经找到了模糊集的描述方式,人们运用概念进行判断、评价、推理、决策和控制的过程也可以用模糊性数学的方法来描述。例如模糊聚类分析、模糊模式识别、模糊综合评判、模糊决策与模糊预测、模糊控制、模糊信息处理等。
2024-03-06 14:37:03
1922
原创 数学建模【整数规划】
整数规划其实是线性规划和非线性规划的一个特殊情况,即有的变量取值只能是整数,不能是小数。这时候就需要一个新的函数来解决问题。对于整数规划,分为线性整数规划和非线性整数规划线性整数规划:MATLAB可进行求解(整数的意思:在线性规划的基础上,加入决策变量取整数的条件)非线性整数规划:无特定算法,只用用近似算法,如蒙特卡罗模拟、启发式算法整数中有一类比较特殊的0-1规划:特殊的整数规划,MATLAB中也只能求解线性0-1规划,对于非线性0-1规划也只能近似求解。
2024-03-06 14:36:47
555
原创 数学建模【灰色关联分析】
一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中,哪些是主要因素,哪些是次要因素;哪些因素对系统发展影响大,哪些因素对系统发展影响小;哪些因素对系统发展起推动作用需强化发展,哪些因素对系统发展起阻碍作用需加以抑制......这些都是系统分析中人们普遍关心的问题。
2024-03-04 22:44:54
1092
原创 数学建模【基于熵权法对TOPSIS模型的修正】
在前面有关于TOPSIS法和熵权法的介绍,我们可以知道TOPSIS有一个和层次分析法共有的问题,就是各个指标的权重是由我们主观或根据专家的主观评价估计的。熵权法的另一个问题是,因为概率p是位于0-1之间,因此需要对原始数据进行标准化,我们应该选择哪种方式进行标准化呢?举一个比较极端的例子。X和Y两个指标用来评定班上谁是三好学生,X表示违纪上档案的次数,Y表示逃课的次数,毫无疑问X对评定的影响程度大,但几乎所有的人的X都是0,所以X的权重就会很小,这时候万一有人违纪了但是没有迟到,不可能把三好学生给他吧。
2024-03-04 08:42:15
710
原创 数学建模【因子分析】
因子分析由斯皮尔曼在1904年首次提出,其在某种程度上可以被看成是主成分分析的推广和扩展。因子分析法通过研究变量间的相关系数矩阵,把这些变量间错综复杂的关系归结成少数几个综合因子,由于归结出的因子个数少于原始变量的个数,但是它们又包含原始变量的信息,所以,这一分析过程也称为降维。由于因子往往比主成分更易得到解释,故因子分析比主成分分析更容易成功,从而有更广泛的应用。
2024-03-03 13:52:29
1803
1
原创 数学建模【主成分分析】
主成分分析(Principal Component Analysis,PCA)是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息。一般来说,当研究的问题涉及到多变量且变量之间存在很强的相关性时,我们可考虑使用主成分分析的方法来对数据进行简化。在实际问题研究中,多变量问题是经常会遇到的。变量太多,无疑会增加分析问题的难度与复杂性,而且在许多实际问题中,多个变量之间是具有一定的相关关系的。
2024-03-03 13:52:10
1159
原创 数学建模【聚类模型】
物以类聚, 人以群分”,所谓的聚类,就是将样本划分为由类似的对象组成的多个类的过程。聚类后,我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测,也可以探究不同类之间的相关性和主要差异。聚类和分类的区别:分类是已知类别的,聚类未知。注:聚类模型一般有三种算法,K-means++法、系统层次法和DBSCAN法。
2024-02-29 21:36:22
1840
原创 数学建模【分类模型】
本篇将介绍分类模型。对于二分类模型,我们将介绍逻辑回归(logistic regression)和Fisher线性判别分析两种分类算法;对于多分类模型,我们将简单介绍SPSS中的多分类线性判别分析和多分类逻辑回归。分类模型,顾名思义将数据分类。如有一堆苹果和橙子,有它们的重量,大小,颜色等数据,将它们根据数据分为两类,之后如果给出数据,可以进行一定的判断,这个只有数据的是苹果还是橙子。
2024-02-29 14:55:40
1033
原创 数学建模【多元线性回归模型】
回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是,通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的。常见的回归分析有五类:线性回归、0-1回归、定序回归、计数回归和生存回归,其划分的依据是因变量Y的类型。本篇主要讲解多元线性回归以及lasso回归。回归分析的目的识别重要变量判断相关性的方向要估计权重(回归系数)回归分析分类类型模型Y的特点例子线性回归。
2024-02-29 13:50:21
4416
1
原创 数学建模【相关性模型】
相关性模型并不是指一个具体的模型,而是一类模型,这一类模型用来判断变量之间是否具有相关性。一般来说,分析两个变量之间是否具有相关性,我们根据数据服从的分布和数据所具有的特点选择使用pearson(皮尔逊)相关系数和spearman(斯皮尔曼)等级相关系数;分析两组变量,每组变量都有多个指标的时候,无论是pearson相关系数还是spearman等级相关系数都无能为力,所以又要介绍一个新的典型相关分析来解决这个问题。
2024-02-26 20:16:58
3849
1
原创 数学建模【插值与拟合】
在数学建模过程中,通常要处理由试验、测量得到的大量数据或一些过于复杂而不便于计算的函数表达式,针对此情况,很自然的想法就是,构造一个简单的函数作为要考察数据或复杂函数的近似。插值和拟合就可以解决这样的问题。给定一组数据,需要确定满足特定要求的曲线,如果所求曲线通过所给定有限个数据点,这就是插值。有时由于给定的数据存在测量误差,往往具有一定的随机性。因而,要求曲线通过所有数据点不现实也不必要。如果不要求曲线通过所有数据点,而是要求它反映对象整体的变化态势,得到简单实用的近似函数,这就是曲线拟合。
2024-02-25 10:47:40
1474
原创 数学建模【蚁群算法】
蚁群算法自然是从现实的蚂蚁中获得的启发。蚂蚁选择路径蚁群在觅食时,每只蚂蚁在走过的路径上会留下一种称为信息素的物质在路径分叉口:走左边路径还是右边路径?概率:蚂蚁在选择路径时总是倾向于信息素浓度高的方向移动一只蚂蚁的信息素总量视为有限的常数,则蚂蚁走过的路径越短,留在路径上的信息素浓度越高而信息素本身会随着时间不断挥发距离长的路径走过的蚂蚁少,后期信息素浓度增加量小于挥发量,总的变化是减少的距离短的路径走过的蚂蚁多,后期信息素浓度增加量大于挥发量,总的变化是增加的迭代。
2024-02-24 07:58:51
3364
原创 数学建模【遗传算法】
从做菜说起,小魏是一名大厨,想要创造一道美味的菜肴。首先随机生成多个原始配方,每种配方所用的原料(鸭脖、鸡肉、大肠等)与手法(煎炒焖炸卤炖)组合不同,现实中考虑调料用量、烹饪时间等等变量,会有无穷多种解,传统算法难以求解。请评委对几种配方做出的菜打分,分数高的配方进行配方交叉,保留一部分评分高的配方要素、舍弃评分低的配方。例如配方A和配方C的分数都高,A是卤鸭脖,C是炖大肠,配方交叉尝试新一组方案:“炖鸭脖”和“卤大肠”。有时会在配方交叉之后,再变更食材或烹饪方式。
2024-02-23 09:36:32
2765
原创 数学建模【粒子群算法】
这里通过共享信息的鸟群来引出粒子群算法场景:一群鸟在森林随机寻找食物,目标是找到食物量最多的位置关键:鸟群通过叫声交流,随时共享自己的位置和发现的食物量这样鸟群就知道当前在哪个位置食物的量最多每只鸟根据自己的记录和从鸟群获取的信息调整下一步搜索的方向每只鸟都记录自己经过位置的食物量最多的位置--------个体最优解每只鸟都知道整个鸟群记录过的食物量最多的位置--------群体最优解鸟具有惯性,有保持自身原有方向的趋势。但鸟也会学习鸟学习个体经验,有向个体最优解飞行的趋势。
2024-02-22 21:12:23
1472
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人