算法学习笔记(2)

本文介绍了递归算法时间复杂度的计算,特别是master公式的应用。深入探讨了归并排序的原理,指出其与合并两个有序链表算法的相似性,并详细分析了其O(NlogN)的时间复杂度。此外,文章还讨论了小和问题,提出了如何利用归并排序的思想在O(NlogN)时间内解决这一问题,同时指出该问题的暴力解法是O(N^2)。最后,阐述了归并排序的额外空间复杂度为O(N)。
摘要由CSDN通过智能技术生成

知识点概略

1. 学习了递归算法的时间复杂度的计算方法,master公式

注意master公式的应用条件 等规模的递归。

根绝log a(b)与N^d中d的比较有不同的时间复杂度的公式。

 

2. 学习了归并排序

归并排序是将数列的前后两部分排序,再使用合并,即merge方法将其合并在一起。

注意到merge方法与leetcode中合并两个有序链表的算法本质是一样的。

 

3.归并排序的复杂度

O(NlogN)

根据一中的master公式可得。a=2,b=2,d=1。

由master公式可得时间复杂度为O(NlogN)。

额外的空间复杂度为O(N),在merge合并时最大需要一个额外的等长的数组空间来存放值。

 

4.小和问题

小和问题指的是数组中每一个其左边比其小的数的和。暴力解法是简单地遍历数组,求每一个数的左边比其小的数的和。时间复杂度为O(N2)。

该问题可以转换为求每一个数右边有多少个比其大的数,若有n个数比a大,则要将a计入到小和中n次。即res+=a*n。

这样的情况下,可以利用merge合并的方法,利用O(NlogN)复杂度求得小和。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值