第六章 整数集合

2019-11-03  本文已影响0人  亮亮_ff3d

6.1整数集合的实现

结构表示:

typedef struct inset{
      //编码方式
      uint32_t encoding;
      //集合包含的元素数量
      uint32_t length;
      //保存元素的数组
      int8_t contents[];
}intset;
WechatIMG64.jpeg

虽然intset结构将contents属性声明为int8_t类型的数组,实际上contents数组不保存任何int8_t类型的值,真正的类型取决于encoding属性的值:

当向一个底层为int16_t数组的整数集合中添加一个int64_t类型的数值时,整数集合中所有的元素都会被转换为int64_t类型!

6.2升级

升级步骤:

  1. 根据新元素的类型,扩展整数集合底层数组的空间大小,并为新元素分配空间。
  2. 将底层数组现有的所有元素都转换成与新元素相同的类型,将类型转换后的元素放到正确的位置上,在放置元素过程中,继续维持底层数组的有序性质不变
  3. 将新元素添加到底层数组里面

每次向整数集合添加新元素都可能会引起升级,每次升级都需要对底层数组中已有的所有元素进行类型转换;时间复杂度为O(n)

6.3升级的好处

升级策略有两个好处:

6.4降级

整数集合API

函数: 作用 时间复杂度
intsetNew:创建一个新的整数集合 O(1)
intsetAdd:将给定的元素添加到整数集合里面 O(n)
intsetRemove:从整数集合中移除给定元素 O(n)
intsetFind:检查给定值是否存在于集合 O(logN)
intsetRandom:从整数集合中随机返回一个元素 O(1)
intsetGet:取出底层数组在给定索引上的元素 O(1)
intsetLen:返回整数集合包含的元素个数 O(1)
intsetBlobLen:返回整数集合占用的内存字节数 O(1)
上一篇 下一篇

猜你喜欢

热点阅读