- 博客(49)
- 收藏
- 关注
原创 程序员常用的10种算法
1)前面我们讲过二分查找算法,是使用递归方式,下面我们讲解二分查找算法的非递归方式2)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找3)二分查找法的运行时间为对数时间O(log2N),即查找到需要的目标位置最多只需要log2N步,假设从[0,99]的队列(100个数,即n=100)中寻找到目标数30,则需要查找步数为log2 100,即最多查找7次。代码实现。
2024-08-23 18:07:48 295
原创 数据结构与算法——图
1)前面我们学习了线性表和树2)线性表局限于一个直接前驱和一个直接后继的关系3)树也只能有一个直接前驱就是父节点4)当我们需要表示多对多的关系时,这里我们就用到了图图是一种,其中节点可以具有零个或多个相邻元素。两个节点之间的链接称为边。节点也可以称为顶点。
2024-08-21 19:12:09 213
原创 数据结构与算法——多叉树
1)二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿),就存在如下问题:2)问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响3)问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度。
2024-08-20 14:41:36 317
原创 数据结构与算法——平衡二叉树
1)平衡二叉树又叫平衡二叉搜索树(Self-balanceing binary search tree),又被称为AVL树,可以。2)具有以下特点:它是一颗空树或它的左右两颗子树的高度差绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用的实现方法有。
2024-08-19 17:20:12 333
原创 数据结构与算法——二叉排序树
二叉排序树:BST:(Binary Sort(Search) Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。**特别说明:**如果有相同的值,可以将该节点放在左子节点或右子节点。
2024-08-16 11:19:03 113
原创 数据结构与算法——赫夫曼编码
(1)赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式。属于一种程序算法。赫夫曼编码是赫夫曼树在电信通讯中经典的应用之一。(2)赫夫曼编码被广泛地应用于数据文件压缩。其压缩率通常在20%~90%之间。(3)赫夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方式,称为最佳编码。
2024-07-26 10:34:47 561
原创 数据结构与算法——赫夫曼树
1) 路径和路径长度 : 在 一 棵 树 中,从一个结点 往下可以达到的孩子或孙子结之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度 L - 1。2) 结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。节点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的乘积。
2024-07-23 17:14:24 408
原创 数据结构与算法——堆排序
1)堆排序是利用堆这种数据结构而设计的一种排序算法,对排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个节点的值都大于等于其左右孩子节点的值,称为大顶堆,:没有要求节点的左孩子节点大于右孩子节点的值。3) 每个节点的值都小于或等于其左右孩子节点的值。称为小顶堆。// i 对应第几个节点,i从0开始编号// i 对应第几个节点,i从0开始编号。
2024-07-23 14:41:02 177
原创 数据结构与算法——线索二叉树
1)n个结点的二叉链表中含有n+1 【公式2n - (n-1) = n + 1】个空指针域。利用二叉链表中的空指针域,存放指向该节点在某种遍历次序下的前驱和后继节点的指针(这种附加的指针称为线索)2)这种加上了线索的二叉链表称为,响应的二叉树称为。根据线索性质的不同,线索二叉树可分为和。3)一个节点的前一个节点,称为前驱节点4)一个节点的后一个节点,称为后继节点1)left 指向的是左子树,也可能指向的是前驱节点2)right指向的是右子树,也可能指向的是后驱节点。
2024-07-23 14:38:13 278
原创 数据结构与算法——顺序存储二叉树
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转化为树,树也可以转化为数组。1)上图的二叉树的节点,要求以数组的方式存放 arr: [1,2,3,4,5,6]2)要求在遍历数组arr时,仍然可以以前序遍历、中序遍历、后序遍历的方式完成节点的遍历。
2024-07-23 14:35:17 291
原创 数据结构与算法——查找算法
1、原理介绍:插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。2、将折半查找中的求mid索引的公式,low表示左边索引left,high表示右边索引right,key就是我们前面讲的findValue插值索引对应前面的公式:4、举例说明插值查找算法1-100数组代码实现i < 100;i++) {// 编写插值算法 也要求数组是有序的。
2024-07-19 17:21:10 892
原创 数据结构与算法——排序算法
插入排序属于内部式排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。希尔排序是希尔 (Donald shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序。它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。快速排序(quickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行。
2024-07-19 17:17:54 1041
原创 排序算法与复杂度介绍
基本介绍1、类似于时间复杂度的讨论,一个算法的空间复杂度(space complexity) 定义为该算法所耗费的存储空间,它也是问题规模n的函数。2、空间复杂度(space complexity) 是对一个算法在运行过程中临时占用存储空间大小的度量。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如快速排序和归并排序算法就属于这种情况。3、在做算法分析时,主要讨论的是时间复杂度。从用户体验上看,更看重程序运行的速度。
2024-07-19 17:11:32 1011
原创 数据结构——栈
1、栈的英文为stack2、栈是先入后出(FILO-First In Last Out)的有序列表。3、栈stack是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶 (Top),另一端固定的一端,称为栈底(Bottom)。4、根据栈的定义可知,最先放入栈中的元素在栈底,最后放入栈中的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。
2024-07-19 17:08:05 501
原创 数据结构——链表
所以前面我们删除节点时,总会找到temp,temp是待删除节点的前一个节点,2、后面当我们没创建一个新的节点,就把该节点加入到已有的环形链表中即可。单向链表,查找的方向只能是一个方向,而双向链表可以向前或向后查找。单向链表,不能自我删除,需要靠辅助节点,。1、先让一个辅助指针(变量)curBoy,指向first节点。双向链表的遍历、添加、修改、删除操作思路 ==》 代码实现。1、先创建第一个节点,让first指向该节点,并形成环。构建一个单向的环形链表思路。
2024-07-19 17:06:28 740
原创 数据结构——队列
2)若尾针指针rear 小于队列的最大下标 maxSize - 1,则将数据存入rear 所指的数组元素中,否则无法存入数据。队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列最大的容量。1)将尾针指针往后移动: rear + 1, 当front = = rear 【空】对前面的数组模拟队列的优化,充分利用数组,因此将数组看成是 一个环形的。2)将这个数组使用算法,改进成一个环形的队列 取模: %1)目前数组使用一次就不能使用,没有达到复用的效果。
2024-07-19 17:04:34 299
原创 Spring
官网:https://spring.io/projects/spring-framwork#overview官方下载地址:http://repo.spring.io/release/org/springframwork/spring
2023-12-13 11:03:45 376
原创 Docker
一、Docker学习Docker概述Docker安装Docker命令镜像命令容器命令操作命令。。。Docker镜像容器数据卷DockerFileDocker网络原理IDEA整合DockerDocker ComposeDocker SwarmCI/CD Jenkins二、Docker概述
2023-11-20 10:33:17 39
原创 Swagger学习笔记
直接运行,可以在线测试Api接口;支持多种语言:(Java, Php…)官网: https://swagger.io/在项目使用swagger需要Springbox;
2023-09-18 18:02:54 42
原创 Java注解和反射
使用@interface自定义注解时,自动继承了java.lang.Annotation接口分析@interface 用来声明一个注解,格式:public @interface 注解名{ 定义内容 }其中的每一个方法实际上是声明了一个配置参数方法的名称就是参数的名称返回值类型就是参数的类型(返回值只能是基本类型 Class、String、enum)可以通过default来声明参数的默认值如果只有一个参数成员,一般参数名为value。
2023-09-14 17:59:26 46
原创 Ajax学习
传统的网页(即不用Ajax技术的网页),想要更新内容或者提交一个表单,都需要重新加载整个网页。使用Ajax技术的网页,通过在后台服务器进行少量的数据交换就可以实现异步局部更新。纯JS实现Ajax我们不去讲解这里,直接使用jQuery提供的,更方便学习,避免重复造轮子,有兴趣的同学可以了解下本质XMLHttpRequest!删除数据时,将行id发送到后台,后台数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
2023-09-07 16:57:49 35
原创 JSON学习
采用完全独立于编程语言的文本格式来存储和表示数据。易于人的阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON(JavaScript Object Notation,js对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。JSON是Js对象的字符串表达法,它使用文本表示一个Js对象的信息,本质是一个字符串。要实现从JS对象转换为JSON字符串,使用JSON.stringify()方法。要实现从JSON字符串转换为JS对象,使用JSON.parse()方法。JSON和JS对象的转换。
2023-09-07 13:34:39 94 1
原创 Java 异常
简单分类检查异常:最具代表性的检查性异常是用户错误或者问题引起的异常,这种是程序员无法预见的。例如打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略。运行时异常:运行时异常是可能被程序员避免的异常。与检查异常相反,运行时异常可以在编译时被忽略。错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽视。例如,当栈溢出时,一个错误就发生了,它在编译时也检查不到。异常体系结构Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所
2023-09-05 17:43:44 118 1
原创 Java抽象类、接口、内部类
abstract可以用来修饰方法也可以修饰类,修饰方法时该方法为抽象方法,修饰类时该类为抽象类。子类继承抽象类,那么就必须实现抽象类没有实现的抽象方法,否则该类也要声明为抽象类。抽象方法,只有方法的声明,没有方法的实现,他是用来让子类实现的。抽象类不能使用new关键字来创建对象,它是用来让子类继承的。抽象类中可以没有抽象方法,但是抽象方法的类一定是抽象类。
2023-08-29 16:58:39 76 1
原创 Java 封装、继承、多态
该露的露,该藏的藏封装(数据的隐藏)记住这句话就够了: 属性私有 get/setsuper注意点Vs this重写需要有继承关系,子类重写父类的方法。重写子类的方法和父类的必须要一致,方法体不同。重写为什么要重写即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。一个对象的实际类型的确定的,但是可以指向对象的引用的类型有很多多态存在的条件多态的注意事项:
2023-08-28 17:49:15 39 1
原创 Java 面向对象 面向过程
对于描述复杂的事物,为了从宏观上把控,从整体上合理分析,我们需要使用面向对象的思想来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思维去处理。从认识论角度考虑是先有对象后有类。对象,是具体的事物,类是抽象的,是对对象的抽象。面向对象编程(Object-Oriented Programming,OOP)面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。从代码运行角度考虑是先有类后有对象,类是对象的模板。面向对象 && 面向过程。
2023-08-25 16:53:53 30 1
原创 java 数组四个特点
其长度是确定的,数组一旦被创建,它的大小就是不可以改变的其元素必须是相同类型,不允许出现混合类型数组中的元素可以是任何数据类型,包括基本类型和引用类型数组变量属于引用类型,数组也可以看成是对象,数组中每个元素相当于该对象的成员变量数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组本身也是在堆中。数组长度是确定的,不可改变。如果越界,则报:ArraysIndexOutOfBounds
2023-08-23 18:07:29 49
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人