达到某一点所需的最少步骤数

时间:2018-04-02 18:14:33

标签: arrays algorithm recursion data-structures

有N栋建筑物。蜘蛛侠在第k大楼吃晚餐。他知道Xth大楼发生火灾。问题是,在任何时候他都可以准确地向前跳F建筑物或向后跳回B建筑物。他希望能够到达Xth大楼,如果是的话,他想知道到达Xth大楼的最小跳跃次数。

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

1 个答案:

答案 0 :(得分:7)

一旦你掌握了数学算法,解决方案在算法上就很简单了。 您需要实现扩展欧几里德算法以及更多内容。

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循环检查最小值,它是一个分段线性函数,当{{{ 1}}接近+ - 无限。

对于背景数学寻找Bezout的身份,它充满了在线资料。

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