数据结构(结构)

本文介绍了数据结构的基础,包括数组、链表、栈、队列、图和树等。重点讲解了哈希表的特性,如哈希函数的性质和哈希表在大数据去重中的应用。还讨论了一致性哈希在解决哈希表扩容时的负载均衡问题,以及其在分布式系统中的作用。通过实例展示了如何使用一致性哈希实现高效的数据分流。
摘要由CSDN通过智能技术生成
  1. 基本知识点
  2. 数组
  3. 链表
    (1)单链表
    (2)双向链表
    (3)循环链表
  4. 队列
  5. 哈希表
    (1)hashmap
    (2)hashset
    (3)哈希函数
    (4)一致性哈希

  6. (1)二叉树的遍历
    (2)二叉搜索树
    (3)完全二叉树
    (4)满二叉树
    (5)平衡二叉树

  7. (1)大根堆
    (2)小根堆

1.基本知识点
(1)存储结构
顺序存储结构

概念:
用一组在内存上连续的 存储单元依次存储数据元素
数据元素之间的逻辑关系由元素的存储位置来表示

优点:
(1)无需为表示结点的逻辑关系增加额外空间
(2)可以方便的存取表中的任意元素

缺点:
(1)插入、删除某个结点必须移动大量结点
(2)要预先进行静态分配物理空间

在这里插入图片描述

链接存储结构

概念:
用一组在内存上任意的存储单元存储数据元素
数据元素之间的逻辑关系由指针来表示

优点:
(1)插入、删除某个结点非常方便
(2)无需预先静态分配物理空间

缺点:
(1)不能随机存取元素
(2)额外空间复杂度高

在这里插入图片描述

(2)逻辑结构

有四种基本形态:
(1)元素间没有任何关系 	->		集合
(2)元素间有线性关系		->		线性结构
(3)元素间有层次关系		->		树结构
(4)元素间有网状关系		->		图结构

(3)线性 与 非线性

线性:
元素之间由 顺序存储结构或链接存储结构 像一根线一样串联起来

非线性:
元素之间的关系不能像线一样串联起来

7.哈希表
(3)哈希函数

性质:
(1)输入域:无穷大
(2)输出域:有限。hashcode为16进制,16位,每一位可以从0-9,a-f
中选一个(16^16  = 2^64)
(3)同样的输入一定有同样的输出
(4)不同的输入可能也会有同样的输出(因为输入域无穷大,输出域有限)
(5)输入域数据量多了之后,在输出域中均匀分布,呈离散性

哈希表增删改查时间复杂度为O(1)
经典哈希:数组后面挂链表结构
扩展哈希:数组后面挂红黑树结构



应用:
	背景:有一个很大的文件,100T,其中存着字符串文本,目的要找出重复文本
	达到去重效果
	解决办法:用哈希来分流。分配1000台机器,给机器标号0~999,把这个大文件
	通过哈希来分流到这1000个机器上,相同的文本一定会被分到同一个机器上
	具体实现:把文本每行读出来,利用哈希函数算出hashcode,再把hashcode
	取模1000,模出来的值就是要放的机器。

(4)一致性哈希

问题:当哈希表负载,要扩容时,如何较好的迁移

一致性哈希的任务:把迁移的代价变得很低,同时又负载均衡

办法:把整个哈希函数的返回值想象成一个环,把三台机器放到环中
对key进行hashcode后,把key和value放到环中,顺时针找离放的位置最近的机器

普通具体实现:
客户端:3台机器
前端:无差别的负载的服务器
把m1、m2、m3三个机器的ip值进行hashcode排序成一个数组,放到服务器中
一个request文本进来后,用二分的方式在数组中找到第一个大于等于文本hashcode
的位置,即为要去的机器

普通实现面临的问题:
(1)当机器数量少时,哈希函数离散性不能体现,初始负载不均匀
(2)当加减机器时,负载也会变得不均匀

解决办法:
(1)给每个真实的机器分配一定数量的虚拟节点,通过路由表一一对应
(2)将虚拟节点打到环上,虚拟节点对应的区域由真实机器处理
(3)加减机器时,再打进、减去等量的虚拟节点,通过虚拟节点的比例来负载均衡
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值