Go 语言数据结构与算法 | 青训营笔记

103 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第14天

本文为青训营课程笔记,配合原课程食用效果更佳哦~

课程笔记

一、为什么要学习数据结构和算法

例子-抖音直播排行榜功能

规则:某个时间段内,直播间礼物数TOP10房间获得奖励,需要在每个房间展示排行榜 解决方案 • 礼物数量存储在 Redis-zset 中,使用 skiplist 使得元素整体有序 • 使用 Redis 集群,避免单机压力过大,使用 主从算法、分片算法 • 保证集群原信息的稳定,使用 一致性算法 • 后端使用 缓存算法(LRU) 降低 Redis 压力,展示房间排行榜 数据结构和算法几乎存在于程序开发中的所有地方

二、排序算法详解

  1. 插入排序
    1. Insertion Sort 插入排序

      将元素不断插入已经排序好的 array 中

      • 起始只有一个元素 5 ,其本身是一个有序序列

      • 后续元素插入有序序列中,即不断交换,直到找到第一个比其小的元素

      缺点• 平均和最坏情况的时间复杂度高达 O(n^2)

      优点• 最好情况时间复杂度为 O(n)

  2. 快速排序
    1. Quick Sort 快速排序

      分治思想,不断分割序列直到序列整体有序

      • 选定一个 pivot (轴点)

      • 使用 pivot 分割序列,分成元素比 pivot 大 和元素比 pivot 小两个序列

      缺点• 最坏情况的时间复杂度高达 O(n^2)

      优点• 平均情况的时间复杂度为 O(n*logn)

  3. 堆排序
    1. Heap Sort 堆排序

      利用堆的性质形成的排序算法

      • 构造一个大顶堆

      • 将根节点(最大元素)交换到最后一个位置,调整整个堆,如此反复

      缺点• 最好情况的时间复杂度高达 O(n*logn)

      优点• 最坏情况的时间复杂度为 O(n*logn)

  4. Benchmark
    1. 根据序列元素排列情况划分

      • 完全随机的情况(random)

      • 有序/逆序的情况(sorted/reverse)

      • 元素重复度较高的情况(mod8)

      在此基础上,还需要根据序列长度的划分(16/128/1024)

总结收获

通过样例与知识点结合的方式,学到了一些数据结构与算法的知识;

通过样例的讲解,更了解了具体的数据结构与算法的原理和实现;

又是收获满满的一天

引用参考

青训营官方课程视频

青训营官方课程文档

青训营官方课程笔记