计算O(nlogm)时间中两个未排序数组的并集和交集

时间:2018-11-02 14:09:58

标签: algorithm set time-complexity array-algorithms

需要帮助以算法解决此问题... 从线性顺序给出分别具有m和n个元素的两组A和B。这些集不一定要排序。还假设m≤n。演示如何计算O(nlogm)时间中的A∪B和A∩B。

1 个答案:

答案 0 :(得分:2)

正如vivek_23所说,使用散列表的可能性较高,可以做得更好。

但是,要获得 O(n log m ),并假设您的集合存储为数组,则可以在< em> O(m 记录 m)时间,然后对 B 的每个元素进行 n 二进制搜索,看是否也在 A 中。每次查找花费 O (log m)时间,总共需要 O(n log m)时间。

因此,对于A∪B,您可以将 A 复制到 O(m)中的新集合 C 中。 em>时间。然后,对B的每个元素,在A上进行查找(二进制搜索)。如果不在A中,则将其添加到C中。这样,您将花费 O(m + n log m)的时间来构造 C O(m log m)*来排序A。因为 m ,总时间为 O(n log m)

对于 A∩B ,您将从一个空集 D 开始。对于 B 的每个元素,您都在 A 中进行查找。如果存在,则将其添加到 D 中。完成后,您将在 A 上完成 n 个查找,总共(n log m)< / em>。

如果要将列表A的所有元素插入哈希表中而不是对其进行排序,则可以在 O(m + n)时间内以高概率进行所有操作。