找到只有两个级别

时间:2017-10-17 21:19:57

标签: algorithm big-o skip-lists

我正在尝试制作一个“完美”的跳过列表,其间隙大小只有两个级别。从计算不同大小的跳过列表的访问节点,我可以看出它是由大小决定的,但是我不能用n来计算它来计算它。

1 个答案:

答案 0 :(得分:1)

如果你真的想要一个恒定的间隙大小,那么你的最佳间隙大小就是列表长度的平方根。例如,如果您的跳过列表长度为16个项目,则最佳间隙大小为4.要获得第15个项目,您将进行3次跳远和3次短跳。那是最糟糕的情况。

要转到第k项,请按k/sqrt(n) + k%sqrt(n)个链接。

较大的间隙大小可以让您更快地到达目的地,但要获得列表中的某个位置,您可能需要关注更多的单个链接。平均而言,您将关注更多链接。通过较小的间隙大小,您可以使用更少的单个链接,但链接更长。

如果您的列表是1,000,000个项目,则您的间隙大小应为1,000。

您的渐近复杂度从单个链表的O(n)到具有此固定的第二级的O(sqrt(n))。只有两个级别,这是最好的。