algorithm - 多项式时间内数的平方深度

标签 algorithm time-complexity big-o

更新
似乎根本不可能做到这一点。有人还给我寄了一份不同考试的副本,其中问了几乎相同的问题,但不同之处在于,您不能从任何位置删除,而只能从头或开始删除。很可能这个问题被复制了一个错误。现在我只需要证明这一点并要求重新评估问题考试。
几周前,在数据结构和算法类(class)的考试中,我遇到了以下问题。我无法在给定的时间内解决它,虽然我可能会通过类(class),但从昨天开始我一直在努力想出一个解决方案,这样我就可以提高我的技能。
问题
给定一个整数 我们反复从任何位置消除一个数字,直到我们只剩下一个数字。函数 PC(n) 被定义为通过所描述的过程可获得的整数平方的最大数目。
例如 PC(32492) = 3 .两种可能的顺序是:

  • 32492 -> 3249 -> 324 -> 24 -> 4
  • 32492 -> 3249 -> 349 -> 49 -> 9

  • 现在设计一个算法,可以在的多项式时间内计算PC(n) d ,其中 d 是 n 中的位数。假设您有一种方法可以在 O(1) 时间内测试一个数字是否为整数的平方。
    到目前为止我尝试过的
    第一种方法显然是测试每个可能的序列并返回最大值。如果我没记错的话,这是 O(d!)。
    改进了蛮力方法,我添加了一个 HashMap,我在其中存储了所有已经计算过的值。这样我们就可以使用 O(1) 查找来避免两次计算相同的值。这显然是实时使用的改进,但我很难获得时间复杂度的下限。所以,据我所知,这不是多项式。
    我也尝试了一些贪心算法的方法,但正如预期的那样,我发现每个算法(我能想到的)都没有进行最佳选择。
    任何帮助将不胜感激。我尝试在网上寻找类似的问题,但到目前为止还没有运气。

    最佳答案

    发布此答案,以便问题不会保持开放状态。好像是老师弄错了,不可能。
    该问题可能应该只允许消除第一位或最后一位数字,在这种情况下,可以使用动态规划在 O(d^2) 中解决问题。

    关于algorithm - 多项式时间内数的平方深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64719223/

    相关文章:

    python - 在 python : slicing vs iterating - impact on complexity 中合并排序

    java - 如何计算算法的复杂度?

    time-complexity - 为什么二分查找在所有情况下都在 O(log n) 时间内运行,而不是在 Θ(log n) 时间内运行?

    algorithm - OpenCV MinEnclosingCircle算法

    c# - 根据另一个集合过滤一个集合

    algorithm - 大图中的 k 中心(道路网络)

    algorithm - 计算算法的时间复杂度

    algorithm - 阶乘尾随零 BigO 问题

    java - 任何人都可以提供 Java 中 O 表示法的基本示例吗?

    algorithm - 什么是桶排序的好散列函数?