算法学习笔记

        1.快速排序

排序数组的时间复杂度:排序的时间复杂度通常为 nlogn。在快速排序中,每次将数组分成两半,递归调用排序。因此,对于 n 个元素,需要大约 log2(n) 次的分割,每次分割需要线性时间。所以排序的时间复杂度是 O(n * log2(n)),通常写作 O(nlogn)。

        2.综合考虑排序和查找的时间复杂度,整个算法的时间复杂度是 O(nlogn) + O(n) = O(nlogn)。这句怎么理解?为什么就去掉了常数的复杂度?

虽然这个时间复杂度包括了一些常数因子,但在大 O 表示法中,通常会忽略这些常数因子,因为它们不会对算法的增长趋势产生影响,综合考虑排序和查找的时间复杂度,你可以将它们相加来得到整个算法的时间复杂度。这是因为在算法分析中,通常关注的是算法的主要增长趋势。在这种情况下,主要增长趋势是 O(nlogn),因为排序通常比线性查找更昂贵,当我们说整个算法的时间复杂度是 O(nlogn) + O(n) = O(nlogn),我们实际上是在强调排序操作对总时间的主要影响,而线性查找操作对总时间的影响是次要的,因此在大 O 表示法中通常可以忽略。这并不是真的去掉了常数的复杂度,而是突出了算法的主要性能特征。

        3.哈希表的使用

哈希表利用的数组的随机存取特点,可以实现随机查找(时间复杂度为1)非常快,缺点是可能会占用大量内存,存储密度较小(如果数据非常的散列)

原理是数组的索引与数值有一个换算关系,通过换算关系,直接找到该数值的索引号,即可读取索引号中的数据

例:

有五个学生,学号是 1,2,3,4,5,我将每个学生的信息放结构体,然后创建一个结构体类型的数组,就拿最简单的对应关系:学号对应的就是索引号,那么现在我要查找3号学生信息,我直接访问数组元素的3号索引就可以了。

上面例子不明显,再举个例子:

有两个数组,[1,4,7]、[2,4,6],现在找数组2比数组1多哪些元素?

如果用暴力算法,先拿数组1的第一个元素去和数组2中所有元素去比较,以此类推,这样时间复杂度是(n1*n2)

如果使用哈希表,可能要创建一个大数组是hash1,然后元素值是几,就将hash1的几号索引赋值几,这样就建立好最简单的哈希表了,我现在和数组2进行比较,先比2看看hash1中是不是0,好,是0,说明数组1中没有2,再比4,看hash1中的索引4有没有数值,有的,说明数组1里面有4,以此类推,时间复杂度是(n2)也就是(n)常数级别。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值