有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

Posted

技术标签:

【中文标题】有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]【英文标题】:Could someone explain what an SVN bisect algorithm is? Theoretically and through code snippet [duplicate]有人可以解释什么是 SVN 平分算法吗?理论上和通过代码片段[重复] 【发布时间】:2020-09-17 17:47:41 【问题描述】:

我想了解什么是 SVN bisect / git-bisect 算法..我尝试搜索在线资源但无法获得好的问题陈述和解决方案。

【问题讨论】:

***.com/search?q=%5Bgit-bisect%5D+what+is git-scm.com/book/en/Git-Tools-Debugging-with-Git 【参考方案1】:

简而言之,二分法的概念是一种二分查找

二等分的想法基于几个假设:

    存在特定的应用程序行为(为简单起见,我们将其称为“缺陷”),您希望找到其原因。 代码分析和调试需要付出太多努力。 构建任何版本并针对它运行测试比代码分析和调试要容易得多。 您知道过去的一些代码修订版没有此缺陷。

直接的方法是构建以前的版本并测试它是否存在此缺陷。如果有,则提前测试一个版本。您继续,直到找到引入此错误的修订版。您知道此提交中的所有更改。这就是为什么更容易找到究竟是什么变化导致了缺陷。调试也容易得多,因为您可以(通常)专注于一些更改。

但如果已知没有缺陷的修订是最近修订之前的过去 200 次修订,您可能需要重复“构建和测试”过程 200 次(如果您没有运气)。

让我们将没有缺陷的修订命名为 R0,将有缺陷的修订命名为 R200。

Bisect 可以让它更快。你“告诉”什么版本有缺陷,什么版本没有缺陷。然后 bisect 计算这些修订之间的提交次数。在我们的例子中,这些是 200 次提交。 Bisect 会在有缺陷的修订之前 100 个修订进行修订并将其检查出来。意味着,它检查修订版 R100。您构建它并进行测试。然后你“告诉”这个版本是否包含缺陷。如果有缺陷,则表示它是在 R0 和 R100 版本之间引入的。如果没有缺陷,则表示该缺陷是后来引入的,在 R100 修订版之后,介于 R100 和 R200 之间。

假设您告诉 bisect R100 存在缺陷。然后 bisect 取 R0 - R100 范围的中间值。这将是修订版 R50。 Bisect 进行检查。你构建它并测试并告诉结果平分。

假设 R50 没有缺陷。意思是,它是在 R50 和 R 100 版本之间引入的。Bisect 再次采用中间版本 R75。您构建它并进行测试。

假设 R75 有缺陷。表示它是在 R50 和 R75 之间引入的。 Bisect 检查 R63。以此类推。

总共需要 log(200) = 8 个步骤。如果您检查每个版本,您将构建和测试多达 200 个修订版,这将花费更长的时间。

In case of Git,你先用命令启动 bisect 程序

git bisect start

然后你检查有缺陷的版本并运行命令

git bisect bad

然后你告诉 bisect 什么版本没有缺陷:

git bisect good R0

通过这个命令,Git bisect 会找到中间的 R100,然后检查一下。你构建并测试它,如果它包含缺陷,运行命令

git bisect bad

否则命令

git bisect good

然后继续,直到您发现引入了缺陷的修订。

【讨论】:

以上是关于有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

有人可以简单地向我解释啥是有向无环图吗?

D3:啥是平分线?

有人可以帮助解释这个回溯算法中的递归吗?

制作容器时,啥是远程 Docker 解释器?

有人可以解释一下 ID3 和 CART 算法之间的区别吗?

请问啥是遗传算法,并给两个例子