在下面的除法算法中,我无法理解为什么将q和r乘以两个作品,以及为什么r在x为奇数时递增。
请给出这种递归除法算法的理论依据。
提前致谢。
function divide(x, y)
if x = 0:
return (q, r) = (0, 0)
(q, r) = divide(floor(x/2), y)
q = 2q, r = 2r
if x is odd:
r = r + 1
if r ≥ y:
r = r − y, q = q + 1
return (q, r)
答案 0 :(得分:2)
我们假设您要将df = df.fillna("")
groups = df.groupby("parent_id")
parents = groups.get_group("")
for p_id, p in p.iterrows():
grp = groups.get_group(p_id)
do_something(p, grp)
除以x
,即代表y
我们假设x = Q * y + R
是偶数。您递归地将x
除以x / 2
并获得所需的小型案例代表:y
。
通过将它乘以2,您将获得:x / 2 = q * y + r
。看一下你想要获得x = 2q * y + 2r
的表示,你会看到你找到了它!让x
和Q = 2q
找到所需的R = 2r
和Q
。
如果R
是奇数,您再次首先获得较小案例的所需表示:x
,将其乘以2:(x - 1) / 2 = q * y + r
,并将x - 1 = 2q * y + 2r
发送给右:1
。您再次找到了您想要的x = 2q * y + 2r + 1
和Q
:R
,Q = 2q
。
算法的最后部分只是标准化,因此R = 2r + 1
。当你将乘法乘以2时,r < y
可能会大于r
。
答案 1 :(得分:0)
算法 PuzzleSolve(k,S,U) : 输入:一个整数 k、序列 S 和集合 U 输出:使用 U 中的元素不重复地枚举 S 的所有 k 长度扩展 对于 U 中的每个 e 在 S 末尾添加 e 从 U 中删除 e /e is now being used/ 如果 k == 1 那么 测试 S 是否是解决难题的配置 如果 S 解决了这个难题,那么 return "找到解决方案:" S 别的 PuzzleSolve(k-1,S,U) /递归调用/ 从 S 的末尾删除 e 将 e 添加回 U e 现在被视为未使用 该算法枚举 U 的每个可能的大小为 k 的有序子集,并测试每个子集是否为 我们的难题的可能解决方案。对于求和题,U = 0,1,2,3,4,5,6,7,8,9 和每个位置 在序列中对应于一个给定的字母。例如,第一个位置可以代表 b, 第二个是 o,第三个是 y,依此类推。