算法
文章平均质量分 71
KeaLoo
一名即将步入职场的Java小菜狗
展开
-
算法与数据结构核心套路
目录数据结构的存储方式数据结构的存储方式数据结构的底层存储方式只有两种:数组(顺序存储)和链表(链式存储)分析问题用递归思想:自顶向下,从抽象到具体“队列”、“栈”,既可以使用链表实现,也可以使用数组实现。用数组实现,要处理扩容和缩容的问题,用链表实现,没有这个问题,但是需要更多的内存空间存储节点指针。“图”,邻接表就是链表,领接矩阵就是二维数组。用邻接矩阵判断连通性很迅速,并可以进行矩阵运算解决一些问题,但是如果图比较稀疏则很耗费空间。邻接表比较节省空间,但是操作效率比不上邻接矩阵。“哈原创 2021-11-10 23:01:17 · 462 阅读 · 0 评论 -
算法与数据结构基础(Java)
目录栈(Stack)栈的概述栈的常规操作队列(Queue)队列的概述队列的常规操作链表(LinkedList)链表的概述链表的常规操作集合哈希表二叉搜索树红黑树图栈(Stack)栈的概述栈(stack),它是一种受限的线性质,后进先出(LIFO)其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底栈的常规操作方法作用push(e)添加一个新元素到栈顶pop()移除栈顶元素,同时返回被移除的元素peek()返回栈顶元素,原创 2021-10-17 23:18:53 · 208 阅读 · 0 评论 -
LRU缓存实现与原理
概念LRU是 Least Recently Used 的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。操作系统里,在内存不够的场景下,淘汰旧内容的策略。LRU … Least Recent Used,淘汰掉最不经常使用的。因为计算机体系结构中,最大的最可靠的存储是硬盘,容量很大,并且内容可以固化,但是访问速原创 2021-09-14 11:19:22 · 981 阅读 · 0 评论 -
海量数据处理计算及算法实现总结
此博客主要讲解海量数据处理计算及算法实现,了解海量数据处理方法可移步海量数据处理方法总结,了解数据处理问题可移步海量数据处理问题总结方法回顾分而治之 / Hash 映射 + Hash 统计 + 堆 / 快速 / 归并排序双层桶划分BitMap / Bloom FilterTrie 树 / 数据库索引 / 倒排索引外排序分布式处理之Hadoop / Mapreduce海量数据计算计算容量在解决问题之前,要先计算一下海量数据需要占多大的容量。常见的单位换算如下:1 byte = 8原创 2021-09-13 16:56:16 · 1178 阅读 · 0 评论 -
海量数据处理问题总结
目录此博客主要总结海量数据处理问题,如对海量数据处理方法不是很了解,可移步海量数据处理方法总结原创 2021-09-12 16:17:35 · 797 阅读 · 0 评论 -
海量数据处理方法总结
目录海量数据处理参考链接数据时代来临,数据量的爆炸式增长是最为显著的特征。当高性能硬件的普及还跟不上这样的数据大潮时,如何在有限的时空资源内处理海量数据成为了计算机科学以及数理统计等领域最大的挑战。海量数据处理海量数据处理,是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。海量数据处理的困难用一句话概括,就是时间和空间资源不够。具体来说,时间受限:无法在有限时间内,完成针对海量数据的某项处理工作;空间受原创 2021-09-11 22:33:17 · 2291 阅读 · 0 评论 -
布隆过滤器(Bloom Filter)的原理和实现
假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能会形成“环”。为了避免形成“环”,就需要知道蜘蛛已经访问过那些URL。给一个URL,怎样知道蜘蛛是否已经访问过呢?把这个问题抽象出来,就是说:现在需要一种算法(工具),帮助我们实现一种高效而准确的,元素在集合中的存在性判断。为了解决上面说的这一类问题,人们从简入难,想出了很多办法:将访问过的URL保存到数据库。用HashSet将访问过的URL保存起来。那只需接近O(1)的代价就可以查到一个URL是否被原创 2021-09-11 16:18:20 · 699 阅读 · 0 评论 -
STL容器介绍
STL容器分类:一:序列容器:vector、list、deque、string.二 : 关联容器:set、multiset、map、mulmap、hash_set、hash_map、hash_multiset、hash_multimap三: 其他的杂项:stack、queue、valarray、bitsetSTL各个容器的实现vector内部数据结构:数组。随机访问每个元素,所需要的时间为常量。在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性转载 2021-09-10 22:19:04 · 418 阅读 · 0 评论 -
常用限流算法及原理
目录为什么限流常用算法计数器算法(固定窗口限流+滑动窗口限流)固定窗口算法滑动窗口限流漏桶算法令牌桶算法限流算法比较为什么限流限流即限制流量,通过流量控制来保证系统接收到的请求量在正常范围内。由于任何系统的吞吐量都有上限,所以必须设置合理的限定值,以避免流量洪峰将整个系统打垮。假如一个系统可以承载的网络带宽是1G,如果流量大于1G就会导致带宽打满,影响整个服务。在现实生活中,限流场景也随处可见:例如银行的叫号系统、餐厅的排队系统,如今的疫情,政府也是全力排除隐患,保证医疗系统健康运行。限流的目的只有原创 2021-09-10 16:23:56 · 863 阅读 · 0 评论 -
负载均衡原理及算法
目录背景概述原理分类按照软硬件分类硬件负载均衡软件负载均衡按照地理结构分类本地负载均衡全局负载均衡按照实现技术DNS负载均衡IP负载均衡链路层负载均衡混合型负载均衡按照OSI层次二层负载均衡(数据链路层)三层负载均衡(网络层)四层负载均衡(传输层)七层负载均衡(应用层)部署方式路由模式桥接模式服务直接返回模式常用算法轮询加权轮询IP哈希比率(Ratio)优先权(Priority)最少连接最快模式(Fastest)观察模式(Observed)预测模式(Predictive)动态性能分配(Dynamic Rat原创 2021-09-09 11:14:24 · 1875 阅读 · 0 评论 -
链表(评测机)
public class LinkedList { class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } } public ListNode head; public ListNode tail; publi原创 2021-09-06 16:34:17 · 137 阅读 · 0 评论 -
树的遍历(评测机)
public class Tree { class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val =原创 2021-09-06 16:32:20 · 136 阅读 · 0 评论 -
数组元素交换
一般来说,交换数组中两个数字的函数如下:int temp = arr[i];arr[i] = arr[j];arr[j] = temp;经典的数字交换题目:如何在不引入第三个中间变量的情况下,完成两个数字的交换。这里可以用到一个数学上的技巧://先加后减arr[j + 1] = arr[j + 1] + arr[j];arr[j] = arr[j + 1] - arr[j];arr[j + 1] = arr[j + 1] - arr[j];//先减后加arr[j + 1] = ar原创 2021-08-13 11:45:22 · 553 阅读 · 0 评论 -
二分查找法隐藏bug
二分查找法隐藏bug代码演示bug 及解决方案代码演示力扣704. 二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解原创 2021-07-19 12:13:31 · 231 阅读 · 0 评论