algorithm - 不可变数组中归并排序的空间复杂度
问题描述
归并排序的空间复杂度为 O(n),方法如下void sort(int[] arr)
。
如果我创建一个方法int[] sort(int[] arr)
,它不修改输入数组,而是返回一个新的排序数组,那么这个方法/算法的空间复杂度是多少?
解决方案
取决于合并排序的实现。
递归的
由于您无法在每个递归调用中更改输入数组,因此算法的空间复杂度为S(n) = 2S(n/2) + n
. 因此,S(n) = Theta(n log n)
。
迭代的
如果合并排序的实现不是递归的(迭代合并排序),您可以将输入数组复制到一个可变数组中,并就地对该数组进行排序。因此,这种合并排序实现的空间复杂度为Theta(n)
。
推荐阅读
- html - Unable to remove the page outer margin of the pdf which is created using html/css in flutter iOS
- php - PHP 图像类型验证
- javascript - 如何通过单击按钮来编辑表格中的单元格
- javascript - 合并数组中的重复对象并合并每个对象的子数组
- r - 如何对矩阵的所有列执行计算?
- react-native - 当我按下按钮时没有调用方法
- python-3.x - Kivy 小部件的不透明度不会在视觉上更新
- swift - 如何从匹配的字典值中返回一个字符串?
- python - 从值之间而不是在用户列表中的 sql 表中选择元素
- facebook - 如何从网站向特定的 Facebook 用户发送消息?