数据结构与算法
文章平均质量分 92
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
GeorgiaStar
世上无难事,只要肯放弃
展开
-
数据结构如何造就Redis的快
作为一种键值数据库,为啥Redis能有这么突出的表现呢?一方面,这是因为它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快。另一方面,这要归功于它的数据结构。键值对(key-value对)是按一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,高效的数据结构是Redis快速处理数据的基础。Redis中的键的类型只能为String(字符串),值支持五种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Sorted Set(有序集合,也叫Zs原创 2021-08-16 15:20:18 · 361 阅读 · 0 评论 -
学透回溯算法
其实回溯算法和我们常说的 DFS 算法非常类似,本质上就是一种暴力穷举算法。回溯算法和 DFS 算法的细微差别是:回溯算法是在遍历「树枝」,DFS 算法是在遍历「节点」,解决一个回溯问题,实际上就是一个决策树的遍历过程。转载 2021-08-06 11:50:49 · 490 阅读 · 0 评论 -
深度优先搜索与广度优先搜索
算法是作用于具体数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于“图”这种数据结构的。原创 2021-07-10 14:16:17 · 7358 阅读 · 2 评论 -
理解单调栈与单调队列
单调栈单调栈:栈内的元素按照某种方式排序下单调递增或单调递减,如果新入栈的元素破坏的单调性,就弹出栈内元素,直到满足单调性。单调栈分为单调递增栈和单调递减栈:单调递增栈:栈中数据出栈的序列为单调递减序列;单调递减栈:栈中数据出栈的序列为单调递增序列。维护单调递增栈遍历数组中每一个元素,执行入栈:每次入栈前先检验栈顶元素和进栈元素的大小。如果栈空或进栈元素大于栈顶元素则直接入栈;如果进栈元素小于等于栈顶元素,则出栈,直至进栈元素大于栈顶元素。 //单调递增栈 Stack<Int原创 2021-06-27 12:48:16 · 1517 阅读 · 6 评论 -
从位图到布隆过滤器
从一道面试题引出位图先来看一个经典的。假设当我们需要在1千万个整数(整数的范围在1到1亿之间)里面快速查找某个整数是否存在于其中的话,如何快速查找进行判断会比较方便呢?当然,这个问题最容易想到的就是用散列表来解决。不过,我们可以使用一种比较“特殊”的散列表,那就是位图(BitMap)。我们申请一个大小为1亿、数据类型为布尔类型(true 或者 false)的数组。我们将这1千万个整数作为数组下标,将对应的数组值设置成true。比如,整数5对应下标为5的数组值设置为true,也就是array[5]=tr原创 2021-02-08 19:04:34 · 176 阅读 · 1 评论 -
避免缓存穿透的利器之BloomFilter
缓存穿透问题当用户想要查询一个数据,发现缓存中没有,出现缓存未命中,于是转向持久层数据库查询发现也没有,于是本次查询失败,且不会加入缓存。这就会导致,下次再用相同的条件查询时,由于缓存未命中依旧会查数据库,当并发流量很大时,会把DB打垮,这就是缓存穿透。缓存穿透是指查询一个根本不存在的数据,缓存和存储层都没有命中,通常当存储层查不到数据时就不会写入缓存。public Object getItemById(long id) { //从缓存中查 Object item = cache.get(id);原创 2020-07-26 12:59:41 · 529 阅读 · 0 评论 -
二叉树的深度优先遍历与广度优先遍历
public class BinaryTree<T extends Comparable<T>> { /** * 根结点 */ private TreeNode<T> root; /** * 是否通过前序及中序遍历来初始化 */ private boolean initByPreInOrder; public BinaryTree(boolean initByPreInOrder) {原创 2020-07-16 17:32:30 · 1276 阅读 · 3 评论 -
InnoDB存储引擎为什么选择B+树构建索引
索引是对数据库表中一个或多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种。索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。索引在 MySQL 数据库中分三类:B+树索引Hash索引全文索引我们在工作开发中最常接触到的是InnoDB存储引擎中的B+树索引。要了解 B+树索引,就不得不提二叉查找树、平衡二叉树、B树这三种数据结构。B+树就是从他们演化来的。原创 2020-07-07 20:28:05 · 2532 阅读 · 0 评论 -
从头到尾解析Hash表算法
第一部分:Top K 算法详解问题描述百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超转载 2017-05-25 15:31:19 · 335 阅读 · 0 评论 -
从Hadoop框架与MapReduce模式中谈海量数据处理
从hadoop框架与MapReduce模式中谈海量数据处理前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理。 由此,最近凡是空闲时,便在看转载 2017-05-25 15:16:25 · 796 阅读 · 0 评论 -
从B树、B+树、B*树谈到R 树
本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。转载 2017-02-27 13:53:48 · 372 阅读 · 0 评论