搜索和更新整数值列表最快的数据结构是什么?
What is the fastest data structure to search and update list of integer values?
我必须维护一个无序整数列表,其中整数的数量未知。它可能随着时间的推移而增加或减少。我需要经常更新这个整数列表。我试过用向量。但是它真的很慢。数组似乎更快,但由于列表的长度不是固定的,因此需要花费大量时间来调整它的大小。
如果值的顺序不重要,则使用散列表。时间是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::set
或std::unordered_set
比std::vector
更适合您的需求。
如果顺序数据结构不能满足需求,您可以尝试查看树(二进制,AVL, m-way,红黑等)。我建议你尝试实现AVL树,因为它产生一个平衡或接近平衡的二叉搜索树,这将优化你的操作。有关AVL树的更多信息:http://en.wikipedia.org/wiki/AVL_tree
deque没有调整大小的代价,但如果它是无序的,它的搜索时间是线性的,它在自己中间的删除和插入操作时间甚至比vector更值得。
如果你不需要搜索数字的值,hashmap或map可能是你的选择。没有调整大小的成本。,然后将映射的键设置为数字的索引,并将值设置为数字的值。查找和插入操作优于线性操作
std::list绝对是为这样的问题而创建的,在list中添加和删除元素不需要像在vector中那样重新分配内存。然而,由于列表的非传染性内存分配,搜索元素当然可能是一个痛苦的经历,但如果您不经常搜索它的条目,它可以被使用。
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- 表示图像矩阵的理想数据结构是什么?
- 存储大量会话的最有效数据结构是什么?
- 给定 C# 代码的正确数据结构是什么
- 可用于存储和管理整数集合的最佳C++数据结构是什么
- 通常用于将输入映射到显示器的数据结构是什么
- A*开放集的最佳数据结构是什么
- C++中的地图数据结构是什么
- 可以处理随机访问和键搜索的数据结构是什么?
- C++ STL 堆栈中使用的基本数据结构是什么?
- 从中间删除元素的最佳数据结构是什么
- 设计PRIM算法最有效的数据结构是什么
- c++中顺序插入/读取/删除最快的数据结构是什么?
- 在我的神经网络程序中使用的最有效的数据结构是什么?我的程序需要动态分配吗?
- 当需要修改元素时,另一种类似集合的数据结构是什么?
- 搜索和更新整数值列表最快的数据结构是什么?
- 一般阶跃函数的最佳数据结构是什么?
- 池容器的最佳数据结构是什么?
- 构建图的最佳标准数据结构是什么?
- 插入和搜索元素最快的数据结构是什么