算法
li_jeremy
生活不止眼前的苟且,还有诗和远方的田野
展开
-
复试上机指南-C++STL(一)
前言最近在准备复试,博主的复试是C/C++,考虑到C++自带的STL操作的方便性,所以选择了用C++作为机试的语言,预计会做成一个系列,内容包括但不限于:STL:set、map、序列容器(vector、deque、list、array)、string类、容器适配器(stack、queue、priority_queue)常用的数据结构:链表、数组、栈、队列、树、图等常用的数据结构,部分会在前...原创 2020-03-03 19:55:32 · 1434 阅读 · 0 评论 -
2020数据结构-查找之顺序查找和折半查找
一、顺序查找和折半查找1.顺序查找顺序表查找分为对一般的无序线性表的顺序查找和对关键字有序的顺序表的顺序查找。1.1 一般线性表的顺序查找基本思想从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个关键字满足的给定条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表中的一端,还未找到则返回查找失败的信息。算法分析对于有n个元素的表,给定的key值与表...原创 2019-09-17 16:47:25 · 3539 阅读 · 0 评论 -
2020数据结构-查找之B树和B+树
一、B树和B+树1.B树应用场景查找磁盘中地海量数据。基本思想1.若根结点不是终端结点,则至少有2棵子树。2.除根节点以外的所有非叶结点至少有 M/2 棵子树,至多有 M 个子树(关键字数为M-1)。3.所有的叶子结点都位于同一层。与平衡二叉树的对比(图片来自网络,侵删)B 树的每个节点可以表示的信息更多,因此整个树更加“矮胖”,这在从磁盘中查找数据(先读取到内存...原创 2019-09-17 17:47:30 · 403 阅读 · 0 评论 -
2020数据结构-查找之散列表
一、散列表1.基本概念线性表和树表的查找中,记录在表中的位置与记录的关键字之间不存在确定的关系,因此,在这些表中查找记录时需要一些关键字比较。这类查找建立在“比较”的基础上,查找的效率取决于比较的次数。散列函数:把查找表中的关键字映射成该关键字对应的地址的函数(这里的地址可以是数组下标、索引或内存地址等)。冲突:散列函数可能会把两个或两个以上的不同关键字映射到同一地址。同义词:上述发生...原创 2019-09-17 19:44:15 · 1538 阅读 · 0 评论 -
2020数据结构-查找之串
串1.串的定义串(字符串):是零个或多个字符组成的有限序列。记作:S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它字符。串值:双引号括起来的字符序列是串值。串长:串中所包含的字符个数称为该串的长度。空串(空的字符串):长度为零的串称为空串,它不包含任何字符。空格串(空白串):构成串的所有字符都是空格的串称为空白串。注意:空串和空白串的不同,例如“...原创 2019-09-17 20:27:56 · 241 阅读 · 0 评论 -
2020数据结构-图之基本概念
一、图1.图的基本概念1.相关定义图是由顶点的有穷非空集合以及顶点之间的边的集合组成的,通常表示为:G(V,E),其中,G表示一个图,V是图中的顶点的集合,E是图G中边的集合。线性结构中,元素仅有线性线性关系,每个元素仅有一个直接前驱和直接后继。树形结构中,数据元素(结点)之间有着明显的层次关系,每层上的元素可能和下一层中多个元素相关,但只能和上一层中的一个元素相关。图...原创 2019-09-18 17:21:54 · 2624 阅读 · 0 评论 -
2020数据结构--树
一、树1.树的基本概念1.1树的定义树是n(n>=0)个结点的集合,n=0时,称为空树,这是一种特殊情况。在任意一棵非空树中应该满足:有且仅有一个特定的称为根的结点。当n>1时,其余结点可分为m(m>0)个互不相交的有限集合T1,T2…Tm其中每个集合本身又是一棵树,称为根结点的子树。树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构...原创 2019-09-19 19:24:28 · 739 阅读 · 0 评论 -
2020数据结构-栈和队列
一、栈和队列1.栈1.1 栈的基本概念定义:栈是一种线性表,只允许在一端进行插入或者删除操作的线性表。栈顶:线性表允许进行插入删除的一端。栈底:固定的,不允许进行插入和删除。空栈:不含任何元素的空表。栈的操作特性是后进先出。1.2 栈的顺序存储结构顺序栈的实现:采用顺序存储的栈称为顺序栈,它利用一组连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前...原创 2019-09-20 16:53:46 · 291 阅读 · 0 评论 -
2020C语言--指针、结构体、文件之指针
从今天开始就是C语言的指针了,今年博主考数据结构和C语言,对一些难点重点进行了总结,这次的C语言写完了就开始过代码了,一起加油吧。原创 2019-09-20 21:44:14 · 473 阅读 · 0 评论 -
2020数据结构-排序算法之外部排序
一、外部排序概念外部排序指待排序文件较大,内存一次放不下,需要存放在外部介质的文件的排序。在排序过程中需要进行多次外村和内存之间的交换,对外存文件的内容进行排序后结果仍然被存放到原文件。方法由于外部设备的不同,通常又可分为磁盘文件排序和磁带文件排序不同之处在于:初始归并段在外存介质中的分布方式,磁盘是直接存取设备,磁带是顺序存取设备。后续再更。。。...原创 2019-09-16 20:30:38 · 136 阅读 · 0 评论 -
2020数据结构-排序算法之内部算法的比较
一、内部排序算法的比较(一)时间复杂度简单选择排序、直接插入排序、冒泡排序平均情况下的时间复杂度都为O(n·n)。希尔排序对较大规模的排序都可以达到很高的效率。快排在实际应用中常优于其他算法。(二)空间复杂度简单选择、插入、冒泡、希尔、堆排序都仅借助常数个辅助空间。快速排序在空间上仅使用一个小的辅助栈,用于实现递归。(三)稳定性插入、冒泡、归并、基数是稳定的排序方法。...原创 2019-09-16 20:23:58 · 543 阅读 · 0 评论 -
绿色计算大赛--扔桃子
代码#include<iostream>#include<vector>#include<algorithm>using namespace std;int getNum(int n){ int k; k=0; while(n!=0){ if(n%2 == 0){ n/=2; }else{ k+=1; n--; ...原创 2018-10-29 19:12:19 · 306 阅读 · 0 评论 -
背包问题
01背包问题只想说关于01背包问题这篇博客是真的秀,通俗易懂,只要把博客中的表格读懂,01背包问题就OK了,强烈推荐!!!01背包问题的简单解释自己看完之后的个人理解,可忽略01背包问题是最简单的背包问题,其最主要的思想就是现在有一个重量为w,价值为v的背包,需要往里面放i个物品,那么在不超过重量的前提下,怎么放是价值最大的?其实这个的关键就在于一个状态转换方程(学来的词,我也不知道状态...原创 2018-11-01 17:17:29 · 263 阅读 · 0 评论 -
DFS原理白话解析
前言看了许多的关于dfs的博客,自己也研究了好多遍,最终算是入门了,下面就简单的个人理解的原理以及结合一个简单的全排列实例进行讲解。原理简介dfs基于递归思想,递归思想就是把一个事拆分成若干见相同的小事共同组合完成,具体见下图的斐波那契的图文解决这就是一个最典型的递归,入口f(5)出口就是每次递归的return;说完递归就是dfs,其有两个重要的标志,也就是两个数组,一个用来标记该点是...原创 2018-11-04 11:20:57 · 74392 阅读 · 35 评论 -
DFS经典题目走迷宫
代码#include<bits/stdc++.h>using namespace std;bool a[101][101]={0};char b[101][101]; //存放迷宫 int flag=0; //如果能走出去就标记为1,反之为0int xx[4]={0-1,0,1},yy[4]={-1,0,1,0};int n,kx,ky; //n是迷宫的...原创 2018-11-04 21:43:32 · 3570 阅读 · 0 评论 -
2020数据结构-排序算法之插入排序
前言最近在看2020王道的第7章,排序感觉讲的不适合我这种比较菜的人,所以结合王道课本每个算法来一个例子分析一波,感觉这样更好理解。插入排序(直接插入、折半插入、希尔排序)交换排序(冒泡、快排)选择排序(简单选择、堆排序)2路归并排序基数排序外部排序一、插入排序1.直接插入基本思想(对我而言用处不大,起码做题理解的不到位)每次将一个待排序的记录按其关键字(希望进行排...原创 2019-09-16 17:05:16 · 174 阅读 · 0 评论 -
2020数据结构-排序算法之交换排序(冒泡、快排)
二、交换排序(冒泡、快排比较常见,简单分析即可)1.冒泡排序基本思想从后往前两两比较相邻元素的值,若为逆序则交换他们,直到序列比较完,我们成为一趟冒泡。效率分析空间效率:O(1)时间效率:最坏O(n·n)2.快速排序基本思想分治法,人去一个元素作为基准,通过一趟排序将表划分为两个独立的部分,使得左侧(如果是从小到大排序的话)的小于基准值,右侧的大于基准值,这个工程...原创 2019-09-16 17:23:52 · 163 阅读 · 0 评论 -
2020数据结构-排序算法之选择排序(简单选择、堆排序)
一、选择排序(简单选择、堆排序)1.简单选择基本思想假设排序表为L[1…n],在第一次取min=i,L[i]为最小元素,之后设置一个标志位j循环与L[min]进行比较,若发现L[j]<L[min],则令min=j,如果min != i,就交换L[min]与L[i]的位置。效率分析空间效率:O(1)时间效率:O(n·n)稳定性:不稳定。2.堆排序基本思想是一种...原创 2019-09-16 19:37:58 · 247 阅读 · 0 评论 -
2020数据结构-排序算法之归并排序、基数排序
一、归并排序和基数排序1.归并排序基本思想归并算法的中心是归并两个已经有序的数组。归并两个有序数组A和B,就生成了第三个数组C,数组C包含数组A和B的所有数据项,并且使它们有序的排列在数组C中。举例效率分析空间:O(n)时间:每趟归并的时间复杂度为O(n),共需进行log2n(向上取整)趟归并,所以时间复杂度为O(nlog2n)。稳定性:稳定。2.基数排序...原创 2019-09-16 20:01:13 · 224 阅读 · 0 评论 -
绿色计算大赛--字符串反转
vector简单介绍1.vector是可变大小数组的序列容器。2.其可以采用连续存储空间来存储元素。也就意味着可以采用下标对vector的元素进行访问,其和数组一样高效。和数组的区别就是它的大小可以改变,并且其大小会被容器自动处理。3.vector的动态大小的形成是其在开始的时候就分配了多余的存储空间,用来应对可能发生的增长。4.其每次在数组的末尾进行插入删除操作,所以其效率也是非常高的...原创 2018-10-29 18:56:20 · 309 阅读 · 0 评论