自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ♥看二本学渣如何进腾讯 分享面试经验、职场感悟、硬核知识、大厂内推♥

❤牛牛,普通文本学渣,实习进完美,毕业进腾讯,去过外企,肝过头条。❤ 目前又继续回腾讯窝着。  扫码关注【牛牛码特】公众号,每周第一时间获取硬核文章~还有海量学习资料等着你来领取哦~专业学习路径及配套学习资料陆续更新中,期待我们的相遇!日常输出数据库、数据结构、操作系统、分布式架构、开源中间件相关知识点。分享面试经验,职场感悟。  部分优质干货:【腾讯三面】你能现场写一下LRU算法吗?【逆袭秘籍】Golang学习路径【一文Go

2021-04-15 19:48:14 198

原创 putchar函数注意事项

使用字符输入/输出函数时,必须在程序的前面加上头文件#include <stdio.h>或#include “stdio.h”。并且,该函数的变量及输出结果只能为一个字符。

2021-07-26 16:37:42 451

原创 putchar函数的基本格式

putchar函数的基本格式为:putchar©。(1)当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符);(2)当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符;(3)当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符。...

2021-07-26 16:37:03 655

原创 putchar语法

(1)函数声明int putchar(int char)(2)参数char-- 这是要被写入的字符。该字符以其对应的 int 值进行传递。(3)功能把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。 [3](4)说明该函数将指定的表达式的值所对应的字符输出到标准输出终端上。表达式可以是字符型或整型,它每次只能输出一个字符。例如:“putchar(’#’)”输出字符“#”。...

2021-07-26 16:34:22 564

原创 putchar

putchar语法结构为 int putchar(int char) ,其功能是把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中,为C 库函数 ,包含在C 标准库 <stdio.h>中。其输出可以是一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是用char定义好的一个字符型变量。...

2021-07-26 16:33:51 140

原创 递归函数特点

所有递归函数的结构都是类似的。(1)函数要直接或间接调用自身。(2)要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数。(3)如果不满足递归终止的条件,则调用涉及递归调用的表达式。在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化。...

2021-07-26 16:32:59 1488

原创 递归详解-调用中

而从被调用函数返回调用函数之前,系统也应完成3件工作:(1)保存被调函数的计算结果;(2)释放被调函数的数据区;(3)依照被调函数保存的返回地址将控制转移到调用函数。当有多个函数构成嵌套调用时,按照后调用先返回的原则。...

2021-07-26 16:32:36 92

原创 递归详解-调用前

一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统需要完成3件事情:(1)将所有的实参、返回地址等信息传递给被调用函数保存;(2)为被调用函数的局部变量分配存储区;(3)将控制转移到被调函数的入口。...

2021-07-26 16:30:34 95

原创 递归调用的参数模型

fun(形参){fun(参数值1) //第一次递归调用fun(参数值2) //第二次递归调用

2021-07-26 16:29:03 62

原创 递归调用的定义

递归调用就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。

2021-07-26 16:28:29 178

原创 递归调用法

递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间互相调用能产生循环的则一定是递归调用,递归调用一种解决方案,一种是逻辑思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。...

2021-07-26 16:28:02 151

原创 什么是普里姆算法?

普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚

2021-07-10 22:38:02 992

原创 队列的结构

数据结构分为线性结构和非线性结构,队列和线性表都是线性结构。线性表是由n 个数据元素组成的有限序列,该序列有惟一的“第一个”和惟一的“最后一个”数据元素;除了 “第一个”和“最后一个”之外,队列中的每个数据元素都只有一个直接前驱和一个直接后继。线性表的插入和删除操作可以在表中任意位置进行。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有

2021-07-10 22:37:24 515

原创 循环队列的条件处理

循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件 front等于rear>来判别队列是"空"还是"满"。解决这个问题的方法至少有两种:① 另设一布尔变量以区别队列的空和满;②另一种方式就是数据结构常用的: 队满时:(rear+1)%n==front,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算。如图1所示情况,队已满,但是rear(5)+1=6!=fron

2021-07-10 22:36:47 151

原创 循环队列的简介

循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。循环队列可以更简单防止伪溢出的发生,但队列大小是固定的。在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一

2021-07-10 22:34:36 424

原创 什么是循环队列?

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。...

2021-07-10 22:34:05 490

原创 归并算法的复杂度

归并排序比较占用内存,但却是一种效率高且稳定的算法。改进归并排序在归并时先判断前段序列的最大值与后段序列最小值的关系再确定是否进行复制比较。如果前段序列的最大值小于等于后段序列最小值,则说明序列可以直接形成一段有序序列不需要再归并,反之则需要。所以在序列本身有序的情况下时间复杂度可以降至O(n)TimSort可以说是归并排序的终极优化版本,主要思想就是检测序列中的天然有序子段(若检测到严格降序子段则翻转序列为升序子段)。在最好情况下无论升序还是降序都可以使时间复杂度降至为O(n),具有很强的自适应性。

2021-07-10 22:33:18 241

原创 归并算法的用途-求逆序对数

具体思路是,在归并的过程中计算每个小区间的逆序对数,进而计算出大区间的逆序对数(也可以用树状数组来求解)。

2021-07-10 22:32:47 110

原创 归并算法的用途-排序

排序速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列,应用见2011年普及复赛第3题“瑞士轮”的标程。

2021-07-10 22:31:52 79

原创 归并算法的比较

归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录 1(1) 3(2) 2(3) 2(4) 5(5) (括号中是记录的关键字)时输出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要。归并排序的比较次数小于快速排序的比较次数,移动次数一般多于快速排序的移动次数。...

2021-07-10 22:31:19 154

原创 归并算法描述

归并操作的工作原理如下:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列尾...

2021-07-10 22:30:50 93

原创 归并算法的操作

归并操作,也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。如 设有数列{6,202,100,301,38,8,1}初始状态:6,202,100,301,38,8,1第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;第三次归并后:{1,6,8,38,100,202,301},比较次数:4;总的比较次数为:3+4+4=11;逆序数为14;...

2021-07-09 22:45:23 201

原创 什么是归并排序?

归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。...

2021-07-09 22:44:50 53

原创 最佳适应算法的计算方法

它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。Best fit算法等价于装箱问题,举例如下:装箱问题:有体积为V的箱子N个,体积为Vi的物品M个,求使得物品全部能够装入箱子,箱子数量的最小值。假设 V=6 N=10,V1,V2,…,V10分别为:3 4 4 3 5 1 2 5 3 1。计算过程如下:第一步

2021-07-09 22:43:52 510

原创 什么是最佳适应算法?

最佳适应算法是指从全部空闲区中找出能满足作业要求且大小最小的空闲分区的一种计算方法,这种方法能使碎片尽量小。

2021-07-09 22:42:58 1341

原创 贪心算法应用举例

例如,平时购物找零钱时,为使找回的零钱的硬币数最少,不要求找零钱的所有方案,而是从最大面值的币种开始,按递减的顺序考虑各面额,先尽量用大面值的面额,当不足大面值时才去考虑下一个较小面值,这就是贪心算法。...

2021-07-09 22:42:07 83

原创 贪心算法存在问题

贪心算法也存在如下问题:1、不能保证解是最佳的。因为贪心算法总是从局部出发,并没从整体考虑;2、贪心算法一般用来解决求最大或最小解;3、贪心算法只能确定某些问题的可行性范围。...

2021-07-09 22:41:35 1531

原创 贪心算法解题策略

贪心算法不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优选择。使用贪心策略要注意局部最优与全局最优的关系,选择当前的局部最优并不一定能推导出问题的全局最优。贪心策略解题需要解决以下两个问题:1、该问题是否适合使用贪心策略求解,也就是该问题是否具有贪心选择性质;2、制定贪心策略,以达到问题的最优解或较优解。要确定一个问题是否适合用贪心算法求解,必须证明每一步所作的贪心选择最终导致问题的整体最优解。证明的大致过程为:首先考察问题的一个整体最优解,并证明可修改这个最优解,使其以贪心选择开始,做了贪

2021-07-09 22:41:00 661

原创 最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用贪心法求解的关键所在。在实际应用中,至于什么问题具有什么样的贪心选择性质是不确定的,需要具体问题具体分析。...

2021-07-09 22:40:16 3712

原创 贪心选择性质

一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。这就是贪心选择性质。对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解...

2021-07-09 22:39:44 2227

原创 贪心算法的特性

贪心算法可解决的问题通常大部分都有如下的特性:1、有一个以最优方式来解决的问题。为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。2、随着算法的进行,将积累起其他两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。3、有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。4、还有一个函数检查是否一个候选对象的集合是可行的,即是否可能往该集合上添加更多的候选对象以获得一个解。和上一个函数一样,此时不考虑解决

2021-07-09 22:39:19 2073

原创 贪心算法的思路

贪心算法一般按如下步骤进行:①建立数学模型来描述问题。②把求解的问题分成若干个子问题。③对每个子问题求解,得到子问题的局部最优解。④把子问题的解局部最优解合成原来解问题的一个解。贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子

2021-07-08 23:13:11 580 1

原创 什么是贪心算法?

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。...

2021-07-08 23:12:25 52

原创 回溯算法的基本思想

回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。八皇后问题就是回溯算法的典型,第一步按照顺序放一个皇后,然后第二步符合要求放第2个皇后,如果没有位置符合要求,那么就要改变第一个皇后的位置,重新放第2个皇后的位置,直到找到符合条件的位置就可以了。回溯在迷宫搜索中使用很常见,就是这条路走不通,然后返回前一个路口,继续下一条路。回溯算法说白了就是穷举法。不过回溯算法使用剪枝函数,剪去一些不可能到达 最终状态(即答案状态)的节点,从而减少状态空间树节点的生成。回溯法是一个既带有系统性又

2021-07-08 23:11:31 2557

原创 回溯算法的来源

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。用回溯算法解决问题的一般步骤:1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。2 、确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。3 、以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。这个开始结点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新

2021-07-08 23:11:00 153

原创 什么是回溯算法?

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。...

2021-07-08 23:10:35 288

原创 广义后缀数组的构造

将T中的所有字符串加上终结符连接在一起构成新的字符串S=t1连接在一起构成新的字符串S= t1连接在一起构成新的字符串S=t1t2$…tn ;对字符串S构造,后缀树;每一个叶节点标记上在S中的起始位置;移除横跨多个字符串的后缀;将叶节点的起始位置映射成对。说明:真实构造中对后缀的比较只比较到字符;对字符串S构造,后缀树;每一个叶节点标记上在S中的起始位置;移除横跨多个字符串的后缀;将叶节点的起始位置映射成对。说明:真实构造中对后缀的比较只比较到字符;对字符串S构造,后缀树;每一个叶节点标记上在S中的起始位置

2021-07-08 23:06:59 115

原创 广义后缀树

对于字符串集合T={t1,t2…tn}的广义后缀树,是一个压缩字典树(trie)其中包含了T中每一个字符串的所有的后缀。每一个叶节点,是由 对来标记的,即包含了所在的字符串和在字符串中的开始位置。...

2021-07-08 23:05:34 287

原创 后缀树的详述

一个具有m个词的字符串S的后缀树T,就是一个包含一个根节点的有向树,该树恰好带有m个叶子,这些叶子被赋予从1到m的标号。 每一个内部节点,除了根节点以外,都至少有两个子节点,而且每条边都用$的一个非空子串来标识。出自同一节点的任意两条边的标识不会以相同的词开始。后缀树的关键特征是:对于任何叶子i,从根节点到该叶子所经历的边的所有标识串联起来后恰好拼出S的从i位置开始的后缀,即S[i,…,m]。树中节点的标识被定义为从根到该节点的所有边的标识的串联。...

2021-07-08 23:04:52 75

原创 后缀树的简介

后缀树提出的目的是用来支持有效的字符串匹配和查询。

2021-07-08 23:04:19 43

空空如也

空空如也

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

TA关注的人

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