网站建设服务商城,劳务公司注册需要什么条件,深圳市住建工程交易,wordpress 知言主题递归行为的时间复杂度估算 整个递归过程是一棵多叉树#xff0c;递归过程相当于利用栈做了一次后序遍历。
对于master公式#xff0c;T(N)表明母问题的规模为N#xff0c;T(N/b)表明每次子问题的规模#xff0c;a为调用次数#xff0c;加号后面表明#xff0c;除去调用之…递归行为的时间复杂度估算 整个递归过程是一棵多叉树递归过程相当于利用栈做了一次后序遍历。
对于master公式T(N)表明母问题的规模为NT(N/b)表明每次子问题的规模a为调用次数加号后面表明除去调用之外剩余语句的复杂度是多少算出d。根据上次三个判断公式进行算法时间复杂度计算。 归并排序递归实现
求出中点位置先将左边部分排好序再将右侧部分排好序再整合双指针使得整体有序。
时间复杂度O(NlogN) 空间复杂度O(N) 小和问题 看某个数右侧有多少数比该数大那么就有这么多个该数对最后结果造成贡献使用归并排序在归并过程中进行计算。和传统merge相比在于左组数等于右组数时在小和问题中一定要先拷贝右组的数。 逆序对问题 同小和问题只不过换成了判断左数组的数大于右数组的数。
315. 计算右侧小于当前元素的个数 - 力扣LeetCodehttps://leetcode.cn/problems/count-of-smaller-numbers-after-self/
快速排序 问题一准备一个变量表示小于等于区域的右边界如果当前数小于等于num则把当前数和区域下一个数做交换区域往右扩一个位置当前数跳下一个。若当前数大于num那么跳下一个数即可。
问题二和问题一类似两个区域一个为小于区域的右边界i一个为大于区域的左边界j两个变量。当前数小于num当前数和i数交换i当前数跳下一个。当前数等于num直接跳下一个。当前数大于num当前数和j数交换j--当前数不动。 那么快速排序就是以数组内最后一个数作为num重复上述问题二最后将大于区域第一个数与最后一个数交换递归进行即可。
时间复杂度O(N^2)
但如果选取num是随机的选出来与最后一个数交换然后做划分可以避免出现最坏情况。
时间复杂度O(NlogN)