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