- 博客(60)
- 收藏
- 关注
原创 levelDB 源码分析之 SSTable
1 SSTable 基本组成SSTable 是 levelDB 磁盘上存储数据的结构。SSTable 分为不同的层次,其中除了第 0 层的 SSTable 之外,其他各层的 SSTable 中数据的 key 的范围没有任何重叠,并且各个 SSTable 内部数据按照 key 有序排列:对于 levelDB 中的单个 SSTable,其内部数据也是根据 key 的大小有序排列的。对于 level0 的单个 SSTable ,它是将 memtable 持久化到磁盘中形成的,其格式如下:SSTable
2021-11-01 10:43:18
998
翻译 PEP8 - Python 代码风格指南中英对照
PEP8 - Python 代码风格指南中英对照IntroductionA Foolish Consistency is the Hobgoblin of Little MindsCode lay-outindentationTabs or SpacesMaximum Line LengthShould a line break before or after a binary operator?Blank LinesSource File EncodingImportsModule level dunde
2021-01-05 16:20:07
1028
1
原创 Linux 下利用 gdb 查看 C++ 对象内存分布
Linux(ubuntu16.04) 下利用 gdb 查看 C++ 对象内存分布1. 安装 gdb (已安装请跳过)2. 利用 gdb 查看对象内存分布1. 安装 gdb (已安装请跳过)1. 安装 gdb$ sudo apt-get update$ sudo apt-get install gdb2. 添加 -m32 编译支持$ sudo apt-get install build-essential module-assistant $ sudo apt-get install gcc
2020-07-04 18:33:07
3943
原创 Algo~
熟读并背诵全文。1. 并查集int find(int x) { return pre[x] == x ? x : pre[x] = find(pre[x]); }void merge(int a, int b){ pre[find(a)] = find(b);}2. 快排稳定性:不稳定时间复杂度:O(n2)/O(nlgn),空间复杂度:O(1)int partition(int* vec, int start, int end){ int pos = star
2020-06-09 20:05:10
295
原创 算法导论学习笔记15_最短路径
最短路径1. 单源最短路径1.1 Bellman-Ford算法1.2 有向无环图的单源最短路径1.3 Dijkstra算法2. 所有结点对的最短路径问题2.1 Floyd-Warshall算法3. 算法实现(C++)3.1 Bellman-Ford算法3.2 有向无环图的单源最短路径3.3 Dijkstra算法3.4 Floyd算法1. 单源最短路径1.1 Bellman-Ford算法Bel...
2019-11-17 16:13:52
436
原创 Linux -C/C++静态链接库与动态链接库
C/C++静态链接库与动态链接库一、静态链接库(.a / .lib)二、动态链接库(.so / .dll)一、静态链接库(.a / .lib)静态链接库可以看做是一些目标文件(.o)的集合,在Linux系统中通常以.a结尾,在Window系统中通常以.lib文件结尾。程序员利用静态链接库开发程序时,不需要将静态链接库的源码进行重新编译,只需要将.a/.lib文件与自己的.o/.obj文件进行...
2019-08-04 15:08:52
1058
Linux基础2
Linux基础225. 用户身份25. 用户身份在Linux系统中,UID(User IDentification)就相当于我们的身份证号,具有唯一性。因此可以通过用户的UID来判断用户身份。用户身份有如下这些:管理员UID为0:系统的管理员用户系统用户UID为1~999:Linux系统为了避免因某个服务出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效...
2019-07-28 10:04:24
475
原创 Learn_PyTorch_4_神经网络结构
PyTorch入门总结41.1 神经元1.2 神经网络基本结构1.1 神经元神经网络中,神经元模型如下:用公式表示为:a=σ(z)=σ(a1w1+a2w2+⋯+aKwK+b)a = \sigma(z) = \sigma(a_1w_1 + a_2w_2 + \cdots+a_Kw_K + b)a=σ(z)=σ(a1w1+a2w2+⋯+aKwK+b)其中,[a1,...,ak,....
2019-06-15 16:38:14
323
2
原创 Learn_PyTorch_3_深度学习基础
PyTorch入门总结31 激活函数1.1 Sigmoid函数1.2 tanh函数1.3 Relu(线性修正单元)1.4 Leaky_Relu1.5 ELU(指数线性单元)1.6 MAXOUT1.7 激活函数的选取2 梯度下降法2.1 批量梯度下降法(BGD)2.2 随机梯度下降法(SGD)2.3 小批量梯度下降法(Mini-Batch Gradient Descent)2.4 梯度下降会遇到的...
2019-06-14 10:59:54
753
原创 Learn_PyTorch_2_数据加载与预处理
PyTorch入门总结21 自定义数据集1.1 从csv文件读取数据集名和标记1.2 显示样本图像和标记1.3 自定义数据集1.4 自定义变换1.5 数据集迭代器2 利用torchvision包构建数据集1 自定义数据集本文利用的数据集是面部姿势数据集,内容为一个名为face_landmarks.csv和69张后缀为.jpg的面部图片。其中,face_landmarkers.csv文件的内...
2019-06-13 15:27:35
312
原创 Learn_PyTorch_1_张量与自动求导
Pytorch入门总结1. PyTorch基础1.1 张量1.2 自动求导1. PyTorch基础1.1 张量张量的英文是Tensor,它是PyTorch里面基础的运算单位,与Numpy的ndarray相同都表示的是一个多维的矩阵。 与ndarray的最大区别就是,PyTorch的Tensor可以在 GPU上运行,而 numpy 的 ndarray 只能在 CPU 上运行,在GPU上运行...
2019-06-12 20:22:12
534
原创 DeepLearning_1.1
Deep Learning1. 基础知识1.1 神经元参考文献深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。[1]1. 基础知识主要内容:神经元、激活函数、梯度下降、学习率、过拟合1.1 神经元下图是神经元的简化模型:一个神经元通过树突接受之前的K个神经元传递的K个信号,然后将输出信号通过该神经元唯一的轴突向下一...
2019-06-05 19:45:03
333
原创 算法导论学习笔记15_最小生成树
最小生成树MST1. 最小生成树(MST)2. 贪心选择性质3. Kruskal算法4. Prim 算法5. 附录(代码)5.1 Kruskal 算法代码5.2 Prim 算法代码1. 最小生成树(MST)定义:图G=(E,V)G=(E, V)G=(E,V)的生成树是包含其所有结点的无环连通子图,有权图的最小生成树是其权值之和最小生成树。下图展示了有权图的最小生成树:其中,加粗的边和所...
2019-04-26 22:03:06
476
原创 算法导论学习笔记14_基本图算法
基本图算法1. 图的表示1.1 邻接链表1. 图的表示对于一个图G=(V,E)G=(V, E)G=(V,E),通常由两种表示方法:邻接链表和邻接矩阵。对于稀疏图(边的条数∣E∣|E|∣E∣远远小于∣V∣2|V|^2∣V∣2的图),通常用邻接链表表示,而对于稠密图(∣E∣|E|∣E∣接近∣V∣2|V|^2∣V∣2),通常采用邻接矩阵的形式表示。1.1 邻接链表对于图G=(V,E)G=(V,...
2019-04-25 15:23:51
774
原创 算法导论学习笔记13_贪心算法
贪心算法1. 贪心算法定义及性质2. 实例1:活动选择问题3. 实例2:霍夫曼编码4. 附录(代码)4.1 活动选择代码4.2 霍夫曼编码代码1. 贪心算法定义及性质贪心算法(Greedy Method),又称为“贪婪算法”。是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而导致结果是最好或最优的算法。贪心算法的两个要素是:最优子结构、贪心选择性质。最优子结构:如果一个问题的最...
2019-04-15 22:38:31
373
原创 算法导论学习笔记12_动态规划
动态规划1. 动态规划的定义1. 动态规划的定义动态规划(英语:Dynamic Programming,简称DP)常用于求解最优化问题。它与分治法相似,都是通过组合子问题的解来求解原问题。分治法(Divide and Conquer)将问题划分为互不相交的子问题,递归地求解子问题,再将它们的解组合起来,求出原问题的解。动态规划用于子问题重叠的情况,而子问题重叠的含义是不同的子问题有公共的子...
2019-04-10 15:29:46
462
原创 算法导论学习笔记10_二叉搜索树
二叉搜索树1. 二叉搜索树的定义及特点2. 二叉搜索树的建立及基本操作2.1 插入2.2 建树2.3 遍历2.4 查找2.5 删除3. 附录(代码)1. 二叉搜索树的定义及特点二叉搜索树(英语:Binary Search Tree),也称二叉查找树、有序二叉树、排序二叉树。它具有如下性质:若任意结点的左子树不为空,则左子树上所有结点的值均小于其根节点上的值。若任意结点的右子树不为空,则...
2019-04-06 17:39:04
288
原创 算法导论学习笔记9_散列表
散列表1. 散列表1. 散列表散列表(Hash Table,又称哈希表)是一种根据关键字直接访问内存存储位置的数据结构。在链表或者有根树等结构中,如果我们知道一个对象的关键字(key),我们需要与链表或者树中对象的关键字进行逐一比较,从而找到该对象的位置。散列表则不同,它通过将对象的关键字映射为一个地址,将该地址作为对象的存储地址,从而在查找对象时不需要进行关键字的比较。假设所有关键字在...
2019-04-05 20:41:37
495
原创 算法导论学习笔记8_基本数据结构
基本数据结构1. 栈和队列4.附录4.1 栈代码4.2 队列代码1. 栈和队列栈和队列是两个基本的动态集合,其中栈遵循后进先出(LIFO)的原则,队列遵循先进先出(FIFO)的原则。下图展示了元素入栈出栈的过程:下列是与栈有关的操作:stack.push() 将元素压入栈中stack.pop() 将栈顶元素弹出stack.empty() 判断栈是否为空stack.top()...
2019-04-04 11:27:46
153
原创 算法导论学习笔记7_中位数和顺序统计量
中位数和顺序统计量1. 最大最小值2. 线性时间的选择算法3. 附录3.1 最大最小值代码3.2 快速选择代码1. 最大最小值在一个nnn个元素的集合中,至少需要做n−1n-1n−1次比较才能确定其最小元素或最大元素。下面的伪代码给出了最朴素的一种方式:MINMUM(A) min = A[1] for i = 2 to A.length if min > A[i] mi...
2019-04-03 17:47:17
282
原创 算法导论学习笔记6_线性时间排序
线性时间排序 \space\space\space\space 在常见的排序算法中,插入排序的最坏情况运行时间为Θ(n2)\Theta(n^2)Θ(n2);快速排序的最坏情况运行时间虽然也为Θ(n2)\Theta(n^2)Θ(n2),但其在平均情况下的运行时间为Θ(nlgn)\Theta(n\lg ...
2019-04-03 11:28:31
318
原创 算法导论学习笔记5_快速排序
快速排序1. 快速排序1. 快速排序快速排序是一种最坏情况时间复杂度为Θ(n2)\Theta(n^2)Θ(n2)的排序算法,虽然最坏情况时间复杂度很差,但是它的平均性能非常好,其期望时间复杂度为Θ(nlgn)\Theta(n\lg n)Θ(nlgn),而且Θ(nlgn)\Theta(n\lg n)Θ(nlgn)中隐含的常数因此非常小。此外,快速排序是一种原址排序算法。与归并排序相同,...
2019-04-01 20:31:35
231
原创 算法导论学习笔记4_堆排序与优先队列
目录1. 堆的定义及性质2. 堆排序3. 优先队列1. 堆的定义及性质堆和栈是计算机科学中两种常见的数据结构,另外堆区和栈区是C++中内存分配的两个区域,需要注意它们与堆、栈两种数据结构之间的区别。二叉堆通常分为两种形式:最大堆和最小堆。在这两种堆中,结点的值要满足堆的性质(以最大堆为例):除根节点以外的所有节点iii都要满足:A[PARENT(i)]≥A[i]A[PARENT(i)]\...
2019-04-01 17:04:46
193
原创 算法导论学习笔记3_分治策略
目录1. 分治策略基本步骤1. 分治策略基本步骤分治法的基本思想是:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治法的三个步骤是:分解原问题为若干子问题,这些子问题都是原问题的规模较小的实例。解决这些子问题,递归地求解各个子问题。当子问题足够小时,直接求解子问题。合并这些子问题的解构成原问题的解。...
2019-03-28 11:03:17
646
原创 算法导论学习笔记2_渐近记号
渐近记号1. 算法运行时间2. 渐近记号渐近上界(O记号)1. 算法运行时间在分析算法的效率时,常用用时间复杂度和空间复杂度来描述其运行时间和临时占用的存储空间大小。在多数情况下,我们更加关心一个算法的时间复杂度,当我们在分析算法的效率时,大多数情况下是指的时间效率。如果一个算法的最坏情况运行时间有比另一个算法更低的增长量级,那么我们通常认为前者比后者更加有效。例如,当一个算法的运行时间随输入...
2019-03-26 21:34:05
714
原创 算法导论学习笔记1_循环不变式
循环不变式1. 循环不变式和数学归纳法2. 循环不变式的三条性质3. 利用循环不变式分析插入排序1. 循环不变式和数学归纳法在数学中,数学归纳法常用于证明给定命题在自然数范围内的正确性,它是一种严谨的演绎推理法。而在计算机科学中,循环不变式同样作为一种演绎推理法用于理解和证明算法的正确性。从下文的介绍中可以看出,循环不变式和数学归纳法有着许多的相似之处。2. 循环不变式的三条性质循环不变式...
2019-03-23 16:29:40
2547
原创 Verilog HDL 总结(1)
Verilog HDL 复习总结1. Verilog 语法的基础概念1.1 Verilog模块的基本概念1. Verilog 语法的基础概念Verilog HDL是一种硬件描述语言,其中HDL则是Hardware Description Language的缩写。因此,利用Verilog编写的程序最终会通过工具转换为具体的电路模块。此外,利用Verilog编写的模型可以是实际电路的不同级别的抽象...
2019-03-23 11:17:12
17711
2
原创 机器学习-逻辑回归识别手写数字
手写数字识别写在前面1. 数据集2.逻辑回归假设函数成本函数梯度矢量化写在前面本博客是作者在学习机器学习基础时写下的总结,学习的资源为网易云课堂上吴恩达的机器学习课程,参考资料主要为stanford cs229课程的英文讲义,有兴趣的读者可以去网上下载原版的英文讲义来看。此外,由于本人为初学者,对知识点理解有限,因此文中有任何错误非常欢迎大家指出。最后,本文涉及的所有代码的完整版均会上传到gi...
2018-12-26 21:47:18
2393
原创 机器学习-正则化
正则化写在前面1. 欠拟合与过拟合2. 正则化写在前面本博客是作者在学习机器学习基础时写下的总结,学习的资源为网易云课堂上吴恩达的机器学习课程,参考资料主要为stanford cs229课程的英文讲义,有兴趣的读者可以去网上下载原版的英文讲义来看。此外,由于本人为初学者,对知识点理解有限,因此文中有任何错误非常欢迎大家指出。最后,本文涉及的所有代码的完整版均会上传到github,欢迎大家交流。...
2018-12-24 21:52:42
187
原创 机器学习-逻辑回归
逻辑回归写在前面1. 逻辑回归模型2. 成本函数3. 梯度下降4. 逻辑回归实例分析写在前面本博客是作者在学习机器学习基础时写下的总结,学习的资源为网易云课堂上吴恩达的机器学习课程,参考资料主要为stanford cs229课程的英文讲义,有兴趣的读者可以去网上下载原版的英文讲义来看。此外,由于本人为初学者,对知识点理解有限,因此文中有任何错误非常欢迎大家指出。最后,本文涉及的所有代码的完整版...
2018-12-22 20:41:06
244
原创 Matalb基础之数值篇
Matlab之数值基础基本运算基本运算Matlab作为一个数学软件,对矩阵运算的支持是非常强大的。实际上,Matlab的英文全称就是Matrix Laboratory(矩阵实验室)。因此,我们可以把Matlab中的大多数数据都看作矩阵,一维数据看作是1×1的矩阵,行向量或者列向量可看作1×n的矩阵或n×1的矩阵。因此,实际上不需要对数值运算和矩阵运行加以区分。本文中大多数情况会默认把所有数据看...
2018-12-20 11:35:24
431
原创 机器学习-线性回归
线性回归写在前面1.监督学习与非监督学习1. 线性回归模型2. 成本函数3. 梯度下降写在前面本博客是作者在学习机器学习基础时写下的总结,学习的资源为网易云课堂上吴恩达的机器学习课程,参考资料主要为stanford cs229课程的英文讲义,有兴趣的读者可以去网上下载原版的英文讲义来看。此外,由于本人为初学者,对知识点理解有限,因此文中有任何错误非常欢迎大家指出。最后,本文涉及的所有代码的完整...
2018-12-15 14:20:42
462
原创 暴力求解法之回溯法
回溯法1. 枚举法的局限2. 回溯法1. 枚举法的局限在解决问题的时候,我们经常需要用到枚举法来枚举出所有可能的结果,然后判断枚举出的结果是否满足条件,如果满足条件则接受,不满足则拒绝。下面是一个非常经典的例子:例:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?简单的来说就是解下列方程组:{x+y+z=1005x+3y+z/3=100\begin{...
2018-11-26 11:51:16
726
原创 暴力求解法之子集生成
子集生成1. 增量构造法2. 位向量法3. 二进制法总结本文的主要内容是讨论对于特定的集合,如果生成它的所有子集问题,其中涉及到了枚举和递归的思想,我在另一片博文暴力求解法之枚举排列中具体讲解了递归的过程以及解答树相关内容,有兴趣的可以查看。当然,本文也会详细的讨论如何通过枚举和递归来求解子集的问题。1. 增量构造法增量构造法顾名思义就是逐个增加元素个数来构造子集。下面简单描述利用增量构造...
2018-11-25 14:50:03
358
1
原创 暴力求解法之枚举排列
枚举排列1. 生成{1, 2, ..., n}的排列2. 生成含重复元素的排列3. 解答树总结1. 生成{1, 2, …, n}的排列由数学公式Ann=n!A_n^n=n!Ann=n!可知,{1, 2, …, n}的排列共n!种可能,当n取3时,3!=6,而当n取6时,6!=720。下面讨论如何按字典序升序输出{1, 2, …, n}的所有排列。考虑用递归的思想,下面以n=3为例分析。大致...
2018-11-25 12:46:22
258
原创 暴力求解法之简单枚举
简单枚举枚举是暴力求解法最基本最简单的一种方法,许多问题通过枚举就能找到解。当然,暴力求解法也不是无脑求解问题,通过对问题的分析减少枚举的规模可以使得算法更加的简洁和高效。例1. 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a-j恰好为数字0-9的一个排列(可以有前导0),2≤n≤792\le n\le 792≤n≤79。分析问题可知,abcde和f...
2018-11-25 10:29:49
421
原创 数理统计之抽样分布
抽样分布特征函数三大抽样分布1. 卡方分布2. t分布3. F分布正态总体下常用统计量的分布分位数总结统计量是我们用来对总体X的分布函数或者是参数进行统计推断的基础,因此往往需要获得统计量T(x1,x2,x3)T(x_1, x_2, x_3)T(x1,x2,x3)的分布,这也是数理统计的基本问题之一。我们称统计量的分布为抽样分布。特征函数在讨论抽样分布之前,这里先介绍一个研究随机变量非...
2018-11-23 19:39:13
2043
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人