算法
文章平均质量分 83
掂掂三生有幸
励志成为Java领域优质创作者,接商务合作、产品推广
展开
-
为什么亿级数据量时要使用位图?位图和布隆过滤器有什么关系?
我们知道Byte表示字节,一个字节等于8bit,这里的bit就和位图有关系。在上面的例子中,我们不是要存放1千万个整数嘛,那就申请一个具有1千万个bit的数组,用每个bit(二进制位)来表示一个整数,当前bit为0表示不存在这个整数,为1表示该整数就存在。虽然数量是1千万个,但是每个数的范围是1到1亿,所以我们需要1亿个bit,换算下来,就是12.5MB,和刚才的40MB相比,节省的不是一点点。下一篇会实战使用位图来实现抖音号、淘淘号等需要生成看似无序却呈趋势递增的号段式ID。原创 2022-10-21 19:23:26 · 4951 阅读 · 3 评论 -
比红黑树更快的跳表到底是什么数据结构?如何实现?
传送门我在之前在头条介绍了十分优秀的二分查找算法,但是它只能作用于有序数组上,查找起来比较方便,但是数组中插入和删除元素是比较麻烦的;那么有没有办法让二分查找也能作用于有序链表上,从而达到查找、插入和删除元素都十分的快速呢?对于普通的有序列表来说,当然不能实现我们的目标,如下查找的时间复杂度为O(n);我们可以基于原始链表建立一个 索引层,比如每两个节点提取一个节点到索引层:如此,两种数据结构我们查找元素16的比较次数分别为10次和8次,确实能提高查询速度;原创 2022-10-09 23:38:51 · 1896 阅读 · 6 评论 -
深入理解时间复杂度和空间复杂度
数据结构和算法之间有什么关系?为什么经常把它们放在一起来研究和分析呢?我们为什么要掌握和使用复杂度分析方法?和使用真实数据测试相比,它的优缺点是什么?有哪些常见的算法时间复杂度?它们之间的优劣顺序是怎样的?有哪些常见的算法空间复杂度?如何理解最好、最坏和平均时间复杂度?原创 2022-10-02 23:24:30 · 1473 阅读 · 3 评论 -
【算法专题】动态规划的理论与实战
在前面的文章中,我们介绍了贪心算法,它们和动态规划一样,通常都可以用来解决多阶段决策最优解的问题。但是在一些场景下,使用它们的话,并不能解决或者不能很好地解决这种多阶段决策最优解的问题。我们来看一个例子,假设我们背包能装15公斤重的东西,现在地上总共三种重量的物品若干,分别是1公斤、5公斤和11公斤,那么如何才能使得背包装满15公斤,并且物品数量最少?如果使用贪心算法的话,每一步都选择当下最优的,那么肯定会选择11+1+1+1+1,那么背包中总共会有5件物品。如果使用回溯算法的话,就会对1、5、1.....原创 2022-07-08 14:49:04 · 965 阅读 · 13 评论 -
【算法专题】使用递归取数组的平均值(向下取整)
基本思想是,当索引达到递归函数中数组的长度时。因此,您所要做的就是将数组中每个索引点的总和相加,然后继续将更新后的索引和总和传递给递归函数。class Test { public static void main(String[] args) { int newClassSize[] = {10,2,3}; // User Input let say double average = findAverage(newClassSize); Sy原创 2022-01-22 11:44:01 · 979 阅读 · 0 评论 -
【算法专题】贪心算法的介绍及使用场景
求解一个问题时有多个步骤,每个步骤都选择当下最优的那个解,而不用考虑整体的最优解。通常,当我们面对的问题拥有以下特点的时候,就可以考虑使用贪心算法。比如,我们举个例子,仓库里面总共有五种豆子,其对应的重量和总价值如下,现在我们有一个可以装100KG重量的袋子,怎么装才能使得袋子中的豆子价值最大?我们首先看看这个问题是否符合贪心算法的使用场景?限制值是袋子100KG,期望值是袋子里面的价值最高。所以是符合的。那么我们尝试着应用下贪心算法的方法,每一个步骤都寻找当下的最优解,怎么做呢?把仓库里面的每种豆子价值除原创 2022-07-07 10:21:38 · 1083 阅读 · 0 评论 -
【算法专题】秒懂如何运用二分查找算法
对于给定的已经有序的数列,我们需要在该数列中查找是否存在某个元素。每次都与数列最中间的元素进行比较,可以缩小一半的查找区间,直至找到目标元素或者区间被缩小为0,元素不存在。比如下面的数列中,我们想要查找元素19,那么大致的过程就是这样的:二分查找过程示意图使用代码实现如下:二分查找的时间复杂度是O(logn),对数阶时间复杂度的算法效率非常高。二分查找必须依赖以下条件才能发挥作用:查找第一个等于给定值的元素查找最后一个等于给定值的元素查找第一个大于等于给定值的元素查找最后一个小于等于给定原创 2022-07-07 10:10:21 · 475 阅读 · 0 评论 -
【算法专题】秒懂八种排序算法的原理
最经典最常用的排序算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序和桶排序。这些排序算法可以按照时间复杂度分为三类:最好、最坏和平均情况下的时间复杂度;原始数据的杂乱程度会导致同一种算法在不同情况下的时间复杂度呈现不同量级的差异,所以在选择排序算法的时候,需要给出这三个指标,结合实际业务情况的原始数据,来选择算法。时间复杂度的系数、常数和低阶;不同的排序算法可能会出现算法复杂度处在同一量级的情况,此时就需要根据时间复杂度的系数、常数和低阶来决定使用哪一种算法。算法的比较次数和移动原创 2022-07-07 10:06:57 · 1835 阅读 · 11 评论