自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GM.

  • 博客(47)
  • 收藏
  • 关注

原创 Java数据结构学习笔记——22 哈夫曼树

哈夫曼树定义给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树又称为最优树.路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点...

2019-11-27 16:50:02 167

原创 Java数据结构学习笔记—— 21堆排序

堆排序堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值总是小于(或者大于)它的父节点。子结点的键值总是小于或等于父节点的堆为大顶堆子结点的键值总是大于或等于父节点的堆为小顶堆一般采用大顶堆做升序排序,小顶堆做降序排序,下文以升序为例,下面画个排序流程图举个简单的例子{3,7,9,6,10}总体思路:先构建大顶堆,即...

2019-11-26 17:56:05 188

转载 Java数据结构学习笔记——20 树

树定义:树是一个n(n>=0)个结点的有序合集名词理解:结点:指树中的一个元素;结点的度:指结点拥有的子树的个数,二叉树的度不大于2;数的度:指树中的最大结点度数;叶子:度为0的结点,也称为终端结点;高度:叶子节点的高度为1,根节点高度最高;层:根在第一层,以此类推;二叉树定义:由一个结点和两颗互不相交、分别称为这个根的左子树和右子树的二叉树构成(递归定义)二叉树的性...

2019-11-26 15:27:51 138

原创 设计模式学习笔记——23 桥梁模式

桥梁模式定义将抽象和实现解耦, 使得两者可以独立的变化优点:抽象和实现分离. 这是桥梁模式的主要特点, 它完全是为了解决继承的缺点而提出的设计模式. 在该模式下,实现可以不受抽象的约束,不用再绑定在一个固定的抽象层次上优秀的扩充能力.实现细节对客户透明. 客户不用关心细节的实现, 它已经由抽象层通过聚合关系完成了封装使用场景:不希望或不适用使用继承的场景. 例如继承层次过滤、...

2019-11-24 15:17:43 124

原创 设计模式学习笔记——22 享元模式

享元模式定义享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。享元模式的定义为我们提出了两个要求:细粒度和共享对象。我们知道分配太多的对象到应用程序中将有损程序的性能,同时还容易造成内存溢出,要避免这种情况,用到的就是共享技术,这里就需要提到内部状态和外部状态了。因为要求细粒度对象,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部状...

2019-11-23 17:53:53 108

原创 设计模式学习笔记——21 解释器模式

解释器模式定义给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.角色AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。TerminalExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每...

2019-11-22 19:51:29 93

原创 设计模式学习笔记——20 状态模式

状态模式定义允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式中的角色:Context上下文环境角色:负责状态的切换,持有一个内部状态对象,代表着环境当前所处的状态。State抽象状态角色:可以是一个接口或者抽象类,定义了所有具体状态的共同接口或者是说动作行为,任何具体状态都要实现这些接口。ConcreteState具体状态角色:处理来自Contex...

2019-11-21 16:28:24 117

原创 Java数据结构学习笔记—— 18 斐波那契查找

斐波那契查找斐波那契搜索就是在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于略大于查找表中元素个数的数F[n],将原查找表扩展为长度为F[n] (如果要补充元素,则补充重复最后一个元素,直到满足F[n]个元素),完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,找出要查找的元素在那一部分并递归,直到找到。算法实现要点:...

2019-11-21 14:00:59 110

原创 Java数据结构学习笔记——19 哈希表(散列)

哈希表(散列)散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(k...

2019-11-21 13:41:03 114

原创 设计模式学习笔记——19 访问者模式

访问者模式定义表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。使用场景对象结构比较稳定,但经常需要在此对象结构上定义新的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。涉及角色编辑Visitor 抽象访问者角色,为该对象结构中具体元素角色...

2019-11-20 18:52:42 87

原创 Java数据结构学习笔记—— 17 插值查找法

插值查找法插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。插值查找法与二分法的基本实现逻辑相同,只是取中间值不同,二分法是从中间取值,那么要查找的值越靠近前或尾就越慢,而插值查找法根据值所在位置选取中间值判断。具体代码实现如下:public class InsertVa...

2019-11-20 15:45:32 122

原创 设计模式学习笔记——18 备忘录模式

备忘录模式备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。优点:有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。本模式简化了发起人类。发起人不再需要管...

2019-11-19 15:00:44 115

原创 Java数据结构学习笔记——16二分查找

二分查找二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是:(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到...

2019-11-19 12:46:42 100

原创 设计模式学习笔记——17 门面模式

门面模式门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。优点:减少系统间依赖提高了灵活性:不管子系统内部如何变化,只要不影响门面对象,可以自由行动。提高了安全性:想让外界访问子系统的哪些业务就开通哪些逻辑,不在门面上开通的方法,外界就不能访问。缺点:门面模式最大缺点就是不符合开闭原则,对修改关闭,对...

2019-11-18 15:37:23 113

原创 Java数据结构学习笔记——15 基数排序

基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog®m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。...

2019-11-18 13:14:01 107

原创 设计模式学习笔记——16 观察者模式

观察者模式观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式的主要的作用就是对对象解耦,将观察者和被观察者完全隔离。优点观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽...

2019-11-17 22:11:12 110

原创 Java数据结构学习笔记——14 归并排序

归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列...

2019-11-17 17:42:57 162

原创 设计模式学习笔记——15 组合模式

组合模式定义组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 “组合对象” 的含义。组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统...

2019-11-16 16:20:17 114

转载 设计模式学习笔记——14 迭代器模式

迭代器模式定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式优点访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口...

2019-11-16 15:57:37 98

原创 Java数据结构学习笔记——13 快排

快排快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序算法通过多次比较和交换来实现排序,其排序流程如下:...

2019-11-16 14:10:28 115

原创 设计模式学习笔记——13 适配器模式

适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。优点:1.可以让任何两个没有关联的类一起运行。2.提高了类的复用。3.增加了类的透明度。4.灵活性好。缺点:1.过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出...

2019-11-15 16:52:14 88

原创 Java数据结构学习笔记—— 12 希尔排序

希尔排序希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰...

2019-11-15 14:32:52 108

原创 设计模式学习笔记——12 策略模式

策略模式策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。策略模式:定义了一组算法(业务规则);封装了每个算法;这族的算法可互换代替(interchangeable)。优点策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法...

2019-11-14 14:37:35 133

原创 Java数据结构学习笔记——11 插入排序

插入排序插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方...

2019-11-14 12:13:43 87

原创 设计模式学习笔记——11 装饰模式

装饰模式定义装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。优点Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。缺点这种比继承更加灵活机动的特性,也...

2019-11-13 13:59:56 83

原创 设计模式学习笔记——10 责任链模式

责任链模式定义责任链模式使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有对象处理它为止。优点降低耦合度。它将请求的发送者和接收者解耦简化了对象,使得对象不需要知道链的结构增强给对象指派职责的灵活性,允许动态地新增或者删除责任链增加新的请求处理类方便缺点每个请求都是将责任链从头遍历到尾,如果较长,性能有影...

2019-11-13 12:10:53 88

原创 Java数据结构学习笔记——10 选择排序

选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。下面举个例子:下面是选择排序代码实现:public class Sel...

2019-11-13 12:08:47 90

原创 Java数据结构学习笔记——09 冒泡排序及优化

冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的...

2019-11-12 16:30:56 90

原创 设计模式学习笔记——09 命令模式

命令模式概念将一系列请求封装在一个对象中, 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式是一种数据驱动的设计模式,它属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。优点:类间解耦:调用者角色与接收者角色之间没有任何依...

2019-11-11 18:44:38 91

原创 Java数据结构学习笔记——08 递归(迷宫回溯&&八皇后问题)

递归递归就是方法对自身的调用,每次调用时传递不同的变量,方便复杂问题解决迷宫回溯实现代码如下:public class labyrinth { public static void main(String[] args) { int[][] labyrinthArray = new int[8][7]; for (int i = 0; i < 7; i++) { ...

2019-11-11 15:23:18 238

原创 设计模式学习笔记——08 中介者模式

中介者模式Mediator模式也叫中介者模式,Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。MVC中的C控制器就是一个中介者,它将M业务逻辑和V视图隔离开,把M运行的结果和V代表的视图融合成一个前端可以展示的页面,减少M和V的依赖关系。优点减少...

2019-11-10 21:42:01 100

原创 Java数据结构与算法——07 逆波兰表达式计算

逆波兰逆波兰表达式又叫做后缀表达式。逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasewicz)于1929年首先提出的一种表达式的表示方法 。后来,人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。波兰即前缀表达式,逆波兰即后缀表达式,中缀表达式是最常见的即平时我们所见的表达式:下面是三种表达式样式中缀表达式:10+ (5 + ...

2019-11-09 18:58:02 165

原创 Java数据结构与算法——06栈实现与简单加减运算式计算

栈栈是一个先入后出的有序列表元素入栈和出栈在同一端,最先放入栈中的元素在栈底最后出栈,最后放入的元素在栈顶最先出栈。下面的代码完成的是一个简单的运算时运算,例如:700x2+6000/10+19的结果下面画下分析:首先计划将数字和运算符号分别存放到两个栈中,然后按顺序压入栈中,在压入运算符时需要进行判断处理,分为以下三种:1 当存放运算符的栈中没有数据时,直接将当前运算符压入栈中2 当...

2019-11-08 22:50:39 183

原创 设计模式学习笔记——07 代理模式

代理模式代理模式可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。代理模式分三种,普通代理,强制代理,动态代理普通代理下面模拟了普通代理,通过代理实例访问被代理对象package proxy;public i...

2019-11-08 11:41:59 104

原创 Java数据结构——05 约瑟夫问题打印顺序实现

约瑟夫问题打印顺序实现先介绍一下约瑟夫问题:N个人围成一圈,从第x个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。下面的实现为描述上述过程打印出圈顺序。先画个简单的流程看下出圈顺序:几个人围成一圈可以看做一个单向循环链表,先思路为采用无头结点单向循环链表代表几个人围一圈将几个人插入单向循环链表后,开始下面从x个人开始报数,数到第m个...

2019-11-07 18:53:19 347

原创 Java数据结构——04 双向链表的增删改

双向链表的增删改双链表同单链表相比多了前驱节点,相比单链表插入删除更容易,可以随时调用当前节点的前节点,但同时增加了前驱节点,增删两项与单链表有点区别,修改遍历原来的单链表方法一样适用。增加方法过程如下:删除方法:实现如下:class DoubleNode { // id和name是data域 private int id; private String name; p...

2019-11-07 16:00:31 141

原创 设计模式学习笔记——06 原型模式

原型模式这是设计模式里我觉得最简单的模式,,,定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。使用场景1 类的初始化需要消耗非常多的资源,这个资源包括数据,硬件资源等,通过原型拷贝避免这些消耗。2 通过new产生一个对象需要消耗非常繁琐的数据准备或访问权限,这时可以使用原型模式。3 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑用原型...

2019-11-06 22:05:50 90

原创 设计模式学习笔记—— 05 建造者模式

建造者模式也叫生成器模式,将一个复杂的对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。建造者模式4个角色:Product产品类通常实现了模板方法模式,也就是有模板方法和基本方法。Builder抽象构建者ConcreteBuilder具体构造者Director导演类负责安排已有模块的顺序,然后告诉Builder开始建造。使用场景相同的方法,不同的执行顺序,产生不同的事...

2019-11-05 18:24:05 127

原创 Java数据结构——03 单链表的增删改遍历

链表链表是有序的,但内存存放地址是不连续的,说它连续是指逻辑上连续,也就是每个元素知道后面是谁或者前后都知道,是按照顺序排列的。链表的每个节点包含一个data域,一个next域。链表分别带头结点的链表和不带头结点的链表。下文介绍的是带头结点的,头结点不存储数据。下面实现的是单链表:说下单链表增加元素的思路,如下图:删除元素思路:修改和遍历很简单,所以不画图了,大概就是遍历链表找...

2019-11-05 14:26:09 128

原创 设计模式学习笔记——04 模板方法模式

Template MethodTemplate Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。使用场景1 多个子类有公有的方法,且逻辑基本相同2 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则有各个子类实现。3 重构时模板方法模式是一个经常使用的模式,把相...

2019-11-04 19:38:55 96

空空如也

空空如也

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

TA关注的人

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