algorithm - 最坏情况快速排序空间复杂度解释
问题描述
我想展示快速排序空间复杂度的最坏情况。
我在考虑它,Quicksort 不使用辅助数组,它只是在 Partition 子例程上创建一些辅助变量,但它只是操纵数组中的项目。所以,很明显,我的结论是它使用了 O(n) 空间。
但是在互联网上搜索我发现在最坏情况下快速排序的空间复杂度是 O(log n)。
我只是不明白为什么在最坏的情况下它比输入数组占用更少的空间?
ps.:我正在关注“算法简介”的书。
我已经尝试过计算算法上的所有变量声明。
QUICKSORT(A, p, r)
if p < r
q = partition(A, p, r)
QUICKSORT(A, p, q - 1)
QUICKSORT(A, q + 1, r)
PARTITION(A, p, r)
x = A[r] // pivot
i = p - 1
for j = p to r - 1
if A[j] <= x
i = i + 1
exchange A[i] with A[j]
exchange A[i + 1] with A[r]
return i + 1
解决方案
在评估空间复杂度时,您不计算输入存储,但计算堆栈深度。
在直接快速排序中,每次分区都可能非常不利,并且只会将子数组减少一个元素。因此,空间复杂度为O(n)!(通常是灾难)。
出于这个原因,首先在最小子数组上递归并使用尾递归很重要。这将最坏的情况降低到O(Log n)。
推荐阅读
- javascript - 恢复 Firefox 选项卡后防止切换 type="radio" 元素
- ssl - 使用 SSL Pinning 的 Charles Proxy for Mobile 应用程序
- multithreading - 在 C++ 11 中多线程处理多个短任务会减慢进程?
- azure - Azure API 管理 + VNET 保护 Azure Functions
- mysql - QueryRecord 处理器在 NiFi 中执行聚合 SQL 函数
- javascript - 如何使用承诺获得相同键值的总数?
- wordpress - Woocommerce 自定义产品循环在更新后不再工作
- php - U+FFFD 特殊字符被插入到 PHP 中的字符串中
- jmeter - Jmeter:测试后生成 HTML 报告
- r - 如何在R中添加带有文本的列名