随笔分类 - F数据结构与算法
摘要:概念 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 哈夫曼编
阅读全文
摘要:概念 一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有 6 种:DLR、DRL、LDR、LRD、RDL、RLD。由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式: DLR--前序遍历(根在前
阅读全文
摘要:一、累加符号“∑” ∑是累加符号,是希腊字母σ的大写,读做sigma,在数学上通常表示连加,,小写σ就表示面密度(区别与体密度ρ和线密度η)。 函数的累积求和,n取[m, k]中的连续整数值,这个变量n可以换成其他任意字母,比如x。我们把下面的“n=m”和上面的“k”称作这个和式的下标。在上下文明确
阅读全文
摘要:一、图 在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。 基本概念 阶(Order):图G中点集V的大小称作图G的阶。 度(Degree):一个顶点的度是指与该顶点相关联的边的条数,顶点v的度记作d(v)。 入
阅读全文
摘要:一、算法思想 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中
阅读全文
摘要:一、B树(B-树) 特点: (1)多路,非二叉树 (2)每个节点既保存索引,又保存数据 (3)搜索时相当于二分查找 二、B+树 特点: (1)多路非二叉 (2)只有叶子节点保存数据 (3)搜索时相当于二分查找 (4)增加了相邻接点的指向指针。 三、B树与B+树的区别 1,关键字的数量不同;B+树中分
阅读全文
摘要:一、算法思想 优先队列的原理本质上就是利用完全二叉树的结构实现以log2n的时间复杂度删除队列中的最小对象(这里以小堆顶为例)。完全二叉树又可以通过数组下标实现索引,当插入一个对象的时候,利用上浮操作更新最小对象。当删除堆顶最小对象时,将末尾的对象放置到堆顶上,然后执行下沉操作。 优先队列有一个缺点
阅读全文
摘要:问题:对折纸,永远从同一个方向对折,输出对折N次后每个折痕的朝向。 算法: 1 package io.guangsoft; 2 3 import java.util.LinkedList; 4 import java.util.PriorityQueue; 5 import java.util.Qu
阅读全文
摘要:data.txt 1 8,10,211,4,128,12,5,365,9,192,7,1,3,2,6,1024,11,13,20,54 SortAlgorithm.java 1 package io.guangsoft; 2 3 import java.io.FileInputStream; 4 i
阅读全文
摘要:一、算法思想 快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 二
阅读全文
摘要:一、算法思想 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。 归并排序是用分治思想,分治模
阅读全文
摘要:一、算法思想 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随
阅读全文
摘要:1 package org.guangsoft; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.Proxy; 6 import
阅读全文
摘要:一、 满二叉树 一个深度为k,节点个数为2^k-1的二叉树为满二叉树,即一棵树深度为k,没有空位。 二、完全二叉树 一棵深度为k有n个节点的二叉树,对树中节点按从上至下、从左至右的顺序进行编号,如果编号为i(1<=i<=n)的节点与满二叉树中编号为i的节点的二叉树中位置相同,则这棵树为完全二叉树。满
阅读全文
摘要:一、 二叉查找树 二叉查找树就是以二分法思想为指导,设计出来的一种快速查找树,二叉查找树保证以下特性: 每一个节点关键字只会在树中出现一次。 任何一个节点,如果它有子节点,那么左侧的关键字一定比较小,右侧的关键字一定比较大。 基于这种结构,搜索时每次从根节点开始查找,就算找到叶子结点,也只进行了lo
阅读全文
摘要:一、数据结构中的堆与栈 在数据结构中,堆与栈为两种常见数据结构,数据结构共分为三大类:表、树、图,堆为树类数据结构,栈为表类数据结构。 堆: 堆是一种经过排序的树形数据结构。每一个结点都有一个值,像一棵倒过来的树。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大)。且根结点的
阅读全文
摘要:一、时间复杂度 在进行算法分析时,语句总的执行次数 T(n) 是关于问题的规模n 的函数,进而分析 T(n) 随 n 的变化情况并确定 T(n) 的数量级,算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f( ))。它表示随问题的规模 n 的增大,算法的执行时间的增长率 f(n) 的
阅读全文
摘要:MD5 MD5的英文全称是Message Digest Algorithm MD5,译为消息摘要算法第五版,是众多哈希算法中的一种(哈希算法是一种可以将任意长度的输入转化为固定长度输出的算法)。因此MD5算法是一种哈希算法,严格来说不能称之为一种加密算法,但是它可以达到加密的效果,因此网络中会出现“
阅读全文
摘要:科班出身的程序员就应该研究些算法和数据结构类的东西,不然,有什么优势? 堆排序,结构是完全二叉树,选择排序的一种,其流程控制和冒泡排序类似,每次选出一个最大(或最小的元素)排出去,然后下一轮再选出一个最大(最小的),以此类推,直到剩下一个不能构成二叉树为止也排出去,排出来的就是有序的了。只不过每次选
阅读全文
摘要:随着电子虚拟货币的发展,去中心化操作的流行,能够形成一套公认的算法体系成了目前研究的热点,下面介绍四中区块链共识算法(POW,POS,DPOS,PBFT) POW:Proof of Work,工作证明。 比特币在Block的生成过程中使用了POW机制,一个符合要求的Block Hash由N个前导零构
阅读全文