现在位置: 首页 > 算法 > 文章
2020年02月17日 算法 ⁄ 共 4983字 评论关闭
  本文将介绍几种常见的限流(Rate Limiting)算法,以及各自的优缺点,之后将介绍分布式集群环境下如何设计限流算法,最后展示Kong是如何实现的。   限流(Rate Limiting, 即速率限制)通过限制每个用户调用API的频率来防止API被过度使用,这可以防止他们因疏忽或恶意导致的API滥用。在没有速率限制的情况下,每个用户可以随心所欲地请求,这可能会导致“峰值”请求,从而导致其他用户得不到响应。在启用速率限制之后,它们的请...
阅读全文
2020年02月17日 算法 ⁄ 共 2722字 评论关闭
  本文实例讲述了PHP自定义函数实现格式化秒的方法。分享给大家供大家参考,具体如下:   function vtime($time) {   $output = '';   foreach (array(86400 => '天', 3600 => '小时', 60 => '分', 1 => '秒') as $key => $value) {   if ($time >= $key) $output .= floor($time/$key) . $value;   $time %= $key;   }   if($output==''){   $output=0;   }   return $output;   } ...
阅读全文
2020年02月14日 算法 ⁄ 共 3595字 评论关闭
  桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:   在额外空间充足的情况下,尽量增大桶的数量。   使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中。   同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。   1. 什么时候最快   当输入的数据可以均匀的分配到每一个桶中。   2. 什...
阅读全文
2020年02月14日 算法 ⁄ 共 5368字 评论关闭
  基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。   1. 基数排序 vs 计数排序 vs 桶排序   基数排序有两种方法:   这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:   基数排序:根据键值的每位数字来分配桶;   计数排序:每个桶只存储单...
阅读全文
2020年02月14日 算法 ⁄ 共 1167字 评论关闭
  用最简单的方法,通俗易懂的方法计算结构体大小。   结构体计算要遵循字节对齐原则。   结构体默认的字节对齐一般满足三个准则:   1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;   2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);   3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译...
阅读全文
2020年02月14日 算法 ⁄ 共 4092字 评论关闭
  C 语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。   整数转字符串   1、拓展函数 itoa   itoa (表示 integer to alphanumeric)是把整型数转换成字符串的一个函数。   windows 环境下,在 头文件中有:   char* itoa(int value,char*string,int radix);//value: 要转换的整数,string: 转换后的字符串,radix: 转换进制数,如2,8,10,16 进制等。   函数源码:   ch...
阅读全文
2020年02月14日 算法 ⁄ 共 4872字 评论关闭
  编程中经常用到时间表达及转换的函数,它们都定义在 time.h 库函数中,在此做一下总结,以方便后续查看使用。   几个时间概念:   1:Coordinated Universal Time(UTC):   协调世界时,又称世界标准时间,也即格林威治标准时间(Greenwich Mean Time,GMT),中国内地的时间与UTC得时差为+8,也即UTC+8,美国为UTC-5。   2:Calendar Time:   日历时间,是用"从一个标准时间点到此时的时间经过的秒数"来表示的时间...
阅读全文
2020年02月14日 算法 ⁄ 共 8116字 评论关闭
  最短路径是图论中一个很经典的问题:给定图G(V,E),求一条从起点到终点的路径,使得这条路径上经过的所有边的边权之和最小。   对任意给出的图G(V,E)和起点S、终点T,如何求从S到T的最短路径。解决最短路径问题的常用算法有Dijkstra算法、Bellman-Ford算法、SPEA算法和Floyd算法。   1.Dijkstra算法   Dijkstra算法(读者可以将其读作“迪杰斯特拉算法”)用来解决单源最短路问题,即给定图G和起点s,通过算法得到S到达其...
阅读全文
2020年02月13日 算法 ⁄ 共 5357字 评论关闭
  Java的volatile关键字用于标记一个变量“应当存储在主存”。更确切地说,每次读取volatile变量,都应该从主存读取,而不是从CPU缓存读取。每次写入一个volatile变量,应该写到主存中,而不是仅仅写到CPU缓存。   实际上,从Java 5开始,volatile关键字除了保证volatile变量从主存读写外,还提供了更多的保障。我将在后面的章节中进行说明。   变量可见性问题   Java的volatile关键字能保证变量修改后,对各个线程是可见...
阅读全文
2020年02月13日 算法 ⁄ 共 1415字 评论关闭
  1. 问题可分而治之且 BFS   首先, 问题必须是可分而治之的, 并在最后合并. 分而治之(递归)是为了穷举, 合并是为了找最优.   Result r(costs[], target){   args = [];   for(cost in costs){   tmp = r(costs - cost, target - cost) + cost;   args += tmp;   }   return G(args);   }   虽然上面的代码是 DFS, 但形式上是 BFS, 而且也应该写成 BFS, 只不过 BFS 的代码不简洁而已.   思考: 与贪婪算...
阅读全文