
数据结构与算法
文章平均质量分 88
小潭渔
这个作者很懒,什么都没留下…
展开
-
算法与数据结构---红黑树
算法与数据结构—红黑树1. 前言 红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。虽然我们希望一个所有查找都能在lgN次比较内结束,但是这样在动态插入中保持树的完美平衡代价太高,所以,我们稍微放宽一下限制,希望找到一个能在对数时间内完成查找的数据结构,这样就产生了红黑树。要了解红黑树就必须先了解二叉树。红黑树是在普通二叉树上,对没个节点添加一个颜色属性形成的。 2. 树 2.1....原创 2018-02-26 16:47:37 · 306 阅读 · 0 评论 -
分布式环境Raft一致性共识算法解读
Raft是分布式环境下的一致性算法,它通过少数服从多数的选举来维持集群内数据的一致性。它与RBFT算法名称有点像,然而Raft算法里不能存在拜占庭节点,而RBFT则能容忍BFT节点的存在。Raft非常类似于paxos协议(参见我的这篇文章《paxos算法如何容错的–讲述五虎将的实践》),然而它比paxos协议好理解许多(因为paxos协议难以具体实现,所以zookeeper参考paxos实现了它自...转载 2018-06-04 15:16:11 · 761 阅读 · 0 评论 -
paxos算法如何容错的--讲述五虎将的实践
(本文包括章节:1、由来,2、算法简单回顾,3、演习道具,4、演习,5、算法提出者Leslie的八卦。hoho)1. 由来刘备接受了诸葛亮的提议,决定将paxos算法的思想应用到蜀帝国的决策机制上。然而,玄德生性谨慎,决定先行试点,实践下可行性。孔明提议,由蜀国五大肌肉男:关羽、张飞、赵云、马超、黄忠,做为决策者,而廖化、周仓、魏延分别无序的提出关于同一件事的水火不容的三个提案,孔明坚信:...转载 2018-06-04 14:46:41 · 572 阅读 · 0 评论 -
paxos分布式一致性算法--讲述诸葛亮的反穿越
1. 引子一日,诸葛亮找到刘备,突然献上一曲《独角戏》,而后放声大哭。刘备正沉醉于新曲,暗叹孔明大才,竟作得如此不凡仙乐,看到孔明忽而大悲,慌问:“水,何事悲恸?” 诸葛亮止住抽泣:“亮自主公三顾茅庐出山以来,蒙主公厚爱,自比如鱼得水,敢不尽力?然每日击鼓升帐,皆亮一人在上唱独角戏,众将在下唯唯诺诺,只是照亮的安排做事。如此下去,亮日后定会被司马懿那厮累死呀。” 刘备眨着充满问号的大眼睛:...转载 2018-06-04 14:30:51 · 237 阅读 · 0 评论 -
数据结构与算法(java)— HashMap和HashSet底层原理及实现
数据结构与算法(java)— HashMap和HashSet底层原理及实现1. HashMap内部原理及实现1. 哈希表哈希表(hash table)也叫散列表,是一种非常重要的数据结构,我们先来看一下其他数据结构的特点。 (1)数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间复...原创 2018-05-08 21:56:19 · 385 阅读 · 0 评论 -
数据结构与算法(java)— 时间复杂度和空间复杂度
数据结构与算法(java)— 时间复杂度和空间复杂度1. 基本概念数据结构到底是什么呢?我们先来谈谈什么叫数据。 数据:数据是描述客观事物的数值、字符以及能输入给计算机且能被计算机处理的各种符号集合。 简单的来说,数据就是计算机化的信息。 数据元素:是组成数据的基本单位,在计算机中通常被作为一个整体进行考虑和处理。也被称为记录。 数据项:数据项是数据不可分割的最小单位。一个数据元素...原创 2018-05-08 21:12:44 · 3630 阅读 · 0 评论 -
深入浅出一致性Hash原理
一、背景一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。二、前言现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库的人都知道,me...原创 2018-04-23 19:44:01 · 542 阅读 · 0 评论 -
数据结构与算法---哈希表
数据结构与算法—哈希表1. 概述 1.1 哈希表概念 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中...原创 2018-02-27 16:26:29 · 466 阅读 · 0 评论 -
数据结构与算法---链表
数据结构与算法—链表1. 概念 在讨论链表(linked-list)之前,需要明确几个概念:线性表(顺序表, list, linear list), 数组(array),链表(linked-list)。 线性表:在中文里,线性表也叫作顺序表。在英文中,它称为list, linear list等。它是最基础、最简单、最常用的一种基本数据结构,线性表总存储的每个数据称为一个元素,各个元素及其索...原创 2018-02-27 10:41:36 · 285 阅读 · 0 评论 -
数据结构与算法---栈和队列
数据结构与算法—栈和队列栈:是限制在表的一端进行插入和删除运算的线性表。栈又称后进先出简称LIFO表 队列:也是一种运算受限的线性表。它只允许在标的一端进行插入,而在另一端进行删除。队列亦称先进先出FIFO表1. 栈与队列的区别 (1)队列先进先出,栈先进后出。 (2)对插入和删除操作的”限定”。 栈是限定只能在表的一端进行插入和删除操作的线性表。 队列是限定只能在表的一端进行插入和...原创 2018-02-27 10:10:51 · 273 阅读 · 0 评论 -
数据结构与算法---数组
数据结构与算法—数组1. 基本概念 同一种类型数据的集合。数组就是一个容器,用来存放相同类型的数据的容器。 2. 数组的好处 数组的最大好处就是能都给存储进来的元素自动进行编号. 注意编号是从0开始。方便操作这些数据。 3. java中的数组 3.1 Java中数组的定义 Java 中定义数组的语法有两种: type arrayName[]; type[]...原创 2018-02-26 20:05:12 · 211 阅读 · 0 评论 -
浅析线性递归和尾递归
1. 定义线性递归:也即是普通递归,单向递归,线性递归函数的最后一步操作不是递归操作,而是其他的操作。当数据量很大的时候,会造成栈溢出,这是因为,在每次递归调用时,递归函数中的参数,局部变量等都要保存在栈中,如果数据量很大的话,便可能会溢出。 尾递归:也即是线性迭代,尾递归函数的最后一步操作是递归,也即在进行递归之前,把全部的操作先执行完,这样的好处是,不用花费大量的栈空间来保存上次递归中的...转载 2018-05-31 10:18:42 · 1981 阅读 · 1 评论