对集合进行分区并对分区的子集进行排序的时间复杂度
Time complexity for partitioning a set and sorting the partition's subsets
假设我有一个函数,它将 S
、|S|=n
集划分为 S/subsetSize
个大小为 subsetSize
的子集并对每个子集进行排序:
partitionAndSort(Set s, int subsetSize) {
List partition = partitionList(s);
for(Set subset: partition) {
sort(subset);
}
}
函数的运行时间是多少?
partition
显然需要 O(n)
因为我们一个一个地遍历集合的元素。 subsetSize
被认为是常数,因此单个排序需要 O(subsetSize*log(subsetSize))=O(1)
,并且有 O(n/subsetSize)=O(n)
次排序调用。整体排序需要O(n)
吗?这是否为函数提供了 O(n)
的 运行 时间?
是的,您的函数只需要 O(n)。不过请记住,它 不是 对给定集合进行排序。只有子集。因此,对于一组 n 值的 (comparison-based) 排序,n log n 下限没有冲突,因为您没有这样做。
假设我有一个函数,它将 S
、|S|=n
集划分为 S/subsetSize
个大小为 subsetSize
的子集并对每个子集进行排序:
partitionAndSort(Set s, int subsetSize) {
List partition = partitionList(s);
for(Set subset: partition) {
sort(subset);
}
}
函数的运行时间是多少?
partition
显然需要 O(n)
因为我们一个一个地遍历集合的元素。 subsetSize
被认为是常数,因此单个排序需要 O(subsetSize*log(subsetSize))=O(1)
,并且有 O(n/subsetSize)=O(n)
次排序调用。整体排序需要O(n)
吗?这是否为函数提供了 O(n)
的 运行 时间?
是的,您的函数只需要 O(n)。不过请记住,它 不是 对给定集合进行排序。只有子集。因此,对于一组 n 值的 (comparison-based) 排序,n log n 下限没有冲突,因为您没有这样做。