算法
文章平均质量分 67
代码界吴彦祖
Stay foolish,Stay hungry
展开
-
限流算法与设计思路
大家都知道目前的常规的限流算法有令牌桶和漏桶算法.今天就这些限流常见的算法给大家做一个详细的介绍与实现思路. 固定窗口 这个算法是最为简单的一个算法,Redis存储key和value,key是任意的,value代表一秒内请求的值,设置一个计时器每个一秒钟将限流的key设置为0. 当有请求来临时执行incr key,key超出了一定值后进行限流. 滑动窗口 tcp就是使用的滑动窗口策略来限制发送的速率.但是tcp的滑动窗口是基于发送和接收的包的大小来限制发送的速率. 我们根据其思想可以改为基于时间的滑动窗.原创 2020-07-28 09:28:47 · 343 阅读 · 0 评论 -
大数据量下的平均数求和:迭代法和归并法
我们在实际的开发中如果遇到很大数据量的求和,且累加和超过了uint64的存储范围.我们需要用到以下的解法进行求和.目前这种方式只适用于平均数在uint范围内,如果不在这个范围的考虑使用系统的函数库. 迭代法 迭代法是一种数学算法: {Xi}进行平均数计算,总数为t. 将t换为c(t+1)为t+1个的平均数. 理解: 当均值计算到c(t)时,说明前t个数的均值为c(t). x-c(t)得出x和c(t)的差值使得t+1个数的均值为c(t)然后将差值除以t+1,那么c(t)+差值/(t+1)得到的就是t+.原创 2020-07-24 20:55:17 · 3649 阅读 · 0 评论 -
数据结构-二叉搜索树与AVL树
二叉搜索树 二叉搜索树属于二叉树,具有如下的性质: 1.节点的左子树不为空,那么左子树所有的节点的值都小于该节点的值 2.节点的右子树不为空,那么右子树所有的节点的值都大于该节点的值. 3.节点的左右子树都是二叉搜索树. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2zyxSEF-1594085941066)(evernotecid://8BF4008B-52C0-484E-A4B5-8EBD45F20215/appyinxiangcom/13973009/ENResou原创 2020-07-07 09:40:47 · 552 阅读 · 0 评论 -
算法-Morris遍历二叉树
Morris遍历 解决问题:在不使用栈不使用递归的情况下对二叉树按照先中后续方法进行遍历,空间复杂度为O(1),时间复杂度为O(n). 解决问题思路 1.初始化当前节点为current. 2.当前节点不为空: (1)当前节点没有左孩子,currrent=current->right (2)当前节点有左孩子,找到当前左子树的最右节点mostRight: (a)如果最右节点的右孩子不是当前节点,那么mostRight的右孩子指向current,current向左移动. (b)否则current向右移动,m原创 2020-06-28 20:06:49 · 477 阅读 · 0 评论 -
BFPRT算法
BFPRT算法介绍 BFPRT算法(中位数数组的中位数算法),是由五位发明者共同创建,主要解决TopK的问题在使用快速选择方法的最坏情况下的时间复杂度变为O(n^2)的问题,使得在最坏情况下仍为O(n). 中心思想:将数组拆分成每个包含五个元素的数组,将每个数组进行排序选出中位数,这些选出中位数的数组调用BFPRT取得中位数,得出一个用于分区操作的划分值.得出的这个划分值就可以完美的避免在最坏的情况下时间为O(n^2)的情况. 以下编码为了更好的理解.Top 0是指 第一小的数,以此类推. 快速选择方法介绍原创 2020-06-17 09:59:22 · 324 阅读 · 0 评论 -
跳表
跳表是一种实现较为简单的数据结构理解起来并不复杂,而且增删改的效率要高于平衡二叉搜索树,不涉及到左右子树的旋转操作. 实现逻辑 跳表理解起来并不困难,我们先来看一张图. 每一列看作是一个节点,它有着相同的值,最后一个节点为nil或者NULL,起始节点为头结点.图中最左侧是头结点,最后一个节点nil. 数据结构是这样的: struct { int val; struct n...原创 2020-02-28 09:54:39 · 281 阅读 · 0 评论