![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
the_dog_tail_grass
一个在互联网搬砖的程序猿,目前复旦大学非全日制软件工程硕士在读
展开
-
DPDK的meter库(双速率三色算法)
前面一篇讲了dpdk的单速率三色桶算法,这篇解析一下双速率三色桶。流程和单速率完全相同,区别在于数据结构以及颜色判断的逻辑上。仍然看色盲模式相比于单速率模式,我感觉双速率模式更好理解,有两个桶C和P以及两个令牌产生速率。两个桶同时跟随时间增加令牌数,超过容量则丢弃。报文速率如果介于cir和pir,超过cir部分的报文返回黄色,低于cir的返回绿色。报文速率超过pir,所有超过pir部分的报文都返回红色,介于cir和pir部门的返回黄色,低于cir的返回绿色报文速率低于cir,所有的报文绿色~原创 2020-08-29 13:10:53 · 1066 阅读 · 0 评论 -
DPDK的meter库(单速率三色算法)
DPDK提供了丰富的基础库,其中就有利用令牌桶来实现meter功能,可以参考例子中的qos_meter。这篇博客主要就是解读这个例子。令牌桶算法分为单速率三色算法和双速率单色算法,单速率只有一个速率桶C桶以及一个EBS。关注点在于报文的突发尺寸,双速率有两个速率桶C和P,更关注突发的报文速率。首先来看单速率三色,令牌产生的速率是cir,C桶容量为cbs,当C桶满时,再去添加E桶,E桶也满时,令牌丢弃。在取令牌时,先取C桶,C桶满足,不管E桶,E桶保持不变,C桶减少相应数量令牌返回绿色。C桶不满,原创 2020-08-29 11:18:26 · 1510 阅读 · 0 评论 -
各种排序算法耗时比较
我们知道,各个排序算法的时间复杂度从快速排序的nlogn到冒泡的n^2,但是即使时间复杂度相同,其具体的耗时也是不同的。今天就来实地测测每种算法到底耗时如何一号选手:冒泡排序。我们知道冒泡排序算的上是最慢的一种排序方法了#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<...原创 2019-10-11 16:01:49 · 3932 阅读 · 0 评论 -
排序算法总结--树排序
树排序是利用搜索二叉树的性质来进行排序。我们知道,搜索二叉树的中序遍历输出就是一个有序的序列。所以我们可以根据跟定的一组元素,构造一个搜索二叉树。所以算法的就分为了两步:1.构造一个搜索二叉树 2.中序遍历输出来看代码实现首先我们创建一个搜索二叉树//二叉排序树节点的数据结构typedef struct b_node{ int value;//节点的值 ...原创 2019-08-31 11:39:36 · 2894 阅读 · 0 评论 -
排序算法总结--选择排序
选择排序和冒泡排序的思想比较像。冒泡排序的最里层循环结束后,最大的元素会“沉”到序列的最下面。我们是通过一次次的比较大小然后进行交换的方式实现的。那如果我们先找到整个序列最大的元素,然后直接将其放在序列的最后面(或者是先找到最小的元素,然后将其放在序列的最前面),也可以实现排序的目的。所以我们就得到了选择排序算法的核心思想1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。...原创 2019-08-29 15:26:06 · 153 阅读 · 0 评论 -
排序算法总结--希尔排序
希尔排序是一种改进的插入排序。前面我们讨论过插入排序在序列的大多数元素都是有序的情况下性能较好。所以希尔排序算法将原始的插入排序算法做了改进,每次比较不是相邻两个元素进行比较,而是隔几个元素之间进行比较,称为步长dk。通过不断缩小dk的值,逐步使得序列中元素有序。当dk缩小到1时,序列中的元素都已经基本有序,再进行插入排序就比较轻松了。算法步骤:1.选取合适的步长。可以选取元素个数的一半,...原创 2019-08-29 14:59:11 · 265 阅读 · 0 评论 -
排序算法总结--插入排序
插入排序,顾名思义就是将一个元素插入到适当的位置。其算法核心是1.将第一个元素看做是个单独的序列。显然,只有一个元素的序列肯定是有序序列。2.然后将和第二个元素做比较。如果第二个元素小,那么就将第二个元素插入到第一个元素前面,这样我们就得到了一个拥有两个元素的有序序列。3.依次扫描剩余元素,每扫描到一个元素,就将其插入到前面已经排好序的序列中。4.扫描完最后一个元素,插入到其适当的...原创 2019-08-29 14:09:19 · 110 阅读 · 0 评论 -
排序算法总结--冒泡排序算法
假设排序要求是从小到大冒泡算法可以说是最直观,最简单的算法了。核心思想是让小的元素像气泡一样往数组“上面”移动。算法固定的三个步骤:* 1.外层循环决定比较的轮数: 数组长度-1(arr.length - 1)* 2.内层循环决定每一轮比较的次数 :内层循环次数 = 外层循环总次数-外层循环已经完成的次数(arr.length - 1 - i)* ...原创 2019-08-28 15:01:12 · 234 阅读 · 0 评论