数据结构
文章平均质量分 96
我就算饿死也不做程序员
欢迎关注同名公众号:"我就算饿死也不做程序员"。
交个朋友,一起交流,一起学习,一起进步。
展开
-
基于二叉树的近似最近邻搜索-Annoy
- annoy是一种基于二叉树的近似最近邻搜索算法,可以在牺牲小部分精度的前提下,大大提升搜索性能。在推荐系统、搜索系统以及LLM-RAG的相似文档召回等领域都存在着广泛的应用- 并且annoy是一种可以在自己电脑快速学习上手和验证效果的工具。原创 2024-08-15 20:59:23 · 935 阅读 · 0 评论 -
布隆过滤器 (Bloom Filter):用于超大数据量时检索一个元素是否存在
相信大家在开发过程中,经常会遇到判断一个字符串(或其他类型的变量值)是否已经出现过的需求,这个时候一般使用HashMap可以解决,先将出现过的字符串存于HashMap对象的keySet中,下次只要判断HashMap对象的keySet是否含有该字符串,就能知道是否其已经出现过。但是,当我们HashMap存放的数据越多,查询速度就会越慢,而且占用内存也会越大。为什么查询速度会变慢呢?知道HashMap底层原理的就不难想到,key的hashcode分布不均匀,可能很多key的hashcode被分配到同一个位原创 2020-08-12 21:07:44 · 814 阅读 · 0 评论 -
二叉树的不同形式:顺序存储二叉树 & 线索化二叉树
顺序存储二叉树从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看右面的示意图。顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为 2 * n + 1第n个元素的右子节点为 2 * n + 2第n个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素(按0开始编号如图所示)线索化二叉...原创 2020-03-23 07:12:24 · 371 阅读 · 0 评论 -
图的存储、深度优先遍历和广度优先遍历
图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:图的创建在考虑代码实现中,我们可以通过一个列表来存储所有的结点,数组来存储所有边。package com.hong.graph;import java.util.ArrayList;import java.util.Arrays;public class Graph {...原创 2019-11-01 07:55:07 · 1280 阅读 · 0 评论 -
赫夫曼树的原理、构建和java实现
何为赫夫曼树给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。基本概念路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根...原创 2019-10-23 23:03:25 · 216 阅读 · 0 评论 -
平衡二叉树(AVL)的原理和java实现
目录什么是AVL左旋转右旋转双旋转java实现什么是AVL平衡二叉树(AVL:下面我们都统称AVL)也是一种二叉排序树,但是它的左子树和右子树的高度差不超过1,可以认为是二叉排序树优化之后的一种数据结构。(如果对二叉排序树不了解的,可以看我之前的博客二叉排序树的创建和节点删除)那么,为什么会产生AVL这种数据结构呢?如果,我们对{1,2,3,4,5,6}这样一个数组来创建二叉排序树,那...原创 2019-10-21 07:09:05 · 484 阅读 · 0 评论 -
二叉排序树的创建和节点删除
二叉排序树-BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。例如对于一批数据 (7, 3, 10, 12, 5, 1, 9) 对应的二叉排序树如下:二叉排序树的创建其实,二叉排序树创建比较简单,其实就是一个个节点加上,怎么将节点往树上加呢?与父子树进行进行比较,比父子树...原创 2019-10-17 21:14:07 · 1627 阅读 · 1 评论 -
数据结构:单链表实现反转
实现思路:如果链表只有一个或者没有节点,则无需反转原链表的第一个节点即为反转后的最后一个元素,需要将其固定,我们叫它final按原链表的顺序从第二个开始对所有节点node进行遍历,每次将final的next重新指向node的next,将node的next重新指向head的next,将head的next重新指向node(head:链表的头节点,不存放实际节点next:某个节点的下一个节...原创 2019-07-05 22:13:09 · 702 阅读 · 0 评论 -
数据结构:队列的java实现以及优化
队列队列是一种先进先出,后进后出的数据结构。如果用数组的基本数据结构实现的话,普通的队列只能入列的元素数量为数组的大小,不管是否已经出列。/** * 队列:先入先出,后入后出 * 最多只能入列maxSize个元素,不管是否已经出列 */public class Queue { private int maxSize; // 队列的最大容量 private int f...原创 2019-10-11 07:38:41 · 212 阅读 · 0 评论