
数据结构与算法
文章平均质量分 96
如题
冉冉云
嵌入式软件开发、linux爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
十种排序算法总结(程序经过验证)
目录前言1 冒泡排序2 选择排序3 插入排序4 希尔排序5 归并排序6 快速排序7 堆排序8 计数排序9 桶排序10 基数排序总结前言本文对常见的排序算法做个总结,程序实现的是升序(降序在原理上与升序并无不同)。1 冒泡排序冒泡排序的主要思想是比较相邻两个元素,如果前一个元素比后一个元素大,那么就交换两个元素,直到没有元素需要交换。代码如下:void sortArray(vector<int>& nums) { bool need_bubble = true;原创 2020-07-16 20:58:04 · 570 阅读 · 0 评论 -
实现一个完全二叉堆
目录1 完全二叉堆的结构特点2 优先级队列与完全二叉堆3 实现3.1 用向量结构来实现3.2 上滤3.3 下滤3.4 程序1 完全二叉堆的结构特点完全二叉堆通常也简称为堆,是一种建立在完全二叉树基础上的数据结构(注意不要和内存中的堆弄混),同时,构建堆的完全二叉树还需要满足一个特点:任何叶子节点都不大于(小顶堆)/不小于(大顶堆)其父节点。2 优先级队列与完全二叉堆通常,优先级队列是使用完全二叉堆实现的。那为什么要选择堆而不是其它数据结构实现优先级队列呢?因为堆结构在实现优先级队列这件事情上很有优势原创 2020-07-15 18:05:08 · 359 阅读 · 0 评论 -
二叉树的4种遍历方式总结
目录1 前序遍历2 中序遍历3 后序遍历4 层序遍历1 前序遍历前序、中序、后序遍历的递归版本非常简单,不再赘述,这里仅给出非递归版本的实现。首先是前序遍历,顺序为根左右。具体的,先访问根节点,再访问左子树的根节点,再访问左子树的左子树的根节点,依次下去,直到左子树为空。左子树不存在时,接下来就需要访问最近访问的节点的右子树,对此右子树依然按照上述流程遍历。由于要访问右子树,我们就得记录之前一路向左访问下来的节点,且最近被访问的节点应该记录在最前面,这当然会让我们想到栈结构,至此代码就不难写了:/*原创 2020-07-15 10:24:14 · 435 阅读 · 0 评论 -
字符串匹配算法——KMP算法浅浅析
目录1 从最简单的想法开始2 利用模式串自身的特点来优化3 利用next数组优化串匹配4 构造next数组5 完整的程序6 参考文献1 从最简单的想法开始现有两个字符串text、pattern,需要从text中查找是否存在一个连续的字串和pattern相等,如果有的话就返回第一个查找到的字串的起始位置。如果不考虑效率的话,这确实是一个非常简单的任务,一个最简单的想法是两层循环比对,如下图所示:2 利用模式串自身的特点来优化假如模式串有着这样一个特点,在下标属于[0, j)的范围内有完全相等的前缀和原创 2020-06-29 00:03:15 · 333 阅读 · 0 评论 -
2020中兴捧月算法大赛迪杰斯特拉赛道初赛题解
目录摘要1 程序中使用的数据结构1.1 几个基本数据类型1.2 车道(Lane)1.3 道路(Road)1.4 站点(Station)1.5 货物(Goods)1.6 系统资源(SystemResource)1.7 物流系统(LogisticsSystem)2 算法思路2.1 初赛初版:路由表、深度优先搜索、路径惩罚2.1.1 搜索策略2.1.2 路径惩罚策略2.1.3 货物发送策略2.1.4 效果与问题2.1.5 转向新的思路2.2 初赛终版:多条路径的宽度优先搜索、货物组包、路径统合2.2.1 搜索策略原创 2020-06-27 20:57:23 · 2771 阅读 · 0 评论 -
浅析遗传算法
使用遗传算法求解多峰函数的最大值,是我的一项课程作业,做完之后,顺便把文档整理出来做个记录。全部内容如下:1、问题描述编程实现遗传算法,并求解多峰函数的最大值。多峰函数的表达式如下所示:用MATLAB做出函数的图像如下:2、算法描述及实现2.1、遗传算法概述遗传算法(GA,Genetic Algorithm),也称为进化算法。遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出...原创 2019-04-06 21:41:47 · 84638 阅读 · 4 评论