【发布时间】:2016-03-18 05:44:36
【问题描述】:
我想使用分段树解决 Joseph Flavius 问题。我几乎可以肯定简单的模拟(即行列式列表)是O(n^2)。我想要实现的是在特定距离的数组上跳跃,取自段树。换句话说,段树将保留有关已删除元素数量的信息,并从树中获取一些信息将允许在 O(1) 中找到下一个要删除的元素。问题是我不知道如何在段树中存储信息以使其适用于 Joseph Flavius 问题。
在每个节点中保留了某种额外的值?但是如何查询下一个元素呢?
【问题讨论】:
-
你已经编码了吗?
-
唯一基于链表的方案,复杂度太大。
-
这个问题最简单的解决方案根本不使用数据结构。它从结束位置(当只剩下一个人时)开始,循环计算之前执行的人的位置。第二个最简单的解决方案从 n 个人开始,并使用递归。当 n 很大时,这会使用太多堆栈,但您始终可以实现自己的堆栈并将递归作为循环进行。
标签: arrays algorithm data-structures segment-tree josephus