algorithm - 为什么不使用指针数组来优化链表而使用跳过列表呢?
问题描述
最近在学习skip list,了解到它是为了加快链表的查找速度而设计的。但我想知道为什么不使用基于链表结构添加所有节点指针数组的数据结构?对于一个2^n
节点列表,如果每一层我们有下一层指针数量的一半我们将添加2^n-1
ponters,这几乎与添加每个节点的指针列表的数量相同,同时也是 O(1 ) 按索引访问。
一定有一些理由不实施我的想法,有人可以告诉我吗?
解决方案
跳过列表提供O(log(n))
读取、插入、更新和删除任何索引处元素的平均性能。
您的指针数组想法为相同的操作提供了O(1)
、O(n)
和O(1)
的平均性能。O(n)
诚然,在O(n)
操作上有一个很好的常数,但它仍然是这样扩展的。
这两种数据结构都在实践中使用。它们只是用于不同的情况。
推荐阅读
- docker - 部署 github 操作时“npm ERR!命令 sh -c”错误引发
- typescript - Uncaught TypeError: ... is not a constructor - Typescript 模块导入错误
- ios - 从 Swift 中的函数返回泛型类型
- flutter - 颤振“RenderBox 未布置:RenderStack#5190e relayoutBoundary=up18 NEEDS-PAINT”错误
- ios - 在 Xcode 中为键盘扩展目标启用 Address Sanitizer 会导致 SIGQUIT
- netcdf - NetCDF 在空间上合并到全局数据
- java - 选择一个好的设计模式来处理一个大的哈希字段映射
- javascript - 动态导入错误路径
- java - Java中的文件删除()方法不起作用
- csv - Visual Studio Code - 比较两个 csv 并查找不在两个文件中的数据