H__D  

随笔分类 -  数据结构与算法

1
数据结构与算法学习
  • 【算法】一致性哈希算法实现
    摘要:一致性Hash算法介绍 算法的具体原理这里再次贴上: 先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置在这个Hash环上,然后根据数据的Key值计算得到其Hash值(其分布也为[0, 232-1]),接着在Has 阅读全文
    posted @ 2021-07-16 17:33 H__D 阅读(328) 评论(0) 推荐(0) 编辑
  • 【算法】一致性哈希算法(consistent hashing)
    摘要:一致性hash算法介绍 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 阅读全文
    posted @ 2021-07-16 16:58 H__D 阅读(244) 评论(0) 推荐(0) 编辑
  • 【算法】Hash算法之FNV算法
    摘要:HASH算法介绍 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散 阅读全文
    posted @ 2021-07-16 16:36 H__D 阅读(3432) 评论(0) 推荐(0) 编辑
  • 【算法】海量数据处理算法(top K问题)
    摘要:举例 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 思路 首先把文件分开 针对每个文件hash遍历,统计每个词语的频率 使用堆进行遍历 把堆归并起来 具体的方案 1.分治: 顺序读文件中,对于每个词c,取hash(c)%2000 阅读全文
    posted @ 2021-07-03 01:09 H__D 阅读(161) 评论(0) 推荐(0) 编辑
  • 【数据结构】堆
    摘要:一、堆介绍 堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值, 称为最大堆(大顶堆), 每个结点的值都小于或等于其左右孩子结点的值, 称为最小堆(小顶堆), 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 完全二叉树:一棵深度为 k 的有 n 个结点的二叉树,对 阅读全文
    posted @ 2021-06-17 19:13 H__D 阅读(335) 评论(0) 推荐(0) 编辑
  • 【数据结构】二叉树
    摘要:一、二叉树介绍 简单地理解,满足以下两个条件的树就是二叉树: 本身是有序树; 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2; 二、二叉树的性质 经过前人的总结,二叉树具有以下几个性质: 二叉树中,第 i 层最多有 2i-1 个结点。 如果二叉树的深度为 K,那么此二叉树最多有 2K 阅读全文
    posted @ 2021-06-17 18:18 H__D 阅读(601) 评论(0) 推荐(0) 编辑
  • 【数据结构】树存储结构
    摘要:一、树的介绍 树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。 图是使用树结构存储的集合 {A,B,C,D,E,F,G,H,I,J,K,L,M} 的示意图。对于数据 A 来说,和数据 B、C、D 有关系;对于数据 B 来说,和 E、F 有关系。这就是“一对多”的关系。 将具有 阅读全文
    posted @ 2021-06-17 17:49 H__D 阅读(667) 评论(0) 推荐(0) 编辑
  • 【数据结构】哈希表
    摘要:哈希表介绍 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 通常,我们把这个关键字称为 Key,把对应的记录称为  阅读全文
    posted @ 2021-06-17 12:14 H__D 阅读(312) 评论(0) 推荐(0) 编辑
  • 【算法】查找算法
    摘要:一、查找算法介绍 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 二、线性查找 编写线性查找算法代码 1 public class SeqSearch { 2 3 public static void main(String[] args) { 4 int[] arr = { 1, 2 阅读全文
    posted @ 2021-06-17 11:57 H__D 阅读(162) 评论(0) 推荐(0) 编辑
  • 【算法】十大经典排序算法
    摘要:本系列算法整理自:https://github.com/hustcc/JS-Sorting-Algorithm 同时也参考了维基百科做了一些补充。 算法动画参考:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 排序算法是《 阅读全文
    posted @ 2021-06-16 12:41 H__D 阅读(102) 评论(0) 推荐(0) 编辑
  • 【算法】算法的时间与空间复杂度
    摘要:算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。 那么我们应该如何去衡量不同算法之间的优劣呢? 主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前 阅读全文
    posted @ 2021-06-11 13:14 H__D 阅读(144) 评论(0) 推荐(0) 编辑
  • 【算法】递归
    摘要:1、递归介绍 1.1、递归应用场景 看个实际应用场景, 迷宫问题(回溯), 递归(Recursion) 1.2、递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 1.3、递归调用机制 打印问题 阶乘问题 1 // 阶 阅读全文
    posted @ 2021-06-10 15:22 H__D 阅读(68) 评论(0) 推荐(0) 编辑
  • 【数据结构】前缀(波兰表达式)、中缀、后缀表达式(逆波兰表达式)
    摘要:一、中缀表达式 我们日常的运算表达式通常是如下形式,这种成为中缀表达式,也就是运算符在运算数的中间。这种表达式人类人容易识别,并根据其进行计算,但计算机识别这种表达式非常困难。 中缀表达式:(a + b) * c - d 中缀表达式的计算机求值:参考:【数据结构】栈,中的计算器应用部分 二、前缀表达 阅读全文
    posted @ 2021-03-23 15:20 H__D 阅读(1950) 评论(0) 推荐(0) 编辑
  • 【数据结构】栈
    摘要:一、栈的基本介绍 1.1 栈的基本性质 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端, 为变化的一端, 称为栈顶(Top), 另一端 阅读全文
    posted @ 2021-03-23 14:03 H__D 阅读(242) 评论(0) 推荐(0) 编辑
  • 【数据结构】双向链表
    摘要:一、双向链表介绍 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表 双向链表图示 双向链表与单链表对比 1、单向链表,查找的方向只能是一个方向,而双 阅读全文
    posted @ 2021-03-19 01:57 H__D 阅读(80) 评论(0) 推荐(0) 编辑
  • 【数据结构】环形链表
    摘要:一、约瑟夫问题介绍 Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数 到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由 此产生一个出队编号的序列。 1.1 约 阅读全文
    posted @ 2021-03-19 01:49 H__D 阅读(70) 评论(0) 推荐(0) 编辑
  • 【数据结构】单向链表
    摘要:一、链表的介绍 1、链表是以节点的方式来储存,是链式储存。 2、每个节点包含data域(存放数据)、next域(指向下一个节点)。 3、链表的各个节点不一定是连续储存的。 4、链表分为带头节点的链表和没有头节点的链表,根据实际的需求来确定。 二、带头节点单链表示意图 三、编写java代码实现带头节点 阅读全文
    posted @ 2021-03-18 01:11 H__D 阅读(106) 评论(0) 推荐(0) 编辑
  • 【数据结构】数组模拟队列
    摘要:一、队列的介绍 队列是 有序 的,可以用 数组 或者 链表来实现,而且队列遵循一个 先入先出 的原则,即存入队列的数据,要先取出,后存入的要后取出。 二、用数组模拟队列思路 1、队列是有序的,若使用数组的结构来存储队列的数据,首先要用 maxsize 来指定队列的最大容量。 2、因为队列的输出、输入 阅读全文
    posted @ 2021-03-17 02:18 H__D 阅读(219) 评论(0) 推荐(0) 编辑
  • 【数据结构】稀疏数组
    摘要:一、稀疏数组介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法: 1、记录数组 一共有几行几列,有多少个不同的值 2、把具有不同值的原元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 二、图示稀疏数组 三、Java实现稀疏矩阵存储及 阅读全文
    posted @ 2021-03-17 02:04 H__D 阅读(88) 评论(0) 推荐(0) 编辑
  • 【数据结构】数据结构类别
    摘要:数据结构类别 一、线性结构 1、线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 2、线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序储存的线性表称为顺序表,顺序表中的存储元素是连续的。 3、链式存储的线性表称为链表,链表中的存储元素不一定是连 阅读全文
    posted @ 2021-03-17 02:01 H__D 阅读(205) 评论(0) 推荐(0) 编辑

1