微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

允许对密切相关的序列公共子序列进行有效相等性检查的数据结构

如何解决允许对密切相关的序列公共子序列进行有效相等性检查的数据结构

我正在寻找可用于以下示例中的 Snapshot(序列)的数据结构:

val oldSnapshot = Snapshot(3,2,1)
val newSnapshot = 4 +: (oldSnapshot dropRight 1) // basically a shift

// newSnapshot is Now passed to another function that also kNows the old snapshot

// this check should be fast if true
if (newSnapshot.tail == (oldSnapshot dropRight 1))         

背景:我需要一个不可变的数据结构来存储流中出现的最后 n 个项目的快照。当一个新项目出现在流中并且最旧的项目被删除时它会更新,因此长度总是最多 n 并且快照类似于最后一个 n 上的滑动窗口元素。在极少数情况下,流可以中断并重新启动。在重新启动的情况下,流首先发出至少 n 个旧元素,然后再继续发出新的“活动”元素。但是,有些元素可能会有所不同,因此我无法确定是否可以通过附加新元素从旧快照派生出最近历史记录的新快照。

我还有一个组件,它使用这些快照流并对元素进行一些增量处理。例如,它可能会跟踪元素的总和。对于新快照,它必须决定它是通过将一个还是几个元素附加到最后一个已知快照的末尾(并删除最旧的元素)来派生的,因此它不必再次处理所有旧项目但可以重用一些中间结果。

到目前为止,最常见的情况是快照被转移以包含一个新元素,而最旧的元素被删除。这种情况应该很快就被识别出来。如果我要跟踪元素的整个历史而不删除最旧的,我可以使用 List 并将新列表的 tail 与最后一个已知列表进行比较。在内部,它会比较对象标识,并且在大多数情况下,这足以看出列表是相同的。

我正在考虑对快照使用 Vector 或类似的数据结构,我想知道这种比较是否也能保证在这个意义上是有效的,或者是否有更合适的数据内部使用对象标识检查子集合以快速确定两个实例是否相同的结构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。