数据结构
文章平均质量分 77
damon2636
卖女孩的小火柴
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java实现4种微信抢红包算法(小结)
....转载 2022-06-26 16:50:04 · 1832 阅读 · 2 评论 -
如何通过基于事件溯源架构高效解决12306的库存问题
12306主要性能问题还是出在出票和余票查询。当前通过CQRS架构结合聚合根在内存、事件回溯的手段来解决以上两个问题。 实现了买票、退票、站点最多可卖座位数限制、 站点间预留票(最低保留座位数,最多可卖座位数)、取消预留票功能。主要用到两个数据结构为跳表、位图。假设车次k41有途径4个站点分别为1,2,3,4,总共8个座位。1.初始化车次站点票信息10002 表示表示站点1到站点2, 0000 0000 表示有8个座位,下标从0-7.20003 表示表示站点2到站点3, 0000 0000 表..原创 2022-02-10 11:42:00 · 901 阅读 · 0 评论 -
Hash算法-一致性hash
什么是一致性hash一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表( Distributed Hash Table,DHT) 中存在的动态伸缩等问题[2]。引用百度百科普通hash的缺陷用过memcache和redis的人一定都对一致性hash应该都不陌生。在没有一致性hash时,我们原来的选择是ha...原创 2021-01-28 09:13:37 · 303 阅读 · 3 评论 -
Hash算法-如何防止用户密码信息被脱库
背景2011年csdn明文泄密600万用户邮箱和密码出现明文泄露,很多用户对优快云的明文存储密码的行为表示出愤怒。对于与用户关联的重要数据我们应该要如何加密存储,MD5加密能够满足需求?要解决这些问题,我们需要引入一个重要的算法-hash算法。什么是hash算法Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会原创 2021-01-20 23:40:26 · 596 阅读 · 1 评论 -
迪杰斯特拉(Dijkstra)算法
背景高德、百度地图出行的的时候大家一定都有用过路径规划的功能,例如我要从出发地A到目的地B,开车有两种方案可选。时间最短,但路程较远。 路程最短,耗时较长。我想作为开发人员一定有想过他到底是用了什么的算法计算出最优方案的。今天我们来说说迪杰斯特拉算法。什么是迪杰斯特拉算法迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采原创 2021-01-10 22:37:35 · 3146 阅读 · 0 评论 -
布容过滤器
使用场景1.解决缓存穿透。2.解决高效去除爬虫所抓取页面重复URL。3.计算网站用户UV。4.高效判断用户名是否唯一。5.如何判断垃圾邮件。核心设计思路:布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几个哈希函数。假设位数组的长度为m,哈希函数的个数为k。当需要判断一个key是否存在时,我们通过对当前key进行k次hash函数计算,如过K次hash计算都命中,说明key存在。当然存在hash冲突的概率,所以可以用在允许小规模误判的场景,当然这个误判的概率我们是可以通原创 2021-01-04 09:01:19 · 201 阅读 · 0 评论 -
算法复杂度分析:最好、最坏、平均、均摊
案例分析1public int Function(int n, int x){ int sum = 0; for (int i = 1; i <= n; ++i) { if (i == x) break; sum += i; } return sum;}1.最坏时间复杂度当x>n时,代码时间复杂度为O(n)2.最坏时间复杂度当x>=1时,代码时间复杂度为O(1)3.平均时间复杂度要查找的变量 x 在数组中...原创 2020-12-21 12:23:39 · 1745 阅读 · 0 评论 -
算法时间与空间复杂度
数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间?1.如何理解代码时间复杂度和空间复杂度。时间复杂度:表示执行的快慢。 公式:T(n)=O(f(n)),T(n) 表示代码执行的时间;n表示数据规模的大小;f(n) 表示每行代码执行的次数总和空间复杂度:表示内存的消耗。 公式:S(n)=O(f(n)),S(n) 表示代码所需的空间:n为问题的规模,f(n)为语句关于n的所占存储空间2.时间复杂度分析法则(2.1)O(1)复杂度int i = 8;in..原创 2020-12-14 04:51:43 · 360 阅读 · 0 评论
分享