跳跃表(skiplist)是一种基于有序链表的扩展,简称跳表。
当你有一个需求场景是对大量的数据进行实时查询和筛选排序,并且要求有一定的响应速度。
就拿商品来说, 比如有序号,价格,品类,库存,热销度等等。那么此种数据列表的排序是线性的,最容易表达的线性结构的自然是数组和链表。可是,无论是数组还是链表,在插入新商品的时候,都会存在性能问题。
按照商品的等级排序,如果使用数组,插入的新商品的方式如下:
如果要插入一个等级是3的商品,首先要知道这个商品应该插入的位置。使用二分查找可以最快定位,这一步时间复杂度是O(logN)。
插入过程中,原数组中所有大于3的商品都要右移,这一步时间复杂度是O(N)。所以总体时间复杂度是O(N)。
如果使用链表,插入新商品的方式如下: