如何解决为什么桶排序的时间复杂度是 O(n^2) 而不是 O(log(n) * n^2)?
import math
def insertionSort(arr):
for i in range(len(arr)-1):
for j in range(i+1,len(arr)):
if arr[j] < arr[i]:
arr[j],arr[i] = arr[i],arr[j]
return arr
def bucketSort(arr):
no_of_buck = round(math.sqrt(len(arr)))
bucketArr = [[] for _ in range(no_of_buck)]
n = len(bucketArr)
maximumVal = max(arr)
for i in arr:
appropriate_bucket = math.ceil(i * n / maximumVal)
bucketArr[appropriate_bucket-1].append(i)
for i in bucketArr:
i = insertionSort(i)
arr = []
for i in bucketArr:
arr.extend(i)
print(arr)
插入排序本身是一个 O(n^2) 操作,外循环上升到元素数量的平方根,即 O(sqrt(n)),所以它应该是 O(log(n) * n^2 )
解决方法
插入排序本身是一个 O(n^2) 操作,外循环上升到元素数量的平方根,即 O(sqrt(n)),所以它应该是 O(log(n) * n^2 )
您已经给出了为什么时间复杂度可能是 O(n2.5) 而不是 O(log(n) * n^2) 的论点,尽管有一个相对简单的原因它们不是严格的上限(宽松的上限没有错,但不那么有趣,并且在某些情况下可能被视为错误)。
项目总数仍然只有kubectl get nodes -o custom-columns=NAME:.metadata.name,ZONE:.metadata.labels.'topology\.kubernetes\.io/region'
kubectl get nodes -o custom-columns=NAME:.metadata.name,ZONE:.metadata.labels."topology\.kubernetes\.io/region"
。
在最坏的情况下,所有项目都在一个桶中,这就是 O(n²) 时间复杂度的来源。项目在桶上的所有其他分布都更好。桶不能全部很大,这是您的论点隐含的假设。
这是一个示例,说明为什么“乘以嵌套循环的时间复杂度”这一经验法则只是一条经验法则。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。