DS
EnndmeRedis
樊
展开
-
DS-BTree
B树在大量数据存储中,不能将所有的数据都加载到内存,只能逐部加载节点,会发生磁盘IO,为了减少IO,使用平衡多路查找树,让每个节点承载更多的元素,用于更多的孩子,降低树高度;规则对于一个k阶b树若根节点不是叶子结点,则至少有两颗子树处根节点和叶子结点外,结点至少有ceil(m/2)颗子树所有的叶子结点都在同一层(最后一层)每个叶子结点都包含k-1个元素 ceil(m/2)<= k <=m)k个孩子的非叶子结点包含k-1个元素每个节点元素从小到大排列,节点当中k-1个元素原创 2022-04-23 11:22:50 · 599 阅读 · 2 评论 -
DS-Trie树
目录Trie结构构建删除操作Trie又称前缀树或字典树,主要对字符串的存储查询值不是直接保存在节点中,而是由节点在树中的位置决定利用字符串的公共前缀来减少查询时间时间复杂度和存储元素个数无关,与查询单词的长度有关 O(w)结构构建/** * Trie树 对字符串的存储查询 * * @author Deevan */public class MyTrie { /** * 构建节点 */ private static class Nod原创 2022-02-09 21:03:45 · 410 阅读 · 1 评论 -
DS-线段树
目录结构时间复杂度分析构建结构区间求和问题区间最值问题时间复杂度分析数组更新和查询的时间复杂度都为 O(n)线段树为 O(logn)构建线段树是平衡二叉树,因为区间每次一分为二,叶子结点间高度差最大为一给定一个数组arr,获线段树的高度:叶子结点的个数大于 待求区间 的长度生成线段树的节点个数最多为:2^h -1生成线段树/** * 融合器接口:整合两数据 */public interface Merger<T> { T marg原创 2022-02-09 19:48:20 · 113 阅读 · 1 评论 -
DS-最大堆和优先队列
目录最大堆堆概念完全二叉树满二叉树最大堆概念时间复杂度分析最大堆实现优先队列最大堆堆概念是一棵完全二叉树父亲节点的优先级高于或低于左右孩子的优先级完全二叉树按照树的结构,从左到右依次排列满二叉树除叶子结点外所有的节点都有左右子树叶子结点都在最后一层第N层节点的个数:2^(N-1)叶子结点个数:2^(h-1) h为高度非叶子结点个数:2^(h-1) -1总节点个数:2^h -1最大堆概念根节点索引为0,没有父亲节点一个索引为 i 的节点的父亲节点的原创 2022-02-08 22:00:03 · 285 阅读 · 1 评论 -
DS-Map
目录接口定义使用链表实现底层链表定义LinkedMap使用二分搜索树实现底层二分搜索树定义BSMap接口定义/** * 定义Map接口 * * @author Deevan */public interface SelfMap<K, V> { boolean isEmpty(); int getSize(); boolean containsKey(K k); void add(K k, V v); void remove(K k)原创 2022-02-07 22:20:30 · 557 阅读 · 1 评论 -
DS-Set
定义接口public interface SelfSet<T> { void add(T t); void remove(T t); boolean isContains(T t); int size(); boolean isEmpty(); /** * 将set元素放入list中 */ List<T> dataList();}数组实现底层使用数组作为容器: DS-数组/** *原创 2022-02-01 21:42:32 · 397 阅读 · 1 评论 -
数组排序算法
目录冒泡排序选择排序插入排序快速排序归并排序希尔排序桶排序基数排序冒泡排序比较相邻的两个数,把较大的往后排每内循环一次将两个数较大的排在后面每外循环一次将未排序的最大的数排在最后for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { int temp = array[j];原创 2022-01-28 14:51:19 · 2030 阅读 · 1 评论 -
DS-二分搜索树
结构二分搜索树也叫二分查找树是在二叉树上做限制:左孩子小于当前节点的值,右孩子大于当前节点的值MyBinarySearchTreepackage BinarySearchTree;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Queue;/** * 二分搜索树 */public class BinarySearch<T exte原创 2021-11-13 21:18:10 · 302 阅读 · 1 评论 -
DS-递归
定义在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递 和 归,这正是递归思想的精华所在。 调用自己,将问题从上到下逐一探究自身所需的条件(下层问题的解为上层条件) 从上往下递归的,直到递归到最底,再一层一层着把值返回示例求 a 的阶乘public class Recursion { //求a! public static int factorial(int a) { int原创 2021-11-13 17:01:49 · 350 阅读 · 1 评论 -
DS-链表
概述MyLinkpackage link;/** * 构建自己的列表 * * @author Deevan */public class MyLink<T> { /** * 构建节点的数据结构 * val:数据内容 * next:指向下一个节点的引用 */ private class Node { private T val; private Node next; /*原创 2021-11-13 14:38:45 · 237 阅读 · 1 评论 -
DS-队列
概述 只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性Myqueue 基于数组的队列的实现MyselfArray链接: DS-数组Queue创建queue接口定义方法package queue.classdemo;/** * 实现一个自己创建的队列接口 * * @author Deevan */public interface Queue<T原创 2021-10-29 18:54:51 · 141 阅读 · 1 评论 -
DS-栈.
概述 栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(简称LIFO:Last in, First out.结构)MyStack 基于数组的栈的实现MyselfArray链接: DS-数组Stack创建stack接口定义方法package stack.classdemo;/** * 创建自己的Stack接口 *原创 2021-10-29 18:44:56 · 99 阅读 · 1 评论 -
DS-数组
用来存储一组相同数据类型的数线性结构有索引查询快增删慢MyselfArraypackage array.classdemo;/** * 定义显示自己的数组 * * @author Deevan */public class MyselfArray<T> { /** * 数据容器 */ private T[] data; /** * 保存数据的实际个数 */ private int size;原创 2021-10-29 18:13:34 · 119 阅读 · 1 评论