自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 工具清单 - CI & CD

【代码】工具清单 - CI & CD。

2024-06-18 23:20:18 812

原创 工具清单 - Bug追踪管理

【代码】工具清单 - Bug追踪管理。

2024-06-18 23:01:00 1683

原创 工具清单 - 看板工具

【代码】工具清单 - 看板工具。

2024-06-17 22:05:43 600

原创 工具清单 - IDE工具

【代码】工具清单 - IDE工具。

2024-06-17 22:04:47 566

原创 工具清单 - 项目管理

【代码】工具清单 - 项目管理。

2024-06-16 20:48:18 962

原创 字符串匹配 - 模式预处理:朴素算法(Naive)(暴力破解)

没有预处理阶段;滑动窗口总是后移 1 位;对模式中的字符的比较顺序不限定,可以从前到后,也可以从后到前;匹配阶段需要 O((n - m + 1)m) 的时间复杂度;需要 2n 次的字符比较;很显然,朴素的字符串匹配算法 NAIVE-STRING-MATCHER 是最原始的算法,它通过使用循环来检查是否在范围 n-m+1 中存在满足条件 P[1..m] = T [s + 1..s + m] 的有效位移 s。

2024-06-16 20:06:43 324

原创 大数据处理 - 双层桶划分

其实本质上还是分而治之的思想,重在“分”的技巧上!适用范围: 第k大,中位数,不重复或重复的数字基本原理及要点: 因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。

2024-06-15 19:48:35 366

原创 大数据处理 - 分治/hash/排序

分而治之/hash映射: 针对数据太大,内存受限,只能是: 把大文件化成(取模映射)小文件,即16字方针: 大而化小,各个击破,缩小规模,逐个解决hash_map统计: 当大文件转化了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行频率统计。堆/快速排序: 统计完了之后,便进行排序(可采取堆排序),得到次数最多的IP。

2024-06-15 19:32:51 1127

原创 安全算法 - 加密算法

加密技术包括两个元素: 加密算法和密钥。加密算法是将普通的文本(或者可以理解的信息)与一串数字(密钥)的结合,产生不可理解的密文的步骤。密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。

2024-06-14 21:36:10 632

原创 安全算法 - 摘要算法

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体无论输入的消息有多长,计算出来的消息摘要的长度总是固定的消息摘要看起来是“伪随机的”。也就是说对相同的信息求摘要结果相同消息轻微改变生成的摘要变化会很大。

2024-06-14 18:04:34 727

原创 算法 - 搜索算法

每一层遍历的节点都与根节点距离相同。设 di 表示第 i 个节点与根节点的距离,推导出一个结论: 对于先遍历的节点 i 与后遍历的节点 j,有 di

2024-06-13 19:23:50 1283

原创 算法 - 二分法

本文主要介绍算法思想中分治算法重要的二分法,比如二分查找;二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

2024-06-13 19:22:01 605

原创 回溯算法DFS

Backtracking(回溯)属于 DFS, 本文主要介绍算法中Backtracking算法的思想。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。

2024-06-12 19:49:20 1395

原创 - 贪心算法

保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。

2024-06-12 19:30:16 886

原创 动态规划算法

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。动态规划算法在算法思想中是极为重要的,需要重点掌握。

2024-06-11 23:03:22 1074

原创 【排序 - 基数排序(Radix Sort)】

将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

2024-06-11 23:02:36 356

原创 【排序 - 桶排序(Bucket Sort)】

假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。

2024-06-10 14:24:38 508

原创 排序 - 归并排序(Merge Sort)

将待排序的数列分成若干个长度为1的子数列,然后将这些数列两两合并;得到若干个长度为2的有序数列,再将这些数列两两合并

2024-06-10 00:12:39 754

原创 【排序 - 堆排序(Heap Sort)】

最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行详细说明。最大堆进行升序排序的基本思想: ① 初始化堆: 将数列a[1...n]构造成最大堆。

2024-06-09 19:32:16 593

原创 排序 - 选择排序(Selection sort)

首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2024-06-09 19:27:16 475

原创 【排序 - Shell排序(Shell Sort)】

希尔排序实质上是一种分组插入方法。它的基本思想是: 对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。

2024-06-08 16:56:11 722

原创 排序 - 插入排序(Insertion Sort)

直接插入排序(Straight Insertion Sort)的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

2024-06-08 16:48:44 358

原创 排序 - 快速排序(Quick Sort)

选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

2024-06-07 20:52:14 987

原创 排序 - 冒泡排序(Bubble Sort)

它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾!采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!

2024-06-07 20:50:40 395

原创 图 - AOE & 关键路径

关键路径在项目管理计算工期等方面有广泛等应用,提升工期就是所见缩减所有关键路径上的工期,并且在实现时需要应用到之前拓扑排序的算法(前提: 有向无环图,有依赖关系)。

2024-06-06 22:21:17 372

原创 图 - 拓扑排序(Topological sort)

对于任何有向图而言,其拓扑排序为其所有结点的一个线性排序(对于同一个有向图而言可能存在多个这样的结点排序)。该排序满足这样的条件——对于图中的任意两个结点u和v,若存在一条有向边从u指向v,则在拓扑排序中u一定出现在v前面。结点1必须在结点2、3之前结点2必须在结点3、4之前结点3必须在结点4、5之前结点4必须在结点5之前则一个满足条件的拓扑排序为[1, 2, 3, 4, 5]。

2024-06-06 22:18:48 963

原创 【图 - 最短路径(Dijkstra & Frolyd)】

所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。即,prev[i]的值是"顶点vs"到"顶点i"的最短路径所经历的全部顶点中,位于"顶点i"之前的那个顶点。

2024-06-05 20:31:22 904

原创 【图 - 最小生成树(Prim & Kruskal)】Kruskal算法是从最小权重边着手,prim算法是从顶点出发

因为Kruskal涉及大量对边的操作,所以它适用于稀疏图;普通的prim算法适用于稠密图,但堆优化的prim算法更适用于稀疏图,因为其时间复杂度是由边的数量决定的。

2024-06-05 20:30:42 355

原创 【图 - 遍历(BFS & DFS)】深度优先搜索算法(Depth First Search), 广度优先搜索算法(Breadth First Search)

假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。显然,深度优先搜索是一个递归的过程。广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS。

2024-06-04 20:25:23 1614

原创 【树 - 前缀树(Trie Tree)】Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作/ˈtriː/ “tree”。

2024-06-04 19:57:51 647

原创 【树 - 平衡二叉树(AVL)】F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点,F(n-1)

AVL树是高度平衡的二叉树。它的特点是: AVL树中任何节点的两个子树的高度最大差别为1。上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都

2024-06-03 21:05:37 897

原创 【树 - 哈夫曼树(Huffman Tree)】

哈夫曼又称最优二叉树, 是一种带权路径长度最短的二叉树。

2024-06-03 21:04:16 1367

原创 【树 - 二叉搜索树(BST)】(遍历、查找、插入、删除、打印、销毁)

若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树。没有键值相等的节点。

2024-06-02 16:09:57 976

原创 【线性表 - 栈和队列】线性存储结构的应用

数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用。

2024-06-02 15:46:10 349

原创 【散列表(Hash table,哈希表)】根据关键码值(Key value)而直接进行访问的数据结构

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

2024-06-01 16:43:28 322

原创 【线性表 - 链表(优缺点、分类、实现)】n个节点离散分配,彼此通过指针相连

n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。确定一个链表我们只需要头指针,通过头指针就可以把整个链表都能推出来。@pdai。

2024-06-01 16:41:22 954

原创 【​图解 Git​】

衍合在当前分支上重演另一个分支的历史,提交历史是线性的。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,git会从指定的提交中拷贝文件到暂存区域和工作目录。提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。标识会移动到那个分支(也就是说,我们"切换"到那个分支了),然后暂存区域和工作目录中的内容会和。然而,当提交操作涉及到"分离的HEAD"时,其行为会略有不同,详情见在下面。

2024-05-31 18:39:23 642

原创 【线性表 - 数组和矩阵】

数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变。

2024-05-31 18:28:51 1228

原创 ASCII 表

ASCII(发音:,American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。ASCII 由电报码发展而来。第一版标准发布于1963年 ,1967年经历了一次主要修订[5][6],最后一次更新则是在1986年,至今为止共定义了128个字符;

2024-05-30 14:30:56 156

原创 C 语言关于sizeof() 和 strlen()区别

需要注意的是,strlen() 函数只能用于计算以空字符 '\0' 结尾的字符串的长度,如果字符串中没有空字符,则 strlen() 函数的行为是未定义的。sizeof() 和 strlen() 在 C 语言中两个非常常用,它们都与计算内存大小有关,但是它们的作用是不同的。其中 string 是一个以空字符 '\0' 结尾的字符串,但是计算字符串的长度,不包含末尾的 '\0'。strlen() 函数用于计算一个字符串的长度,即它所包含的字符个数(不包括字符串结尾的空字符 '\0')。

2024-05-30 14:17:16 447

空空如也

空空如也

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

TA关注的人

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