【发布时间】:2022-06-10 21:30:28
【问题描述】:
我有一个 uint32_t 类型的数组,大小为 1024。
int32_t *handle_generator= calloc(1024, sizeof(uint32_t));
我将使用这个数组 handle_generator 来为特定类型的元素生成句柄 - myType_t。
当创建myType_t 的元素时,我必须从数组handle_generator 中找到第一位为零并返回该索引值。我将使用这个值作为我新创建的元素的句柄。
myType_t 类型的已创建元素也可以被销毁。在这种情况下,该被破坏元素的句柄值变得空闲并且可以重用。所以数组handle_generator(匹配那个句柄值)中的索引应该设置为0。
在多次创建和删除元素myType_t 后,数组handle_generator 中会出现一系列0 和1 位。
在这种情况下,找到第一个值为 0 的位的有效方法是什么?
最简单的方法是通过检查每个位来遍历数组handle_generator,其时间复杂度为0(n);其中 n 是位数。
例如,经过多次增删改查,如果handle_generator数组中的位如下
0th 13th
| |
v v
+-------------------------------------------------------------------------+
|1|1|1|1|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|1|1|1|1|1|0|1|1|1|1|1|1|...|0|0|0|
+-------------------------------------------------------------------------+
如果我们必须找到数组中的第一位 - handle_generator,其值为 0,那么它位于索引 13。那么解决这个问题的最有效算法是什么?
【问题讨论】:
标签: arrays algorithm search bit-manipulation hashtable