数据结构与算法
为什么要学习数据结构与算法
例子:直播礼物数排行榜功能
解决方法:路无数据存储在Redis-zset中,使用skiplist使得元素整体有序
采用Redis集群,避免单机压力过大
采用分片、分页算法,需要保证一致性
go1.19算法是如何设计的、生产环境中使用的排序算法与课本上的排序算法有什么区别
经典排序算法:INSERTION Sort插入排序,将元素不断的插入已经排序好的array中,最优情况时间复杂度O(n) 平均时间复杂度O(n^2)
quick sort快速排序:基于分治的思想,不断的分割序列,直至整体有序,最优时间复杂度O(nlog(n)) 平均时间复杂度O(nlog(n)),最坏情况时间复杂度O(n^2)
heap sort 堆排序:利用堆的性质形成的排序算法,最优时间复杂度O(nlog(n)) 平均时间复杂度O(nlog(n)),最坏情况时间复杂度O(n*log(n))
pqsort:用于go1.19的排序算法,其是一种不稳定的混合排序算法,堆常见的序列类型做了特殊的优化,使得在不同条件下都拥有不错的性能
pqsort结合三种方法的优点:对于短序列采用插入排序,其他情况使用快速排序保证整体性能,当快速排序表现不佳时,使用堆排序保证最坏的情况下的排序性能
当最终的pivot的为止离序列两端很接近时,判定其表现不佳,当这种情况的次数到达limit时,采用堆排序
如何让qpsort的速度更快:尽量使得快排的pivot为序列的中位数,我们需要平衡寻找pivot的开销与pivot带来的性能优化