C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 插入的有效数据结构大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种数据结构(类似数组),允许快速(比O(N)更快)任意插入值到结构中.数据结构必须能够以插入方式打印出元素.这类似于List.insert()(它太慢了,因为它必须移动每个元素),除了我不需要随机访问或删除.插入将始终在’数组’的大小范围内.所有值都是唯一的.不需要其他操作.

例如,如果Insert(x,i)在索引i(0-indexing)处插入值x.然后:

>插入(1,0)给出{1}
>插入(3,1)给出{1,3}
>插入(2,2,3}
>插入(5,0)给出{5,1,3}

并且它需要能够在最后打印出{5,3}.

我正在使用C.

解决方法

使用 skip list.另一个选项应该是 tiered vector.跳过列表在const O(log(n))执行插入并按顺序保存数字.分层向量支持插入O(sqrt(n))并再次按顺序打印元素.

编辑:根据amit的评论,我将解释如何在跳过列表中找到第k个元素:

对于每个元素,您都有一个指向下一个元素链接的塔,对于每个链接,您知道它跳过了多少个元素.因此,寻找第k个元素,从列表的头部开始,然后沿着塔向下走,直到找到跳过不超过k个元素的链接.您转到此节点指向的节点,并使用跳过的元素数减少k.继续这样做,直到你有k = 0.

大佬总结

以上是大佬教程为你收集整理的c – 插入的有效数据结构全部内容,希望文章能够帮你解决c – 插入的有效数据结构所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。