自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA)

编译原理: Subset Construction 子集构造法(幂集构造)文章目录编译原理: Subset Construction 子集构造法(幂集构造)简介参考正文示例回顾子集构造法 Subset Construction函数定义算法过程伪代码构造 Dtran绘制 DFA结语简介上一篇:编译原理: Thompson 构造法(正则表达式 转 NFA)我们再回顾一次使用正则表达式构建 DFA 的具体流程:Thompson 构造法:正则表达式 RegExp -> 不确定有限状态机 NFA子

2020-11-27 01:49:29 6503 1

原创 编译原理: Thompson 构造法(正则表达式 转 NFA)

编译原理: Thompson 构造法(正则表达式 转 NFA)文章目录编译原理: Thompson 构造法(正则表达式 转 NFA)简介参考正文什么是状态机有限状态机 FANFA vs DFAThompson 构造法基本单元:单个字符三种转换规则:并 |、连接 ⋂\bigcap⋂、闭包 *示例a(b∣c)∗a(b|c)^{*}a(b∣c)∗(a∣b)∗abb(a|b)^{*}abb(a∣b)∗abb结语简介编译过程往往依赖于有限状态机的构建,其中最具代表性的就是正则表达式(Regular Expres

2020-11-26 16:39:44 13062 6

原创 NASM: Register 寄存器

NASM: Register 寄存器文章目录NASM: Register 寄存器简介参考正文寄存器分类数据寄存器:`AX`、`BX`、`CX`、`DX`高位 H 和低位 L:`AH`、`BH`、`CH`、`DH`、`AL`、`BL`、`CL`、`DL`32位 & 64位:`EAX`、`EBX`、`ECX`、`EDX`、`RAX`、`RBX`、`RCX`、`RDX`段寄存器:`CS`、`DS`、`SS`、`ES`、`FS`、`GS`指针寄存器:`IP`、`SP`、`BP`32位:`EIP`、`ESP

2020-11-20 15:49:08 1600

原创 Make 构建工具

Make 构建工具文章目录Make 构建工具简介参考正文Install 安装make 初体验Makefile 结构格式Rule 构建规则规则一:默认目标规则二:构建条件Phony Target 伪目标Makefile 语法回声 echoing:使用 `@` 取消注释 Comment:使用 `#`变量声明:使用 `=` 声明、使用 `$()` 访问Shell 变量:使用 `$$` 转译共用 Shell:使用 `;`、`\`、`.ONESHELL`内置变量自动变量:`$@`、`$<`、`$^`、...其

2020-11-20 11:33:57 320

原创 C 基础: Preprocessor 预处理器

C: Preprocessor 预处理器文章目录C: Preprocessor 预处理器简介参考正文什么是预处理?主要功能文件引入宏定义条件编译应用确保唯一引入头文件特定运行模式全局变量声明结语简介C 语言是一个古老却又屹立不摇的高级语言,它在计算机世界拥有不可动摇的地位。C/C++ 语言源文件生成可执行文件的大致过程如下:本篇将要来介绍在预处理(C-Preprocessor)阶段会使用到的代码以及相关写法和用法。参考 C 预处理器 https://www.runoob.

2020-11-20 08:20:06 837

原创 Cpp 进阶:Smart Pointer 智能指针

Cpp 进阶:Smart Pointer 智能指针文章目录Cpp 进阶:Smart Pointer 智能指针简介参考正文核心目的功能需求C++ 实现智能指针(包装类)全局工厂包装函数测试用对象类测试代码结语简介我们都知道 Java 和 C++ 一样,运行时会同时维护一个堆(Heap)空间与栈(Stack)空间。通常局部变量、函数参数等都会存放在栈空间,跟着函数运行周期一起消亡;而 Java 和 C++ 对于堆空间的控制则不太相同:对于 Java **“万物皆对象”**的设计理念,程序以对象(Ob

2020-11-16 20:19:19 313

原创 Docker: Mac 上的 Ubuntu 环境搭建

Docker: Mac 上的 Ubuntu 环境搭建文章目录Docker: Mac 上的 Ubuntu 环境搭建简介参考正文搭建目标安装 Docker for Mac使用阿里加速器获取镜像并启动容器确认安装并启动获取 Ubuntu20.04 镜像创建容器并进入伪终端为 Ubuntu 配置 ssh、vim 相关工具安装工具配置 ssh制作镜像以保存环境从宿主机透过 ssh 访问虚拟机结语简介Docker 容器化管理的功能,几乎能够替代虚拟机的作用。本篇就来介绍使用 Docker Image 创建环境并作

2020-11-13 15:43:58 2857 2

原创 Sorting 排序算法: Counting Sort 计数排序

Sorting 排序算法: Counting Sort 计数排序文章目录Sorting 排序算法: Counting Sort 计数排序简介参考正文算法介绍输入核心思想算法流程算法复杂度分析结语简介今天来介绍第一个线性时间排序算法。由于决策树模型(详见参考链接),比较排序算法的下界定在 Ω(nlogn)。但是如果我们知道或是对输入加上某些限制,便可以不使用比较的方式来进行排序,从而获得线性时间的排序算法。本篇介绍线性时间排序算法中的第一个:计数排序。参考 基于比较排序的算法复杂度的下

2020-11-11 10:11:39 375

原创 Tree 树算法: BST-Traversal 二叉(搜索)树的遍历

Tree 树算法: BST-Traversal 二叉(搜索)树的遍历文章目录Tree 树算法: BST-Traversal 二叉(搜索)树的遍历简介参考正文什么是遍历?二叉树遍历的种类伪代码先序遍历 Preorder中序遍历 Inorder后序遍历 Postorder层序遍历 LayerJava 实现树接口和二叉搜索树四种遍历的实现测试结语简介数据结构通常是为了某些特定场景所服务,透过付出建立数据结构的时间和空间代价来在搜索、查找、增删等操作上获得更好的性能。而树的相关算法在应用上主要增加搜索的性能,

2020-11-10 20:59:07 190

原创 ADT: Graph 图

ADT: Graph 图文章目录ADT: Graph 图简介参考正文名词解释图的定义和表示抽象接口两种存储实现邻接矩阵(Adjacent-Matrix)邻接链表(Adjacent-List)Java 实现接口邻接矩阵实现邻接表实现测试结语简介图(Graph)数据结构是一个较为复杂,但是却能很好描述现实世界的各种信息,利用节点(Vertex)表示实体(entity),以边(Edge)描述实体间的联系。例如:以人为节点,人的交友关系为边;以网页为节点,以链接为边等。透过建立图数据结构,我们可以进行一系列的

2020-11-05 18:19:34 745

原创 C 基础:typedef 类型定义

Cpp 基础:typedef 类型定义文章目录Cpp 基础:typedef 类型定义简介参考正文复杂变量声明基本类型声明数组类型声明函数/函数指针声明`先右再左`法则复合类型`typedef` 的使用基本类型结构体函数/函数指针复杂类型结语简介今天来介绍 C++ 中 typedef 关键字的作用。相信用过 C/C++ 的人都知道 #define 也能起到类型定义的作用,但是实际上 #define 关键字只能起到静态的文本无脑替换的功能;相较之下 typedef 更接近声明表达式的形式,接下来我们就来看

2020-11-04 12:24:03 319

原创 ADT: Binary-Search-Tree 二叉搜索树

ADT: Binary-Search-Tree 二叉搜索树文章目录ADT: Binary-Search-Tree 二叉搜索树简介参考正文二叉搜索树(BST)结构抽象接口实现要素Java 实现结语简介树(Tree)数据结构也是非常常见的数据结构之一,以链表的形式为基础,以节点为保存数据的单位,每个节点都有一个指向子节点的指针,每个节点可以存在任意数量的子节点。我们先来看看一般树的定义(参考:算法导论):有根树定义: 根节点 root树节点定义: 关键词 key 附带数据(

2020-11-03 20:57:02 458

原创 ADT: LinkedList 链表

ADT: LinkedList 链表文章目录ADT: LinkedList 链表简介参考正文链表结构抽象接口实现要素单向链表双向链表Java 实现链表接口单向链表双向链表结语简介几乎所有高级语言都提供数组(Array)作为基础数据结构,从存储的角度来看数组就是一个连续的存储单元,当时当我们并不能在创建时就知道未来需要用到多少空间,同时我们也不想预先分配空间而造成浪费,这时候我们就可以使用链表(LinkedList)来实现线性表,每一个数据块都附带一个指向下一个数据的指针,这样使得各个数据放置的位置更加

2020-11-03 19:17:01 405

原创 Sorting 排序算法: Heap Sort 堆排序

Sorting 排序算法: Heap Sort 堆排序文章目錄Sorting 排序算法: Heap Sort 堆排序簡介參考正文算法思想原理输入算法思想算法流程算法复杂度分析Java 实现結語簡介今天来介绍一个相对于其他比较排序算法比较特别的一个排序算法-堆排序(HeapSort),堆排序顾名思义借助了堆(Heap)的数据结构性质,并借由建堆(build-heap)的复杂度 O(n)和中间抽取最大值需要恢复堆的性质(maxHeapify)的复杂度 O(logn),组合操作使得堆排序的时间复杂度能够渐进

2020-11-02 19:16:56 259

空空如也

空空如也

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

TA关注的人

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