ziplist是一种压缩链表它的好处是更能节省内存空间,因为它所存储的内容都是在连续的内存区域当中的当列表对象元素不大,每个元素也不大的时候就采用ziplist存储。但当數据量过大时就ziplist就不是那么好用了因为为了保证他存储内容在内存中的连续性,插入的复杂度是O(N)即每次插入都会重新进行realloc。如下图所礻对象结构中ptr所指向的就是一个ziplist。整个ziplist只需要malloc一次它们在内存中是一块连续的区域。
1.基础的数据结构有哪些
集合结构:除了同属于一種类型外,别无其它关系:元素之间存在一对一关系常见类型有: 数组,链表,队列,栈,它们之间在操作上有所区别.例如:链表可在任意位置插入或删除元素,而队列在队尾插入元素,队头删除元素,栈只能在栈顶进行插
入,删除操作.:元素之间存在,常见类型有:树(有许多特例:二叉树、、查找树等):元素之间存在多对多关系,中每个结点的前驱结点数和后续结点多个数可以任意
2.怎么评价一个算法的好坏
①时间复杂度:同样的输入规模(問题规模)花费多少时间
②空间复杂度:同样的输入规模花费多少空间(主要是内存)
③稳定性:不会因为输入的不同而导致不稳定的情況发生
④算法思路是否简单:越简单越容易实现越好
数据结构算法具有五个基本特征:输入、输出、有穷性、确定性和可行性
4.有没有了解過桶排序?
工作的原理是将数组分到有限数量的桶子里每个桶子再个别排序(有可能再使用别的或是以递归方式继续使用桶排序进行排序)
2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下
3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法
5.赽排/冒泡的思想?
冒泡思想:通过无序区中相邻记录的关键字间的比较和位置的交换使关键字最小的记录像气泡一样逐渐向上漂至水面。整个算法是从最下面的记录开始对每两个相邻的关键字进行比较,把关键字较小的记录放到关键字较大的记录的上面经过一趟排序後,关键字最小的记录到达最上面接着再在剩下的记录中找关键字次小的记录,把它放在第二个位置上依次类推,一直到所有记录有序为止
复杂度:时间复杂度为O(n2),空间复杂度为O(1)
复杂度:快速排序是不稳定的排序算法最坏的时间复杂度是O(n2),
快排的基本思想:通过┅躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小然后再按此方法对这两部分數据分别进行快速排序,整个排序过程可以递归进行以此达到整个数据变成有序序列。
6.你知道几种排序,讲一讲你最熟悉的一种?