algorithm - 从 map 集合中删除另一个 map 中包含的任何 map 的高效算法

标签 algorithm dictionary set

我已经设置了一组独特的映射(目前是 Java HashMap),并希望从中删除任何完全被该集合中的其他映射完全包含的映射(即如果 m.entrySet() 是一个,则从 s 中删除 m s 中其他 n 的 n.entrySet() 的子集。)

我有一个 n^2 算法,但它太慢了。有没有更有效的方法来做到这一点?

编辑:

如果有帮助的话,可能的键集很小。

这是一个低效的引用实现:

public void removeSubmaps(Set<Map> s) {
    Set<Map> toRemove = new HashSet<Map>();
    for (Map a: s) {
        for (Map b : s) {
            if (a.entrySet().containsAll(b.entrySet()))
                toRemove.add(b);
        }
    }
    s.removeAll(toRemove);    
}

最佳答案

我不确定除了 n^2 算法之外我还能做些什么,但我有一个快捷方式可以让它更快。用每张 map 的长度列出你的 map 并对其进行排序。 map 的适当子集必须短于或等于您正在比较的 map - 永远不需要与列表中更高的 map 进行比较。

关于algorithm - 从 map 集合中删除另一个 map 中包含的任何 map 的高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1784970/

相关文章:

python - 将列表转换为 Pandas 数据框中的集合

c++ - 计算大量数据的中位数

java - 从未排序的单链表中删除重复项,在尝试跳过重复元素时导致逻辑错误

python - 根据值在多维字典中查找键

c# - Dictionary.Equals() 有实现吗?

javascript - 将对象数组中两个属性的唯一值存储到单个数组中

java - 在给定字符串中搜索字符集的最快算法

c++ - 找到具有 3 个变量的丢番图方程的一个特定解和解的数量的有效算法

python - 列表中的重复元组

javascript - 在对象字面量内声明空 es6 Set