java - C++/ java : Efficiently find a set in the collection containing given value

标签 java c++ optimization set

假设我们有一组互斥集合
{A,B,C,D} 其中 A = {1,2,3},B = {4,5,6},C = {7,8,9}, D = {10,11,12}
给定一个值 Z,例如 3,我希望它返回集合 A 的索引,因为 A 的成员是 3。

问题是我如何使用 C++ 或 JAVA 高效地完成它。

我当前的解决方案:将 A、B、C、D 作为 HashSet(或 C++ 中的 unordered_set)存储在容器中并循环遍历每个集合,直到包含 Z 找到了。
问题在于容器中存储的集合数量的复杂度为 O(n)。

有什么方法(或任何数据结构来存储这些集合)比 O(n) 更快地做到这一点吗?

最佳答案

您可以创建一个将值映射到集合 id 的映射(例如,它应该将 1、2、3 映射到 A,将 4、5 和 6 映射到 B 等等)。使用 HashMap ,它可以平均在 O(1) 内工作。

关于java - C++/ java : Efficiently find a set in the collection containing given value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24094784/

相关文章:

performance - 使两个直方图成比例的算法,最小化了删除的单位

python - 如何优化此 Python 代码以使其运行得更快?

Java - 向 Slack Webhook 发送消息

c++ - 迭代 std::tuple 的简单方法是什么?

java - 作为变量的通用参数 - Java

c++ - 使用 drawContours 绘制点序列

c++ - 就地构建 std::function 目标

c++ - 为什么编译器要为这个循环的每次迭代写入一个成员变量到内存中?

java - Oracle 是 Java 中 BINARY_INTEGER 类型的 NUMBER(5) 索引表吗?

java - 行家: (use -source 5 or higher to enable static import declarations)