算法
文章平均质量分 80
呆东
小菜鸡也有大梦想,努力拼搏,就是为了给那些曾经看轻你的人一记响亮的耳光
展开
-
限流算法总结
计时器限流计数器是一种比较简单的限流算法,用途比较广泛,在接口层面,很多地方使用这种方式限流。在一段时间内,进行计数,与阈值进行比较,到了时间临界点,将计数器清0 。优点:实现简单缺点:存在临界问题,如在12:01:00到12:01:58这段时间内没有用户请求,然后在12:01:59这一瞬时发出100个请求,OK,然后在12:02:00这一瞬时又发出了100个请求,那这某个1秒区间内,超过了每秒100次的请求阈值。代码实现public class CounterLimiter { pr原创 2021-04-24 19:32:58 · 899 阅读 · 0 评论 -
数据结构之—— 图
定义是一种非线性表结构数据。图中的每个元素称为顶点(vertex),图中的顶点与其他任意顶点建立的连接称为边(edge);。和顶点相连接的边的条数,称为度(degree)。对于图来说,又可以分为有向图和无向图。有向图,顾名思义就是带有方向的图;在有向图中,又将度细分为出度(Out-degree)和入度(In-degree)入度:表示有多少条边指向这个顶点。出度:表示有多少条边以这个顶点为起点,指向外部。无向图,就是没有方向的图;带权图(weighted graph):就是边上增加权重分数的一种原创 2021-02-21 14:33:13 · 1011 阅读 · 0 评论 -
数据结构源头 —— 数组和链表
一、数组定义:是一种线性表结构数据,它用一组连续的内存空间来存储具有相同数据结构的数据。线性表结构:数据排成一条线的数据结构,只有前后两种方法可以操作,常见的线性表结构数据有:数组、链表、栈、队列。 连续的内存空间:数组在申请内存地址时,内存空间必须是连续的,这样数组在随机访问某个数据的时间复杂度为O(1),但因为为了保存连续的内存结构其新增、修改时,存在挪动数据,性能低效。如何提供随机访问一个数组中的元素的时间复杂度为O(1)?如下图所示,一个int需要占用4字节来存储,每个存储空间都会被分配原创 2021-01-24 21:09:53 · 920 阅读 · 0 评论 -
数据结构之 —— 堆
一、定义堆是一种特殊的树结构,堆是一个完全二叉树,并且堆中的每个节点必须大于等于(或小于等于)其子树中的每个节点的值。对于大于等于其左右节点的堆称为“大顶堆”;小于等于其左右节点的堆称为“小顶堆”。二、存储方式因为堆是一个完全二叉树的结构,所以可以直接使用数组来进行保存数据,从数组的下标1开始存储数据节点,左子树存储的位置就是2*i的位置,右子树的位置就是2*i + 1的位置进行存储。三、堆提供的操作向堆中添加一个元素:插入数据后,为了保持堆的特性,需要对现有的结构进行调整,原创 2021-01-18 20:39:28 · 874 阅读 · 0 评论 -
5种常见排序算法
一、冒泡排序(Bubble Sort)只会操作相邻的两个数据,每次比较相邻的数据大小,不符合要求,就进行一次数据移动,一次冒泡会至少让一个元素处于正确的位置,冒泡n次后,数据符合要求。冒泡排序只会移动相邻元素的变动。是否是稳定排序:是是否是原地排序:是最好情况时间复杂度:O(n)最坏情况时间复杂度:O(n^2)平均情况时间复杂度:O(n^2)代码实现:public static void bubbleSort(int[] a) { for (int i =原创 2020-12-28 23:19:36 · 2788 阅读 · 0 评论