是否有这样的数据结构 - “带样本的链表”

时间:2015-10-02 07:13:25

标签: data-structures linked-list

是否有这样的数据结构:

  1. 有慢速列表数据结构,例如linked listdata saved on disk
  2. “慢速列表”中的某些元素指针数量相对较少,希望均匀分布。
  3. 然后当您进行搜索时,首先检查数组,然后执行常规搜索(链接列表搜索或二进制搜索,以防磁盘数据)。

    这与jump searchsample searchskip lists非常相似,但我认为是不同的算法。

    请注意我在磁盘上提供link list或文件的示例,因为它们的结构很慢。

1 个答案:

答案 0 :(得分:1)

我不知道是否有这个算法的名称(我认为它不值得一个,但如果没有,它可以承担我的:),但我确实实现了类似于10年前的那样的面试。

您可以拥有一个指向列表元素的指针数组。一个固定大小的数组,比如256个指针。当您构造列表或第一次遍历它时,您将指针存储到数组中的元素。因此,对于256个或更少元素的列表,您将拥有指向每个元素的指针。

当列表增长超过256个元素时,通过将128个偶数指针移动到数组的开头,可以删除每个奇数指针。当指针数组再次填满时,重复该过程。在每个这样的点上,您将地址最终位于指针数组中的列表元素之间的步长加倍。最初你将每个元素的地址放在那里,然后是每个元素的地址,然后是四分之一,依此类推。

最终得到一个指向列表元素的指针数组,列表长度为256。

如果列表是单链接的,则从其开头或结尾定位第i个元素将减少为在列表的1/256中搜索。 如果列表已排序,您可以对阵列执行二进制搜索,以找到bin(列表的1/256部分)的位置。