数据结构(结构)

本文介绍了数据结构的基础,包括数组、链表、栈、队列、图和树等。重点讲解了哈希表的特性,如哈希函数的性质和哈希表在大数据去重中的应用。还讨论了一致性哈希在解决哈希表扩容时的负载均衡问题,以及其在分布式系统中的作用。通过实例展示了如何使用一致性哈希实现高效的数据分流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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)加减机器时,再打进、减去等量的虚拟节点,通过虚拟节点的比例来负载均衡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值