【问题标题】:Estimated number (Heuristics) of operations between Two Integers两个整数之间的估计操作数(启发式)
【发布时间】:2021-10-27 10:26:09
【问题描述】:

我有两个整数 AB,我想得到,WLOG 说,从 AB 与以下操作的最少数量:

  • 加或减1
  • 乘以或除以 2
  • 平方数

目前我正在使用 A* 搜索来解决这个问题,其中操作权重都是 1,启发式为 0(我猜基本上是 Dijkstra 算法)。但我想要一个更好的启发式来探索更少。 到目前为止,我所有的尝试都失败了。例如,如果两者都是正数且不相等,我尝试通过平方和加倍来进行估计。我也尝试用位串来思考,但 111 + 1 = 1000 让我觉得这不是一个好的启发式方法。我想要一些想法(如果不是解决方案)来提出一个好的启发式方法。

【问题讨论】:

    标签: integer dijkstra a-star heuristics integer-arithmetic


    【解决方案1】:

    如果A > B * 2^n,你知道它必须至少需要 n 步,因为你只能除以 2。求解 n 我们得到 ceil(log_2(A/B)) 作为启发式算法。这假设 A 和 B 具有相同的符号。

    如果A < B,那么我们可以平方,所以不幸的是,要求解的方程是A^(2^n) < B,或者ceil(log_2(log_A(B)))作为下限。这假设 A ≥ 2。

    【讨论】:

    • 有点了解构建这些方程的想法......我想我将不得不为其他条件找到更多。关于我的搜索算法的一个怪癖是,有时该算法会尝试利用整数溢出。例如,如果A 是 2^16,那么对于 32 位整数,平方将使其为 0,如果 B,则只有一步。哦,好吧,毕竟这就是编程。
    • 我得到的是floor 而不是ceil。例如,对于第一个,我们有log_2(A/B) > n,这应该导致 floor 而不是 ceil?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多