算法
RachelHwang
鹏城百晓生
展开
-
算法 — 二叉树之红黑树(三)
背景:红黑树其实就是一种数据结构,设计它的目的就是为了高效地进行增删改查。普通的二叉查找树在极端情况下可退化成链表,此时的增删查O(n)效率都会比较低下。为了避免这种情况,就出现了红黑树。而红黑树是基于二叉查找树和平衡二叉树的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较高。红黑树之所以难是难在它是自平衡的二叉查找树,在进行插入和删除等可能会破坏树的平衡的操作时,需要重新自处理达到平衡状态。我们先回顾下二叉查找树和平衡二叉树二叉查找树1. 特征节点的左子树小于节点本身节点的右子树大于原创 2020-08-02 15:35:38 · 469 阅读 · 0 评论 -
系统设计 — Instagram的分片与ID设计
引言:Instagram上有大量的数据,每分钟就有超过25张的图片和90个点赞。为了确保所有重要的数据都能被合理存储并且及时得被提取应用,对数据进行了分片(sharding)——也就是说,把数据放到多个桶(bucket)中,每个桶里都有一部分数据。应用服务器上运行的是Django, 后端数据库是PostgreSQL。对数据分片首先要决定是否要保留PostgreSQL作为主要的数据存储库,是否要采用其他的数据库。经过评估一些不同的数据库解决方案,最终确定最适合的方案是在PostgreSQL数据库集群上实现数原创 2020-11-15 15:58:34 · 469 阅读 · 0 评论 -
算法 — 系统设计中一致性哈希算法的实现
1、设计设计需求水平切分Horizontal Sharding:Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。这时水平切分就会产生一个问题,假如我们来原创 2020-11-14 01:21:51 · 180 阅读 · 0 评论 -
算法 — 二叉树之Btree(二)
B-TreeB-Tree是为磁盘等外存储设备设计的一种平衡查找树。系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在MySQL中可通过如下命令查看页的大小:mysql> show variables like 'inn原创 2020-08-02 00:38:42 · 413 阅读 · 0 评论 -
算法 — 二叉树数据结构(一)
二叉树1、概念:二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。2、性质:二叉树中,第 i 层最多有 2i-1 个结点。如果二叉树的深度为 K,那么此二叉树最多有 2K-1 个结点。二叉树中,终端结点数(叶子结点数)为 n0,度为 2 的结点数为 n2,则 n0=n2+1。对于一个二叉树来说,除了度为 0 的叶子结点和度为 2 的结点,剩下的就是度为 1 的结点(设为 n1),那么总结点 n=n0+n1原创 2020-08-01 13:22:02 · 3162 阅读 · 0 评论