寻找快速初始化和快速查找的数据结构 (O(1))
Looking for a data structure that's fast to initialize and fast to lookup (O(1))
我需要一个数据结构,我想在其中存储有关我在操作期间已经处理的实例的信息。 由于限制,我无法将其存储在实例本身中(例如,因为我可以并行执行操作。
具体来说,我要存储信息的实例有一个唯一的编号,因此我可以使用该唯一编号来存储信息,而不是指向实例的指针。
我的第一个解决方案是使用std::set<Instance *>
。 每次处理实例时,我都会将其添加到集合中,以便我知道我已经处理了该实例。
- 优点:初始化速度非常快
- 缺点:查找不是O(1(,而是O(logN(
我的第二个解决方案是使用std::vector<bool>
(实际上是std::vector<byte>
因为布尔向量具有特定的特化,这使得它比非布尔向量慢(。 实例的唯一编号可以用作向量的索引,并且在向量中仅包含 true 或 false 以指示我们是否已经处理了该实例(幸运的是,我的唯一编号从 1 开始计数(。
- 优点:查找量为 O(1(
- 缺点:初始化如果相对较慢,因为 std::vector 需要显式初始化每个元素(并且可能也是独立的(
我也可以使用 C 风格的数组(我可以在上面使用 memset(,但由于实例的数量(或唯一数字的数量(事先是未知的,我需要编写自己的代码来扩展数组,memset 数组的其余部分,...(这不是很难,但这是我想避免的(。
有没有其他类型的数据结构可以非常快速地初始化,并且具有O(1(查找时间?
您可以尝试boost::unordered_set
或新的C++11 std::unordered_set
。它们是基于哈希的容器,而不是像 std::set 这样的树。
好吧,用这么简单的识别方法...我会使用哈希表。
你不能用boost::unordered_map
或std::unordered_map
吗?
当然,如果你想要保证 O(1( 插入而不是摊销的 O(1( 插入,你可能更喜欢更复杂的实现,但它应该让你开始。
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 用于添加和查找查询的适当数据结构
- 用于查找元素的数据结构
- C++ 数据结构队列:使用 for 循环查找队列中最大的元素
- 查找索引数据结构,例如`sTD :: vector`(非数组)
- 是否有具有对数时间插入、删除和查找(带距离)的排序数据结构
- 用于在具有更新查询的二维矩阵中查找最大值的最佳数据结构
- 在任意位置进行快速查找和删除的Deque样数据结构
- 最适合查找最小值的数据结构
- C++数据结构以查找多维数组中的相邻值
- 寻找快速初始化和快速查找的数据结构 (O(1))
- 尝试字典上的数据结构以查找押韵的单词
- 用于在数据结构中查找" "之间的字符串的代码
- 用于存储地址的单列列表的数据结构,更好地在C++中查找O(1)
- 最快的数据结构或算法,可快速查找 2 个键
- 什么是提供O(1)查找的C++数据结构
- 用于查找包含数字的非重叠范围的有效数据结构
- 并查找数据结构
- 支持表查找的数据结构