数据结构和算法
文章平均质量分 79
freesOcean
这个作者很懒,什么都没留下…
展开
-
布隆过滤器在UV统计中的应用
一.内存瓶颈用Flink统计UV(Unique Visitor:网站独立访客数)这个指标时,需要根据UserId进行去重(同一个用户的多个操作,只会统计一次)。开始的思路是通过一个Set数据结构,保存一个窗口中所有的userID,因为Set数据结构本身具有去重功能,最后计算Set的Size即可得到统计指标。但是当时并未考虑将一个计算窗口中的所有数据存入Set中内存会是一个瓶颈。试想:一个小时的窗口,发生的用户访问行为,在某些大型网站上,可能是千万,甚至上亿级别。下面通过简单的定量分析说明:假如Use原创 2021-09-15 18:49:50 · 567 阅读 · 0 评论 -
动态规划算法思考
文章目录从背包问题说起暴力求解动态规划求解问题升级问题补充动态规划解题思路基本特征求解思路算法练习目录杨辉三角硬币找零八皇后问题棋盘走位最长子序列其他资料从背包问题说起背包问题是一个非常经典的算法问题,它有多种版本,这里我先描述一种简单的:有一个背包,它能装的最大物品重量是 capacity, 有若干物品 ,重量分别不等(物品无法切分)。问:背包中能装入的最大重量是多少?这是一个0-1背包问题,即物品要么选择装入,要么选择不装入,不能装物品的一部分。暴力求解因为每种物品有放入、或不放入两种原创 2020-12-24 15:53:06 · 206 阅读 · 1 评论 -
Hadoop排序算法笔记
文章目录归并排序代码实现:递归复杂度分析:是否是稳定算法:应用场景快排代码实现:递归复杂度分析是否是稳定排序:应用场景思考一堆排序概念:堆代码实现堆排序排序动态演示Hadoop的MapReduce阶段用到很多排序算法,这里总结做个记录。归并排序把一个要排序的数组,分为两部分,然后分别排序,最后将两个有序的集合再合并。而分开的两部分,可以采用同样的方法继续分解。这是一种典型的分治思想。代码实现:递归public class MergeSort{ //对数组a[p,r]区间的数进行排序原创 2020-09-28 11:00:25 · 635 阅读 · 0 评论 -
如何写出高效的链表代码
文章的标题显然要分具体的场景,不同场景下答案不同。但如果你已经点进来了,不妨花5分钟看看下面的内容。文章目录链表和数组区别面试题常考的链表算法LeetCode练习题索引总结:链表和数组区别 我们在问两个事物的区别时,我们实质是在问这两者分别是什么?而非真的关注差别本身。数组:数组是一种线性表数据结构。它用连续的内存空间,存储相同类型的数据。** 数组因为申请内的存是连续的内存...原创 2019-12-22 16:12:40 · 1565 阅读 · 0 评论 -
算法复杂度分析,一篇就够了
这篇文章你能得到哪些知识:1.复杂度分析方法大O表示法介绍2.常见的几种复杂度实例和拟合曲线3.详细分析Leetcode第一题的相关复杂度通过以上几点,让你对复杂度分析有一个全面的认知。文章目录为什么要进行复杂度分析?什么是大O表示法?几种常见的时间复杂度实例和拟合曲线:最好、最坏和平均情况下的复杂度分析LeetCode第一题实战分析:小结为什么要进行复杂度分析?讨论数据结构和算法,...原创 2019-11-27 01:02:34 · 12161 阅读 · 5 评论 -
NP完全问题&贪婪算法
文章目录什么是NP完全问题:贪婪算法:算法实现:如何识别NP完全问题:什么是NP完全问题: 算法导论中这样描述NP完全问题:在多项式时间内可解的问题是易处理的问题,在超多项式时间内解决的问题是不易处理的问题。NP完全问题就是后者。通俗说就是:以难解著称的问题,比如旅行商问题和集合覆盖问题,人们普遍认为这些问题,不可能编写出可快速解决的算法。旅行商问题:一个旅行商要前...原创 2019-09-24 18:33:54 · 3476 阅读 · 0 评论 -
Dijkstra(狄克斯特拉) 算法
文章目录加权图算法步骤算法实现:适用场景:负权边该算法是一种计算有向无环图最短路径的算法。加权图其中每个数字表示时间。要计算非加权图中的最短路径,可使用广度优先搜索。要计算加权图中的最短路径,可使用狄克斯特拉算法。算法步骤狄克斯特拉算法包含4个步骤。(1) 找出最便宜的节点,即可在最短时间内前往的节点。(2) 对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销。...原创 2019-09-21 22:12:15 · 1830 阅读 · 0 评论 -
广度优先搜索算法
解决最短路径问题的算法被称为广度优先搜索。要确定如何从双子峰前往金门大桥,需要两个步骤。(1) 使用图来建立问题模型。(2) 使用广度优先搜索解决问题。图图由节点和边组成。图用于模拟不同的东西是如何连接的。广度优先搜索广度优先搜索是一种用于图的查找算法,可帮助回答两类问题。❑ 第一类问题:从节点A出发,有前往节点B的路径吗?❑ 第二类问题:从节点A出发,前往节点B的哪条路径最短...原创 2019-09-12 18:46:51 · 887 阅读 · 0 评论 -
散列表基本概念
散列表概念:散列表 = 散列函数+数组(有时还要结合链表)实现的一种数据结构。散列函数:将输入映射到数字。并且输入相同,映射的数字相同。输入不同映射的数字不同。散列表的存储原理:对输入A生成唯一的hash,该hash对应到数组中的一个索引,在该索引上存放数据data,底层采用数组存储,意味着,获取数据时,只需要输入A,经过散列函数就可以获取对应的索引,从而立刻返回data.一些别名:映射,...原创 2019-09-06 09:25:37 · 701 阅读 · 0 评论 -
尾递归和递归简析
文章目录递归:递归的缺点:递归使用场景:尾递归递归:简单的来说递归就是一个函数直接或间接地调用自身。每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。示例代码如下: x==1就是基线条件def fact(x): if x == 1: retu...原创 2019-09-02 18:33:20 · 691 阅读 · 0 评论