gpt4 book ai didi

algorithm - 具有 O(1) 删除任何元素的动态数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:46:05 24 4
gpt4 key购买 nike

这道题是我想到的一个数据结构。它是一个动态数组,类似于C++中的std::vector<>,只是移除算法不同。

在一个普通的动态数组中,当一个元素被移除时,所有剩余的元素必须向下移动,这是 O(n),除非它是最后一个元素,这将是 O(1)。

在这个中,如果删除了任何元素,它将被最后一个元素替换。这当然会丢失元素的顺序。但是现在删除任何元素都是常数时间。

列表将具有相同的删除时间,但此结构具有随机访问。唯一需要注意的是你不知道你在访问什么,因为排序可能会困惑,所以无论如何使用随机访问。另外,列表不会弄乱任何指向元素的指针/迭代器。

嗯,除了严格遍历元素并可能沿途删除它们的非常具体的任务外,这种结构似乎毫无用处。列表可以做同样的事情,但它有更好的缓存性能。

那么,这个奇怪/无用的结构有名字吗,它有什么用处吗?或者只是一个不错的小头脑 Storm ?

最佳答案

这个想法用在Knuth (Fisher–Yates) shuffle .随机选取的元素将替换为数组中的最后一个元素。由于无论如何我们想要的是随机排列,因此重新排序并不重要。

关于algorithm - 具有 O(1) 删除任何元素的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1057164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com