数组中移动元素的数据结构簿记位置

问题描述

所以我有一个 N 对象的数组,我想在这个数组中合并相同的值,同时跟踪每个值移动到的位置。例如,给定输入 ["a","b","a","c","b"],我想要输出 ["a","c"] 和移动列表 3->1,4->3,5->1,6->2 .

我的输入是 m 对相同值的索引 (i,j) 的列表(总是按 i j)。我预计(与上面的玩具示例相反)m 通常会比 N 小得多;一个数量级可能是 N≈10^6m≈10^2。看到这样的一对,我擦除位置 i 处的对象,将最后一个对象移动到位置 i,并将数组缩短一。这会处理数组,但不会处理簿记。

我可以通过使用 union-find 数据结构的变体来实现第二部分:即长度为 N 的向量 p,最初由恒等函数填充,并包含每个索引在 1,...,N 中的新位置。但是,这将具有空间复杂度 O(N)(并且由于初始填充而具有相同的时间复杂度),如果可能,我宁愿避免这种情况。

另一种可能性是使用字典来仅跟踪数组中移动的条目。然而,这本身是不够的:即,当将条目 i 移动到 j 时,我需要指向 j 而不仅仅是条目i 本身,以及之前指向 i 的任何其他条目 x。一个明显的解决方案是将指向它的所有条目的列表附加到 i ......但是事情变得有点复杂,我可能会错过一个更明显的解决方案。

由于这似乎是一个非常普遍的问题,因此文献中可能已经有解决方案。但是,我找不到正确的搜索词来找到它。是否已经存在某种数据结构执行此操作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...