408准备复试过程中整理的知识点(一)

本文是几个markdown的合并,所以结构较乱,仅记录痕迹;

数据结构

双栈实现队列

《剑指Offer》09-用两个栈实现队列 – 分享技术成长历程~ – 博客园 (cnblogs.com)

散列表及冲突解决

散列表建立了关键字和存储地址之间的一种直接映射关系;从而加快查找速度;

散列表通常用于牺牲空间复杂度,来换取时间上的高效;

冲突:在散列函数散列关键字的过程中,可能会把多个不同的关键字映射到同一个地址;

减少冲突:好的散列函数可以减少冲突;

冲突是不可避免的,所以还要设计好 处理冲突的办法;

处理冲突:

  1. 开放定址法:空闲空间既向当前关键字的同义词开放,又向其非同义词开放;
  2. 线性探测法、平房探测法、再散裂法;
  3. 拉链法:把同义词用链表链接;
    408准备复试过程中整理的知识点(一)

TOPN问题

海量数据中取最大的N个数:如,10亿个数中找出最大的10000个数;

首先要了解堆排序

  • 先拿10000个元素建堆;—O(n)
  • 遍历剩下的所有,每次将一个元素加入堆,并调整堆,只保留前10000个元素(也就是每次插入后,最么一个元素不要,一直保持10000个元素堆);—O(logn)
  • 遍历完所有,剩下的就是要找的TOP 10000;—O(nlogn)

优化方式:

可以把所有10亿个数据分组存放,比如分别放在1000个文件中;这样处理就可以分别在每个文件的10^6个数据中找出最大的10000个数,合并到一起在再找出最终的结果。

408准备复试过程中整理的知识点(一)

排序算法

稳定性判别法:若存在不相邻元素间交换,则是不稳定的排序;

插入排序:直接插入排序

408准备复试过程中整理的知识点(一)

时间复杂度

最好的情况下: 正序有序(从小到大),这样只需要比较n次,不需要移动。因此时间复杂度为O(n) ;
最坏的情况下: 逆序有序,这样每一个元素就需要比较n次,共有n个元素,因此实际复杂度为O(n2);
平均情况下:O(n2);

空间复杂度:可能借用了”哨兵”,O(1);

稳定性:直接插入排序是稳定的;(一个一个挨着来,不存在不相邻元素的交换,所以是稳定的;)

插入排序:希尔排序

希尔排序也是一种插入排序方法,实际上是一种 分组插入方法。先取定一个小于n的整数d1作为第一个增量,把表的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序;然后,取第二个增量d2(<d1),重复上述的分组和排序,直至所取的增量dt=1(dt

Original: https://www.cnblogs.com/kphang/p/16114498.html
Author: KpHang
Title: 408准备复试过程中整理的知识点(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/567386/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球