搜索和更新整数值列表最快的数据结构是什么?

What is the fastest data structure to search and update list of integer values?

本文关键字:数据结构 是什么 列表 更新 整数 搜索      更新时间:2023-10-16

我必须维护一个无序整数列表,其中整数的数量未知。它可能随着时间的推移而增加或减少。我需要经常更新这个整数列表。我试过用向量。但是它真的很慢。数组似乎更快,但由于列表的长度不是固定的,因此需要花费大量时间来调整它的大小。

如果值的顺序不重要,则使用散列表。时间是0(1)。我很确定你会在标准模板库中找到一个实现。

如果做不到这一点,那么展开树就会非常快,特别是如果你想保持列表的有序:每次操作的平摊成本为O(lnn),常数系数非常低。我认为c++的stdlib映射是这样的

了解你的数据结构

如果您对数组大小的动态增量感兴趣,您可以这样做。

current =0;
x = (int**)malloc(temp * sizeof(int*));
x[current]=(int*)malloc(RequiredLength * sizeof(int));

所以添加元素到数组,当元素填充在x[current]您可以通过

为元素添加更多空间
x[++current]=(int*)malloc(RequiredLength * sizeof(int));

这样做可以容纳RequiredLength更多的元素。

最多可以重复1024次,这意味着1024*RequiredLength元素可以是

被容纳了,这里它给了你机会在你想要的时候增加数组的大小。

总是可以通过X[n/1024] [n % 1024]访问第n个元素;

考虑到您的评论,看起来std::setstd::unordered_setstd::vector更适合您的需求。

如果顺序数据结构不能满足需求,您可以尝试查看树(二进制,AVL, m-way,红黑等)。我建议你尝试实现AVL树,因为它产生一个平衡或接近平衡的二叉搜索树,这将优化你的操作。有关AVL树的更多信息:http://en.wikipedia.org/wiki/AVL_tree

deque没有调整大小的代价,但如果它是无序的,它的搜索时间是线性的,它在自己中间的删除和插入操作时间甚至比vector更值得。
如果你不需要搜索数字的值,hashmap或map可能是你的选择。没有调整大小的成本。,然后将映射的键设置为数字的索引,并将值设置为数字的值。查找和插入操作优于线性操作

std::list绝对是为这样的问题而创建的,在list中添加和删除元素不需要像在vector中那样重新分配内存。然而,由于列表的非传染性内存分配,搜索元素当然可能是一个痛苦的经历,但如果您不经常搜索它的条目,它可以被使用。