算法
文章平均质量分 77
~Rookie~Newbie~Noob~
这个作者很懒,什么都没留下…
展开
-
数据结构常用算法
分治算法分治算法介绍分治法时一种很重要的算法。字面上的解释就是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。分治算法可以求解的一些经典问题:二分搜索、大整数乘法、棋盘覆盖、归并排序、快速排序、线性时间选择、最近点对、循环赛日程表、汉诺塔。分治算法基本步骤分解:将原问题分解成若干个规模较小,相互独立、与原问题形式相同的子问题。解决:若子问题规模较小而容器被解决则直接解决掉,否则原创 2021-09-08 13:09:10 · 347 阅读 · 0 评论 -
数据结构之图
图的基本介绍为什么要有图线性表局限于一个直接前驱和一个直接后继的关系。树也只能有一个直接前驱(父节点)当我们需要表示多对对的关系时,我们就需要用到图。常用的概念顶点边路径无向图有向图带权图图的表示方式图有两种表示方式:二维数组表示(邻接矩阵);链表表示(邻接表)。邻接矩阵邻接矩阵时表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵式row和col表示的1~n个点。邻接表邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在的,会造成空间的原创 2021-09-04 23:14:34 · 80 阅读 · 0 评论 -
数据结构与算法之树(三)
二叉树的问题分析二叉树的操作效率高,但是也存在问题。二叉树需要加载到内存的。如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多,就存在问题。问题一:在构建二叉树时,需要多次进行I/O操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响。问题二:节点海量,也会造成二叉树的高度很大,会降低操作速度。多叉树在二叉树中,每个节点数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的节点,就是多叉树。2-3树、2-3-4树就是多叉树,多叉树通过重新组织节点原创 2021-09-04 11:46:38 · 105 阅读 · 0 评论 -
数据结构与算法之树(二)
二叉排序树数组的缺点未排序的数组,查找速度慢。排序的数组,二分查找,速度快。但是插入新数据时候,为了保证有序,需要将数据插入到特定位置,需要移动元素,速度慢。链式存储 - 链表的缺点不管是否有序,查找速度都比较慢。基本介绍二叉排序树:BST(Binary Sort Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。二叉排序树的节点的添加和遍历public class B原创 2021-09-03 22:34:08 · 250 阅读 · 2 评论 -
赫夫曼编码
基本介绍赫夫曼编码也翻译为哈夫曼编码,又称霍夫曼编码,是一种编码方式,属于一种程序算法。赫夫曼编码广泛应用于数据文件压缩。其压缩率通常在20%~90%之间。赫夫曼码是可变字长编码的一种。原理剖析定长编码 - 浪费存储空间变长编码 - 要求所有字符的编码都不能是其它字符的前缀霍夫曼编码如:i like like like java do you like a java统计各个字符出现的次数。d:1 y:1 u:1 j:2 v:2 o:2 l:4 k:4 e:4 i:5 a:5 :原创 2021-09-02 20:16:17 · 224 阅读 · 0 评论 -
数据结构与算法之树(一)
二叉树为什么需要树这种数据结构数组存储方式分析优点:通过下标方式访问元素,速度快。对于有序数组,还可以使用二分查找提高检索速度。缺点:如果要插入值(按一定顺序)会整体移动,效率低。链式存储方式分析优点:在一定程度上对数组存储方式有优化(比如,插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺点:在进行检索时,效率仍然较低(比如,检索某个值,需要从头节点开始遍历)。树存储方式分析能提高数据存储、读取的效率。比如利用 二叉排序树,既可以保证数据的检索速度,同时也原创 2021-09-01 22:00:25 · 98 阅读 · 0 评论 -
数据结构与算法之查找和哈希
常用的四种查找算法顺序(线性)查找二分查找(折半查找)插值查找斐波那契查找查找算法实现顺序查找public class SeqSearch { public static void main(String[] args) { int arr[] = {1, 3 ,5, 88, 11, 2, -45}; int index = seqSearch(arr, 11); if (index == -1) { Sys原创 2021-08-30 21:18:09 · 115 阅读 · 0 评论 -
数据结构之排序
排序的介绍排序也称排序算法,排序是将一组数据,依指定的顺序进行排列的过程。排序的分类内部排序:指需要处理的所有数据都加载到内存存储器中进行排序。外部排序:由于数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。算法的时间复杂度时间频度一个算法花费的时间与算法中语句的执行次数成正比,哪个算法中语句执行次数多,它花费的时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。随着n的变大,可以忽略:常数项可以忽略。如 T(n) = 2n + 20 和 T(n) =原创 2021-08-30 14:39:28 · 249 阅读 · 0 评论 -
数据结构之稀疏数组
稀疏数组基本介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可用使用稀疏数组来保存该数组稀疏数组的处理方法:记录数组中一共有几行几列,有多少个不同的值。把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小程序的规模。{000220015011000170000−6000000003909100000000280000}(稀疏矩阵) \left\{ \begin{matrix} 0 & 0 & 0 & 22 & 0 & 0原创 2021-08-26 08:26:33 · 66 阅读 · 0 评论 -
数据结构之队列
队列基本介绍队列是一个有序列表,可以用数组或是链表来实现遵循先入先出原则。即:先入队的数据要先取出。后入队列的数据后取出。数组模拟队列数据结构定义队列长度 MaxSize队头指针 front队尾指针 rear代码实现队列操作队列数据结构class ArrayQueue { private int maxSize; private int front; // 队头指针 private int rear; // 队尾指针 private i原创 2021-08-26 11:14:18 · 140 阅读 · 0 评论 -
数据结构之单链表(增删改查,链表反转,链表逆序遍历,链表合并)
单链表单链表介绍链表是以节点的方式存储的。每个节点包含data域和next域链表的各个节点之间并不是连续的链表分为带头节点的链表和不带头节点的链表单链表的基本操作链表节点的数据结构class HeroNode { public int no; public String name; public String nickname; public HeroNode next; public HeroNode(int no, String nam原创 2021-08-26 20:57:07 · 137 阅读 · 0 评论 -
数据结构之双向链表与单向环形链表
双向链表双向链表数据结构class Node { public int no; public String name; public String nickname; public Node next; // 指向后一个节点的指针 public Node pre; // 指向前一个节点的指针 public Node(int no, String name, String nickname) { this.no = no;原创 2021-08-26 23:21:05 · 79 阅读 · 0 评论 -
数据结构之栈
栈的介绍栈是一种先入先出的有序列表栈是限制线性表中的元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶。另一端为固定的一端,称为栈底。栈的应用场景表达式转换【中缀表达式转后缀表达式】与求值二叉树的遍历图的深度优先搜索数组模拟栈的操作public class ArrayStackDemo { public static void main(String[] args) { ArrayStack arrayS原创 2021-08-27 19:14:29 · 64 阅读 · 0 评论 -
数据结构之栈 - 前缀表达式、中缀表达式、后缀表达式
中缀表达式我们经常看到的表达式,入 (2+3)*2+4这样的表达式,就称为中缀表达式。中缀表达式,对读者来说,很好理解。但是计算机运算时候,需要判断括号和各种运算符的优先级,就比较难以处理。前缀表达式前缀表达式又称为波兰式,前缀表达式的运算位于操作数之前。...原创 2021-08-27 22:45:42 · 2009 阅读 · 0 评论 -
数据结构与算法之递归
什么是递归?递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归需要遵守的重要规则执行一个方法时,就创建一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响递归必须向退出递归的条件逼近,否则就是无限递归了当一个方法执行完毕,或者遇到return,就会返回。遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。迷宫问题代码实现:public class MiGong { pu原创 2021-08-29 15:05:04 · 168 阅读 · 0 评论