为什么 react 的diff 算法 到 传统的树节点比较算法 从O(n^3)到 O(n) ?

发布于 2022-09-07 22:48:52 字数 80 浏览 22 评论 0

为什么 react 的diff 算法 到 传统的树节点比较算法 从O(n^3)到 O(n) ,请问 O(n^3) 和O(n) 是怎么计算出来的 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

给妤﹃绝世温柔 2022-09-14 22:48:52

关于时间复杂度的计算,这篇文章讲的很清楚,我建议你好好读一读。

至于说为什么传统的树节点比较算法的时间复杂度是O(n^3),而react的diff算法只需要O(n),这是因为react对树节点的比较做了很大的前提假设,限定死了很多东西,不做过于复杂的计算操作,所以降低了复杂度。而传统的树节点要做非常完整的检查,比如说比较不同级别的树状结构,在传统算法里是需要考虑的,而react假定所有的比较都在同级进行,这样当然就会使得计算复杂度大大降低。

具体的实现方式,可以参考这篇文章。我也只是个搬运工。

快乐很简单 2022-09-14 22:48:52

react树对比是按照层级去对比的, 他会给树编号0,1,2,3,4.... 然后相同的编号进行比较。 所以复杂度是n,这个好理解。

关键是传统diff的复杂度是怎么算的? 传统的diff需要出了上面的比较之外,还需要跨级比较。 他会将两个数的
节点,两两比较,这就有n^2的复杂度了。 然后还需要编辑树,编辑的树可能发生在任何节点,需要对树进行再一次遍历操作,因此复杂度为n。加起来就是n^3了。 我这里不涉及严谨推理过程,只是给大家一个感性的认识而已。 如有错误,概不负责。

这里有一个回答,也可以参考一下react的

diff 从O(n^3)到 O(n) ,请问 O(n^3) 和O(n) 是怎么算出来? - COIN的回答 - 知乎
https://www.zhihu.com/questio...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文