
数据结构与算法
afgawrg
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法Java(一) 数组与链表
一、 数组定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。特点:支持随机访问,根据下标随机访问的时间复杂度为O(1);插入删除操作的平均时间复杂度为O(n)。注意点:警惕数组的访问越界问题,在java中,会做越界检查,越界时会报java.lang.ArrayIndexOutOfBoundsExceptionArrayList与数组...原创 2019-03-23 16:52:44 · 244 阅读 · 0 评论 -
数据结构与算法(九)红黑树
1、平衡二叉树(AVL):指二叉树中任意一个节点的左右子树的高度相差不能大于1 2、红黑树:近似平衡,高度近似为节点要么为红色,要么为黑色。同时,必须满足如下要求根节点是黑色的 每个叶子节点都是黑色的空节点(NIL),即叶子节点不保存数据 任何相邻的节点不能同时为红色,即红色节点是被黑色节点隔开的 每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色...原创 2019-03-28 19:54:30 · 172 阅读 · 0 评论 -
数据结构与算法java(八):二叉树基础(下)增加删除查找操作
一、二叉查找树二叉查找树也叫二叉搜索树,支持动态数据集合的快速插入,删除,查找操作。要求在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值平衡二叉树的插入、删除、查找操作时间复杂度是O(logn)二、查找操作:在二叉树中查找一个节点,我们先取根节点,如果他等于我们要找的数据,就返回;如果要查找的数据比根节点小,在左子树递归查找;...原创 2019-03-23 18:37:34 · 422 阅读 · 0 评论 -
数据结构与算法Java(七):二叉树基础(上)
一、树相关节点关系:A是B的父节点;B是A的子节点;BCD是兄弟节点;E是根节点;没有子节点的节点叫做叶子节点或叶节点,如GHIJKL节点的高度(从下往上)= 节点到叶子节点的最长路径(边数)节点的深度(从上往下)= 根节点到这个节点所经历的边的个数节点的层数= 节点的深度 + 1树的高度= 根节点的高度二、二叉树1、满二叉树:叶子节点全都在最底层,除叶子结...原创 2019-03-23 18:30:28 · 186 阅读 · 0 评论 -
数据结构与算法Java(六):哈希算法
一、定义:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射规则就是哈希算法二、设计要求:从哈希值不能反推出原始数据 对输入数据非常敏感,数据修改后的哈希值与原来大不相同 散列冲突的概率要尽可能小 执行效率要尽可能高三、应用:安全加密:常用的加密算法有MD5和SHA,DES,AES 唯一标识:搜索时可通过唯一标识加快速度,比如可以从图片的二进制码串开头,中间,末尾...原创 2019-03-23 18:10:32 · 248 阅读 · 0 评论 -
数据结构与算法Java(五):散列表(哈希表)与HashMap底层实现(面试题)
一、概述散列表是数组的一种扩展,用的是数组支持随机访问数据的特性,key-value的形式散列冲突:指不同key,产生了相同的value解决方法:1)开放寻址法:当散列冲突发生时,重新探测一个空闲的位置,将其插入。一般是在数据量比较小,装载因子小时采用。用装载因子表示空位的多少:散列表的装载因子 = 填入表中的元素个数 / 散列表的长度线性探测的方式(从当前位置出发,依次往后查找)...原创 2019-03-23 18:06:34 · 476 阅读 · 0 评论 -
数据结构与算法Java(四)跳表
1、定义:链表加多级索引的结构,提高查找效率,类似于二分查找时间复杂度:查询,插入,删除都是O(logn)空间复杂度:O(n)图解:2、问题:插入数据过多时,可能出现某2个索引结点之间的数据非常多,极端情况下,跳表会退化成单链表跳表的解决方式是通过随机函数来维护平衡性。比如随机函数生成了值K,那我们就将这个节点添加到第一级到第k级索引中3、思考题:为什么Redis要...原创 2019-03-23 18:01:57 · 786 阅读 · 0 评论 -
数据结构与算法Java(三) 二分查找
1、定义:二分查找针对的是一个有序的数据集合,查找思想类似于分治思想,每次都通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0.时间复杂度:O(logn)例如查找19这个元素2、实现方式:(1)循环实现(最简单的情况:有序数组中不存在重复元素)public int bsearch(int[] a, int n, int ...原创 2019-03-23 17:55:53 · 193 阅读 · 0 评论 -
数据结构与算法Java(二)栈和队列
先用一张图片概览栈和队列一、栈1、特点:先进后出,后进先出;只允许在一端插入和删除入栈push(),出栈pop()操作的空间复杂度是O(1);时间复杂度是O(1)2、实现方式:用链表实现--链式栈;用数组实现--顺序栈// 基于数组实现的顺序栈public class ArrayStack { private String[] items; // 数组 pr...原创 2019-03-23 17:04:45 · 183 阅读 · 0 评论 -
数据结构与算法Java(十)深度优先(DFS)广度优先(BFS)
一、广度优先搜索(BFS) 先查找离起始顶点最近的,然后是次近的,一次往外搜索时间复杂度:O(边的个数)空间复杂度:O(顶点的个数)public void bfs(int s, int t) { //s表示起始顶点;t表示终止顶点 if (s == t) return;//visited用来记录已经被访问的顶点,用来避免顶点被重复访问 boolean...原创 2019-03-28 19:59:39 · 275 阅读 · 0 评论