从bst到lsm的进阶之路-编程思维

前言 相信大家之前都了解过很多种数据结构,我之前总是两两的,也就是从局部上去进行比较,没有从整体上进行这些树的发展脉络进行梳理,因此经常看完没多久就忘了。看来确实是需要从本源出发,不仅要知其然还要知其所以然,了解清楚前因后果,不仅可以方便我们记忆,更有利于增加我们的理解深度。实际上任何事物的出现都是有他出现的必要性,当某个事物达到瓶颈之后,必然会出现新的事务来弥补它的不足。好的,废话不多说了,今

京东lbs推荐算法实践-编程思维

作者:京东零售 郑书剑 1、推荐LBS业务介绍 1.1 业务场景 现有的同城购业务围绕京东即时零售能力搭建了到店、到家两种业务场景。同城业务与现有业务进行互补,利用高频,时效性快的特点,可以有效提升主站复访复购频次,是零售的重要战略方向。 1.2 名词解释 LBS:基于位置的服务(Location Based Services)。 下文LBS商品代指京东小时购商品;LBS推荐代指京东基于地理位置

深入理解mysql索引底层数据结构-编程思维

1 引言 在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没有思考过,为什么加了索引就会能提高SQL的查询效率,为什么有时候加了索引SQL执行反而会没有变化,本文就从MySQL索引的底层数据结构和算法来进行详细分析。 2 索引数据结构对

复杂度分析:如何分析、统计算法的执行效率和资源消耗-编程思维

作者:京东物流 崔旭 我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要讲的内容:时间、空间复杂度分析。 1 为什么需要复杂度分析? 你可能会有些疑惑,我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还

《数据结构和算法》之学习规划(1)-编程思维

如果你不想成为代码工人,那就花时间来研究下数据结构和算法。    学习规划   数据结构和算法的介绍 数据结构的介绍 数据结构和算法的关系 看几个实际编程中遇到的问题 线性结构和非线性结构 稀疏数组和队列  稀疏sparsearray数组  队列 链表 链表(Linked List)介绍 单链表 双向链表 单向环形链表 Jsosephu问题 栈   栈的一个实际需求  栈

《数据结构和算法》之数据结构和算法的介绍(2)-编程思维

漂流在海上的帆,像极了鲨鱼的鳍     一、数据结构和算法的概述 1、数据(data)结构(structure) 是一门研究 组织数据方式 的学科。 2、程序 = 数据结构 + 算法 3、数据结构 是算法的基础   二、看几个实际编程中遇到的问题   1、关于单链表数据结构 public static void main(String[] args) { Strin

【数据结构和算法】001 单链表 linkedlist-编程思维

   小朋友,你是否有很多问号?为什么?别人都在看漫画,而我在学画画,对着钢琴说话...         一、单链表(LinkedList)介绍和内存布局 链表是有序的列表,它在内存中的实际存储结构如下:          看上去虽然无序,但ta是靠每个链表节点元素的   地址  和  next域  来分清首尾相连的顺序,如下图所示,由头指针指向第一个元素,进而第二个、三个...     

京东科技技术新知-编程思维

作者:京东物流 马瑞1 什么是Trie树1.1 Trie树的概念Trie树,即字典树,又称单词查找树或键树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。Trie, also called digital tree and s

京东科技技术新知-编程思维

作者:京东物流 纪卓志目前市面上充斥着大量关于跳跃表结构与Redis的源码解析,但是经过长期观察后发现大都只是在停留在代码的表面,而没有系统性地介绍跳跃表的由来以及各种常量的由来。作为一种概率数据结构,理解各种常量的由来可以更好地进行变化并应用到高性能功能开发中。本文没有重复地以对现有优秀实现进行代码分析,而是通过对跳跃表进行了系统性地介绍与形式化分析,并给出了在特定场景下的跳跃表扩展方式,方便读

个人文章-编程思维

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构等核心知识点,欢迎star~Github地址:https://github.com/Tyson0314/...大家好,我是大彬~很多初学者在学习数据结构与算法的时候,都会觉得很难,很大一部分是因

kmp的代码解读 - 编程思维

如何更好地理解和掌握 KMP 算法? - 海纳的回答 - 知乎讲解了KMP算法 ,清晰明了,令人醍醐灌顶。但我对其代码中不少合并与简化的部分仍需要多思考一番,这里记录下其代码思路。建议读完上面文章后食用。部分匹配表(Partial Match Table) PMTPMT 中的值是字符串前缀集合和后缀集合的交集中最长元素的长度匹配过程假设已经求出了PMT。设指针 i 指向主字符串 t,指针 j 指向

【每日一题】矩形重叠个数 - 编程思维

平面内有 n 个矩形,第 i 个矩形的左下角坐标为$(x_1[i],y_1[i])$,右上角坐标为:$(x_2[i],y_2[i])$。如果两个或多个矩形有公共区域,则认为他们是相互重叠的(不考虑边界和角落)。请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠?分析:<font color=red>二维的图像题一般可以转化为一维的图像题</font><fon

【每日一题】lfu 缓存 - 编程思维

一个缓存结构需要实现如下功能:void set(int key,int value):加入或者修改 key 对应的 valueint get(int key):查询 key 对应的 value 值但是缓存最多放 K 条记录,如果新的 K + 1 条记录需要加入,就需要根据策略删掉一条记录,然后才能把新记录加入。这个策略为:在缓存结构的 K 条记录中,哪一个 key 从进入缓存结构的时刻开始,被调用

【每日一题】调整搜索二叉树中两个错误的节点 - 编程思维

一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回。已知二叉树中所有节点的值都不一样,给定二叉树的头节点 head,返回一个长度为 2 的二叉树节点类型数组 errs,errs[0] 表示一个错误节点,errs[1] 表示另一个错误节点。解法一:递归如下图对搜索二叉树进行中序遍历,可以得到一个升序数组。如果搜索二叉树中有两个节点调换

【每日一题】线段重叠 - 编程思维

一条直线上有 n 个线段,第 i 个线段的坐标为$(x_1[i],x_2[i])$。请你计算出直线上重叠线段数量最多的地方,有多少个线段相互重叠?分析:首先需要根据线段的起始点排序,便于后续处理。线段重叠问题需要根据当前线段的 start 和 end 排除哪些没有重合的线段。我们可以将线段的 end ,放入一个有序表里,将有序表中小于 start 的数据都删除(那些已加入有序表线段的 end 小于

搜索中常见数据结构与算法探究(二) - 编程思维

本文介绍了几个常见的匹配算法,通过算法过程和算法分析介绍了各个算法的优缺点和使用场景,并为后续的搜索文章做个铺垫;读者可以通过比较几种算法的差异,进一步了解匹配算法演进过程以及解决问题的场景;KMP算法和Double-Array TireTree是其中算法思想的集大成者,希望读者重点关注。1 前言上文探究了数据结构和算法的一些基础和部分线性数据结构和部分简单非线性数据结构,本文我们来一起探究图论,

如何快速学习go的切片和数组数据类型 - 编程思维

本文已收录如何快速学习Go的struct数据类型。涵盖PHP、JavaScript、Linux、Golang、MySQL、Redis和开源工具等等相关内容。什么是数组数组是属于同一类型的元素的集合。例如,整数 5、8、9、79、76 的集合形成一个数组。Go 中不允许混合不同类型的值,例如,同时包含字符串和整数的数组。声明数组数组属于类型 。 表示数组中的元素数,并表示每个元素的类型。元素的数量也

搜索中常见数据结构与算法探究(一) - 编程思维

1 前言ES现在已经被广泛的使用在日常的搜索中,Lucene作为它的内核值得我们深入研究,比如FST,下面就用两篇分享来介绍一些本文的主题:第一篇主要介绍数据结构和算法基础和分析方法,以及一些常用的典型的数据结构;第二篇主要介绍图论,以及自动机,KMP,FST等算法; 下面开始第一篇2 引言“算法是计算机科学领域最重要的基石之一“ “编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机

fhq学习笔记 - 编程思维

简单写一写,以免忘记FHQ-treap是一种神奇的数据结构,支持很多操作。包括但不限于查排名,删数,查找前驱后继首先我们来学习FHQ-treap的前置知识:二叉搜索树(BST)二叉搜索树二叉搜索树显然是一棵二叉树,但这个二叉树有特殊性质:他的左子树中所有点权值均小于他,他的右子树中所有点的权值都大于他(大部分时候,二叉搜索树一个节点中会存储若干个一样权值的数)我们可以发现,二叉搜索树本身就可以支持

图论 -- 拓扑排序 - 编程思维

拓扑排序是什么?我们把从做番茄炒蛋和紫菜蛋花汤当作一个项目工程在做整个工程的时候,我们每次只能做一件事情,并且不能再炒鸡蛋之后再打鸡蛋,不能在混合翻炒之后再下番茄也就是,我们可以按这样的方式进行整个工程准备食材,切番茄,打鸡蛋,炒鸡蛋,下番茄,混合翻炒,放调料,紫菜蛋花汤,摆盘或者这样准备食材,紫菜蛋花汤,切番茄,下番茄,打鸡蛋,炒鸡蛋,混合翻炒,放调料,摆盘但不能这样准备食材,切番茄,下番茄,混