- 博客(16)
- 收藏
- 关注

原创 系统掌握——九大常用排序算法
1、九大常用排序算法介绍 在程序设计中,经常需要用到排序,可能大家都对排序算法有过一定的了解,不过,如果能系统地掌握它们,绝对是一件非常好的事情。 可能我们很熟悉冒泡排序、选择排序、快速排序、插入排序等等之类的排序算法,当被问到堆排序、归并排序等等就不知道怎么回事了。那么我们怎么去系统地记忆这些常用的排序算法呢? 我们可以根据排序的方式不同将排序算法分成插...
2018-06-04 19:57:26
1927
原创 全方位了解后台工程师技术栈
全方位了解后台工程师技术栈前言后台开发工程师有一个非常好的地方,就是用到的技术永远都是那些经典的,如网络、数据库、操作系统、分布式、缓存等,而其他岗位如前端,可能过几年时间就会更换技术展,学习的成本还是很大的。本文将介绍后台常用的技术,只是抛砖引玉,大家可以从有意思的点深入学习。正文本文会介绍以下多个领域相关的一些知识点网络数据库分布式缓存操作系统数据结构算法1、网络用户如何与后台服务器通信,后台服务器与后台服务器如何通信,后台服务器与数据库如何通信,中间的必不可少的就是网络
2021-05-12 20:51:08
492
转载 图文深入浅出红黑树
亲们,这个是转载博客,原文链接:https://www.jianshu.com/p/e136ec79235c写在前面当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑问,那
2021-05-12 20:02:46
244
转载 KMP算法——很详细的讲解
KMP算法(研究总结,字符串) KMP算法(研究总结,字符串)前段时间学习KMP算法,感觉有些复杂,不过好歹是弄懂啦,简单地记录一下,方便以后自己回忆。引入首先我们来看一个例子,现在有两个字符串A和B,问你在A中是否有B,有几个?为了方便叙述,...
2018-09-09 10:52:23
110417
83
原创 A*算法的C#实现
目录1,概述2,A *算法的基本原理3,A *算法的实现步骤4,A *算法的C#实现5,测试 1,概述 本文的主要内容是讲述A *寻路算法的基本原理,实现步骤以及对应的C#代码,适合读者用于学习A *算法或使用此代码提供的接口完成游戏中的寻路功能。 详细的A *算法的原理,请参照:https://blog.youkuaiyun.com/d...
2018-09-01 21:04:55
5678
转载 【转】C++虚函数的实现原理
原文地址:https://www.cnblogs.com/malecrab/p/5572730.html1. 概述简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例:其中:B的虚函数表中存放着B::foo和B::bar两个函数指针。D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(overrid...
2018-05-28 21:22:18
377
原创 C++多线程编程——线程同步:生产者与消费者问题
生产者与消费者问题是多线程中非常经典的线程同步问题,这些线程必须按照一定的生产率和消费率来访问共享缓冲区。实现方法是:设置两个信号量full和empty,其中full表示消费缓冲区的个数,empty表示生产缓冲区的个数,初始时没有生产物品,所以full值为0,empty值为n(n表示最大生产数量)。当生产者生产时,需要等待进入生产缓冲区,然后生产物品,生产完成后将消费缓冲区+1;当消费者消费时,需...
2018-05-24 21:00:46
4327
原创 图论——拓扑排序
1、什么是拓扑排序(1)有向图的拓扑序列有向图的拓扑序列是该有向图的一个顶点序列,该序列满足条件:对图中任意顶点i、j,若从顶点i到顶点j存在一条路径,则在序列中顶点i必须排在顶点j的前面。(2)拓扑排序在一个有向图中找一个拓扑序列的过程称为拓扑排序。2、拓扑排序的应用拓扑排序常用来确定一个依赖关系集中,事物发生的顺序。例如,在日常工作中,可能会将项目拆分成A、B、C、D四个子部分来完成,但A依赖...
2018-05-22 17:09:45
1114
原创 最短路径——Dijkstra算法和Floyd算法
一、最短路径概念 图中一个顶点到另一个顶点可能存在多条路径,每条路径所经过边的数量可能不同,每条路径所经过边的权值也可能不同,我们把花费最小的路径成为两个顶点的最短路径。 最短路径相关的两种常用算法:迪克斯特拉(Dijstra)算法和弗洛伊德(Floyd)算法。Dijstra算法用于快速求得图中一个顶点到其他所有顶点的最短距离和路径,Floyd算法用于求图中每对顶点的最...
2018-05-11 18:21:30
2848
原创 最小生成树——Prim算法和Kruscal算法
1、最小生成树的定义 一个连通图的生成树是该连通图的一个极小连通子图,它含有图中全部顶点,但只构成一棵树的(n-1)条边。对于一个带权连通无向图G的不同生成树,各棵树的边上的权值之和可能不同,边上的权值之和最小的树称为该图的最小生成树。2、最小生成树的应用 比如要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城...
2018-04-29 22:21:25
2347
原创 C++智能指针
1、智能指针的概念(1)指针及其存在的问题 指针是一个变量,它的值为另一个变量的地址。使用指针可以很灵活地操纵数据对象,但是指针使用不当会造成内存泄漏、指向的内存出错、野指针等问题使程序崩溃。(2)智能指针的引入 我们先看下面这段代码:void RemoveAt(vector<char*> &v, int i){ if(i < v.size...
2018-04-28 15:28:50
181
原创 图的遍历:深度优先搜索与广度优先搜索
1、定义深度优先搜索(DFS):从图中某个初始顶点v出发,首先访问初始顶点v,然后选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先遍历,直到图中与当前顶点v邻接的所有顶点都被访问过为止。广度优先搜索(BFS):首先访问初始顶点v,接着访问顶点v的所有未被访问过的邻接点v1,v2,...,vt,然后再按照v1,v2,...,vt的次序,访问每一个顶点的所有未被访问过的邻接点...
2018-04-26 18:00:23
984
原创 并查集的概念与算法实现
1、定义 并查集支持查找一个元素所属的集合以及合并两个元素各自所属的集合等运算。当给出两个元素的一个无序对(a,b),需要快速“合并”a和b所在的集合时,需要反复“查找”元素的集合,“并”、“查”和“集”三字由此而来。2、应用并查集主要用于处理一些不相交集合的合并及查询问题,它可以高效的解决一些等价类问题。3、实现(1)并查集的树结构类型定义typedef int ElemType;...
2018-04-25 18:34:31
448
原创 哈夫曼树及其编码
1、定义树的带权路径长度(WPL) 将树的每一个节点附加一个权值,树中所有叶子节点的带权路径长度之和成为该树的带权路径长度。其计算公式如下:哈夫曼树 带权路径长度WPL最小的二叉树成为哈夫曼树(或最优二叉树)。哈夫曼编码 规定哈夫曼树种左分支为0,右分支为1,则从根节点到每个叶子节点所经过的分支对应的0和1组成的序列便为该节点对应字符的编码...
2018-04-24 17:07:21
1798
原创 线索二叉树【定义、应用、线索化、遍历】
1、定义 对于具有n个节点的二叉树,采用二叉链存储结构时,每个节点有两个指针域,总共有2n个指针域,又由于只有n-1个节点被有效指针所指向,则共有2n-(n-1)=n+1个空链域。 空的左孩子指针指向该结点的前驱;空的右孩子指针指向该结点的后继。这种附加的指针值称为线索,带线索的二叉树称为线索二叉树。 在不同的遍历次序下,二叉树中的每个结点一般有不同的前...
2018-04-19 10:54:23
3504
原创 先序、中序、后序序列的二叉树构造算法
1、定义 如果同时知道二叉树的先序序列和中序序列,或者同时知道二叉树的后序序列和中序序列,就能确定这颗二叉树的形状。2、应用 通过二叉树的先序序列、中序序列或后序序列、中序序列,可构造出唯一的二叉树结构。3、实现(1)二叉树的类型定义typedef char ElemType;typedef struct BTNode{ ElemType data; BTNo...
2018-04-19 10:53:23
2144
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人