Algorithm 为什么不使用指针数组来优化链表,而使用跳过列表呢?

Algorithm 为什么不使用指针数组来优化链表,而使用跳过列表呢?,algorithm,data-structures,linked-list,lookup,skip-lists,Algorithm,Data Structures,Linked List,Lookup,Skip Lists,最近我学习了skip列表,我了解到它是为了加速链表的查找而设计的。但是我想知道为什么不使用一个数据结构,它根据链表的结构添加所有节点的指针数组?对于2^n节点的列表,如果每个级别有较低级别指针数量的一半,我们将添加2^n-1ponters,则添加每个节点指针列表的数量几乎相同,同时按索引访问的数量为O(1) 一定有一些原因不能实现我的想法,有人能告诉我吗?跳过列表提供了O(log(n))的平均性能来读取、插入、更新和删除任何索引中的元素 您的指针数组idea为相同的操作提供了O(1)、O(n)、

最近我学习了skip列表,我了解到它是为了加速链表的查找而设计的。但是我想知道为什么不使用一个数据结构,它根据链表的结构添加所有节点的指针数组?对于
2^n
节点的列表,如果每个级别有较低级别指针数量的一半,我们将添加
2^n-1
ponters,则添加每个节点指针列表的数量几乎相同,同时按索引访问的数量为O(1)


一定有一些原因不能实现我的想法,有人能告诉我吗?

跳过列表提供了
O(log(n))
的平均性能来读取、插入、更新和删除任何索引中的元素

您的指针数组idea为相同的操作提供了
O(1)
O(n)
O(1)
O(n)
的平均性能。诚然,在
O(n)
操作中有一个很好的常数,但这仍然是它的伸缩方式


这两种数据结构都在实践中使用。它们只用于不同的情况。

跳过列表提供了
O(log(n))
在任何索引处读取、插入、更新和删除元素的平均性能

您的指针数组idea为相同的操作提供了
O(1)
O(n)
O(1)
O(n)
的平均性能。诚然,在
O(n)
操作中有一个很好的常数,但这仍然是它的伸缩方式


这两种数据结构都在实践中使用。它们只是用于不同的情况。

当新元素出现时,您如何更新指针数组(基本上是标准数组)?为什么您认为您提出的数据结构允许在O(1)时间内进行随机访问?其思想类似于数据库,通常按主键排序,但具有键的分层数组以加快按键值搜索的速度。例如,每256条记录一个记录索引映射的第一级键。对于每256个第一级条目,第一级索引可能有一个第二级键。根据数据库的大小,可能有第三个级别。“跳过列表”是一个类似的概念,您可以将“跳过列表”设置为“跳过列表”或“跳过列表”设置为“链接列表”。您能否详细说明这些数组是什么以及它们是如何表示的?@kaya3如果要访问第n个节点,只需访问数组的第n个元素即可获取其指针。您如何更新指针数组(基本上是标准数组)当新元素出现时?为什么您认为您提出的数据结构允许O(1)中的随机访问时间?这一想法类似于数据库,数据库通常按主键排序,但具有按键值加速搜索的键的分层数组。例如,每256条记录一个记录索引映射的第一级键。每256条第一级条目可能有一个第二级键到第一级索引。可能有第三级键,具体取决于数据库的大小。跳过列表是一个类似的概念,你可以将一个跳过列表转换为一个链接列表。你能详细说明一下这些数组是什么以及它们是如何表示的吗?@kaya3如果你想访问第n个节点,只需访问数组的第n个元素就可以得到它的指针谢谢,我只是在查找mech在添加元素时重建索引并实现其
O(log(n))的原理
。你能给出一个实践中使用的指针数组想法的例子吗?指针数组到处都在使用。为了选择一个完全随机的例子,的第26行声明
fd\u table
中的
fd
是指向文件描述符对象的指针数组的指针。谢谢,我刚刚查找了reb的机制在添加元素时构建索引,并意识到它是
O(log(n))
。你能给出一个实践中使用的指针数组想法的例子吗?指针数组到处都在使用。为了选择一个完全随机的例子,的第26行声明
fd\u table
中的
fd
是指向文件描述符对象的指针数组的指针。