【问题标题】:Minimum number of steps to take to reach to a point到达一个点的最少步数
【发布时间】:2018-09-11 23:26:19
【问题描述】:

有 N 个建筑物。蜘蛛侠正在第 k 栋大楼吃晚饭。他得知X楼发生火灾事故。问题是他在任何时候都可以准确地向前跳F建筑物或向后准确地跳B建筑物。他想知道是否有可能到达第 X 栋建筑,如果可以,他想知道到达第 X 栋建筑的最少跳跃次数。

我尝试使用递归来解决这个问题。但我有某种直觉,它可以通过其他一些逻辑来解决。有人可以推荐一个吗?

【问题讨论】:

  • 您能解释一下您的递归解决方案吗,回答者从那里获取它可能会有所帮助。
  • 如果对您有帮助,请考虑将我的回答作为最佳答案:)

标签: arrays algorithm recursion data-structures


【解决方案1】:

一旦您掌握了其背后的数学原理,该解决方案的算法就很简单。 你需要实现扩展欧几里得算法和其他一些东西。

M = X - K,你想检查M = H F + K B是否有一些整数H, K

答案(称为 Bezout 恒等式)是,当且仅当 M 可以被 FB 的 GCD(最大公约数)整除时,方程承认一个解,我们称之为 D

假设存在一个解决方案,那么你可以解决

H F + K B = D.

调用(H,K) = (S_H, S_K) 的任何解决方案,使用扩展欧几里得算法找到它。

那么存在无限解(T_H, T_K),每个整数一个L,这些都是形式

T_H = S_H + L B/D

T_K = S_K - L F/D

您对最小值为 |T_H| + |T_K| 的解决方案感兴趣,这可以再次从理论上计算,或者通过简单的 for 循环检查最小值,它是一个分段线性函数,当 L 为接近 +- 无穷大。

背景数学寻找贝祖的身份,网上资料满满。

编辑:这似乎包含您需要的所有内容http://public.csusm.edu/aitken_html/m422/Handout1.pdf

【讨论】:

  • 很好的答案,快速的问题。如果M = X - N,根据OP 的约定,火灾发生在Xth 建筑物中,并且有N 建筑物。 X-N 不会是负面的吗?
  • M 代表距离,所以它必须是正数。如果它是否定的,只需将X-N 替换为N-X,使用欧几里德的扩展算法计算解。然后FB 需要交换才能获得好的答案
  • 我不小心写了M = X - N 而不是M = X - K,现在我编辑了答案。如果 M 为负数,则没有问题:正数表示事故发生在右侧(朝向 N 楼),负数在左侧(朝向第一栋楼)。如果您喜欢使用正数,也可以按照建议更改符号,这只是个人喜好问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
相关资源
最近更新 更多