Set与二分法效率

​前言

 stl中有set用于匹配是否存在,内部利用rbtree机制,是一种高效算法

但在c语言环境下,stl是不能直接使用,因此需要用其他算法来代替,二分法也是一种快速排序方法,代码逻辑也比较简单。

由于项目中,会碰到协议的筛选,例如跟进协议ID筛选,然后需要继续处理;

此时由于前端输入是广播数据,往往大部分数据都是"不需要处理"的,如果不进行优化,此处效率的确低下.

 

本来没有这篇作业的,由于测试结果并不是set效率都高于二分法的

测试条件限制:        

  1. 每次都是拿不存在此数组的数据进行比较(最差情况下)
  2. 最大数组长度为102,然后50,25,12   (实际项目中一般以20~30居多)
  3. 测试一轮是循环1000000次,目的是容易比较结果
  4. 测试环境为windows环境,CPU能力较高,时间仅用于判断趋势
  5. 测试时间结果,每次并不一样,但总在一点范围内

 

先看数据截图:

二分法数据测试

被测数组长度为 102


被测数组长度为 50


被测数组长度为 25


 被测数组长度为 12


 

如果使用set

  被测数组长度为 102

 

 被测数组长度为 50


 被测数组长度为 25


 被测数组长度为 12


 

 再来一张对比表格

 

 

 

结论:

  1. 当数组本身比较少的时候(小于20),其实还是二分法比较快;也就是说如果本身就是小数组的时候,还不如用二分法。
  2. 数组成倍增加,二分法耗时也会接近成倍增加;而set明显优化好很多
  3. set适合数组比较大,而且随着数组越大,优势越明显
  4. 可能数组本身不大,且类型为基本类型,set使用count 与find去比较是否存储,几乎没有啥变化
posted @ 2023-02-18 16:07  小刚学长  阅读(35)  评论(0编辑  收藏  举报