JasonBourne

数据结构与算法:图

图是一种非线性的数据结构,表示多对多的关系。图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V, E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 拿微信举例子,我们可以把每个用户看作一个顶点。如果两个用户之间互加好友,那就在两者之间建立一条边。所以,整个微信的好友关系就可以用一张图来表示。其中,每个用户有多少个好友,对应到图中,就...

数据结构与算法:深度广度优先搜索

什么是深度、广度优先搜索 算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法就是基于“图”这种数据结构的。图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。 图的存储邻接表存储方式的实现: public class Graph { // 无向图 private int v; // 顶点的个数 private LinkedList&l...

数据结构与算法:复杂度分析

为什么需要复杂度分析 数据结构与算法要解决的是快和省的问题,即如何让代码运行的更快,如何让代码更省存储空间。那么,执行效率就是算法一个非常重要的考量指标。事后统计法虽然也能帮助我们了解算法的执行效率,但是它有很大的局限性。一是非常依赖测试环境,不同级别的硬件设备,会显示出截然不同的结果;二是测试结果受到数据规模的影响,数据规模较小时,无法表现出一些算法的特性。而时间、空间复杂度分析就可以帮...

数据结构与算法:二叉树

树是一种非线性表结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。 树的各种概念 如下图,A 节点就是 B 节点的父节点,B 节点是...

数据结构与算法:二分查找

二分查找(Binary Search)算法,也叫折半查找算法。它针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 时间复杂度 我们假设数据大小是 n,每次查找后数据都会缩小为原来的一半,也就是会除以 2。最坏情况下,直到查找区间被缩小为空,才停止。 可以看出来,这...

数据结构与算法:字符串匹配算法

编程语言提供的字符串查找函数,它们的底层就是依赖的字符串匹配算法。 BF算法 BF 算法中的 BF 是 Brute Force 的缩写,中文叫作暴力匹配算法,也叫朴素匹配算法。从名字可以看出,这种算法的字符串匹配方式很“暴力”,当然也就会比较简单、好懂,但相应的性能也不高。 它的主要思想是在主串中,检查起始位置分别是 0、1、2….n-m 且长度为 m 的 n-m+1 个子串,...

数据结构与算法:B+树

B+树介绍 B+树是B树的一种变种,因此若想了解B+树,首先要了解B树的定义。B树又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用M表示。一般从查找效率考虑,通常要求M>=3。一棵M阶B树,有如下特性: 若根节点不是叶子结点,则至少有两棵树。 每一个节点最多M棵子树,最多有M-1个关键字。 除根节点外,其他的每个分支至少有ceil(M/2)个子...

数据结构与算法:数组

定义 数组是一种线性表数据结构,它用一段连续内存空间,来存储一组具有相同类型的数据。对于数组的定义有几个关键点:线性表,连续内存空间,相同类型数据。 线性表,顾名思义,就是数据像一条线一样串联的数据结构,结构中的每条数据最多只有前后两个方向,链表/栈/队列都属于线性表数据结构。而树/图等数据结构因为数据不是简单的前后关系,所以不属于线性表结构。 连续内存空间和相同类型数据则是数...

MySQL 索引

索引简介 索引是数据库中一种排序的数据结构,用于提升数据查询效率 索引的分类 聚簇索引与非聚簇索引 数据行与索引结构组织在一起的索引为聚簇索引,反之则为非聚簇索引。 按底层结构实现划分 有序数组:可以通过二分法快速(O(logn))定位数据,但是当数组插入新数据时,需要移动插入位置后面的数据。适合在静态数据中使用。 哈希表:哈希表非常适合存储key-value型数据,查...

计算机与操作系统:内存管理

内存概念 内存是计算机最重要的组件之一,它是程序与cpu沟通的桥梁,所有运行的程序都要加载到内存中执行。内存又被称为主存,其作用是存储cpu的运算数据,以及与硬盘等其他外部存储的交换数据。 内存内部由各种IC电路组成,它的种类很多,但主要分为以下三种类型: 随机存储器(RAM):可读可写,但是断电后,数据会消失。 只读存储器(ROM):可读不可写,断电后,数据不会消失。 ...

计算机与操作系统:进程

进程概念 操作系统中最核心的概念是进程,进程是对正在进行的程序的抽象。因为有了进程这个概念的存在,才让cpu有了(伪)并发操作的能力。 多道程序设计 在任何多道程序设计系统中,cpu在多个进程中不断的切换,每个进程执行几十至几百毫秒。严格来说,在某一个瞬间,cpu只能运行一个进程,而在1秒内,它可能运行多个进程,这就给人了一种进程在并行运行的错觉,以上是指单cpu情况下的伪并行,多cp...

计算机与操作系统:CPU

cpu 是计算机最核心的组成部分,它由一个芯片及数十亿个晶体管组成,它之于计算机相当于大脑之于人类的关系。 逻辑上可以将 CPU 分为控制单元及逻辑计算单元两部分: 控制单元:从内存中提取指令并解码执行。 逻辑计算单元:处理算数和逻辑运算。 从功能上又可以将 CPU 分为控制器、运算器、时钟、寄存器四部分。 控制器:负责从内存中提出指令/数据到寄存器,并根据指令...