|
|
1
3
我的头是说这是关于秩序(2n ln n)。 把它和一粒盐一起吃。 |
|
|
2
2
如果可以对集合中的元素进行排序,则可以使用 Mergesort 在集合上。唯一需要的修改是在合并阶段检查重复项。如果找到了,只需丢弃副本。由于mergesort是O(n*log(n)),与naive O(n^2)算法相比,这将提供潜在的速度。 但是,为了真正有效,您应该维护一个排序集并保持它的排序,这样您就可以跳过排序阶段并直接进入合并阶段。 |
|
|
3
1
一个旁注:这取决于这种情况发生的频率。如果大多数集合对 做 至少共享两个元素,在进行比较的同时构建新的集合可能是最有效的,如果它们不匹配条件,则将其丢弃。如果大多数配对 不 共享至少两个元素,然后推迟新集合的构建,直到确认条件可能更有效。 |
|
|
4
1
我不明白这是如何在小于0(n^2)的时间内完成的。 每个集合都需要与其他集合进行比较,以查看它们是否包含2个或更多共享元素。这是n*(n-1)/2比较,因此o(n^2),即使检查共享元素需要恒定的时间。 在排序中,幼稚的实现是O(n^2),但您可以利用有序比较的传递性(例如,您不知道Quicksort的下分区中的任何内容都需要与上分区中的任何内容进行比较,因为它已经与Pivot进行了比较)。这就是排序结果是O(n*log n)。 这里不适用。所以,除非集合中有一些特殊的东西,可以让我们根据之前的比较结果跳过比较,一般来说它是O(n^2)。 保罗。 |
|
|
5
0
如果您的元素本质上是数字的,或者可以自然排序(例如,您可以指定一个值,如1、2、42等),我建议对合并集使用基数排序,并进行第二次传递以获取唯一的元素。 该算法应该是O(N),您可以使用位移位运算符和位掩码对基数排序进行相当大的优化。我为一个我正在做的项目做了类似的工作,它的工作方式很有魅力。 |
|
|
5rod · 编写python程序来解决特定问题? 2 年前 |
|
|
yazumin · 嵌套在集合中的映射列表 2 年前 |
|
|
Ama · 如何在Python集合理解中根据布尔语句添加元素对? 2 年前 |
|
|
petem · 使用图像作为为Julia集着色的轨道陷阱 2 年前 |
|
|
user4202236 · java中的拆分集 2 年前 |
|
|
Cesar Justo · 如何将列表的值修改为java流? 2 年前 |