这是一个日常周会上抛出来问题引发的一个思考,首先问题如下
1 | // 全量树数据 |
题目其实也很简单,但是这里的主要打分项是算法运行的速度。我这边给到的答案如下,大致就是找到了匹配的节点,判断该节点是否已经是其他节点的字节点,否,则就将该节点所有 id 记录到一个 object 中(用于判断字节点用)
1 | const searchObj = {}; |
此算法在我这台小破电脑上面运行时间大约是 1.2ms - 1.8ms 之间,个人觉得大致思路没问题,比这快可能就有些剪枝做得好一点,怎么说都到不了 1ms 以内。
然而,我 naive 了,有一份算法做到了 1ms 内。大致思路一致,主要在于他用的不是 obj 而是 map,问题就变得很有意思了,在我眼中 object 本质也就是个字典,居然和 map 之间有性能差距。
于是乎网上找了一下 object 和 map 的对比,具体直接看mdn即可 Object 和 Map 的比较
结论就是频繁插入读取情况,请使用map