算法课的哥们讲得还是很不错,作为纯数学课能讲成这样我是没见识过的,相比之下北大那哥们就有点不给力了
今天是继续深入divide and conquer:
1.先是讲求一个list中没有排好的数据的对数,实际上在sort的过程中加一个counter就解决了,教授用的merge sort,得到结果用的复杂度自然和merge sort也是一样的,都是O(n log n)
2. strassen诡谲的矩阵乘法算法,将naive解法的每层8次递归减少为7次递归,至于strassen是怎么得到这么一大坨多项式的,教授明确表示布吉岛。算法导论上也说关于这个算法的解释可能是全书最薄弱的部分了,不过我觉得这是给自己脸上贴金吧,算法导论这书写的难道还不够莫名其妙么。
3.讲二维坐标系下求距离最小的两点,仍然是分治,但是merge的部分用了一种非常巧妙的解法,简单说就是利用了每一层递归返回的最小距离,然后用这个最小距离界定merge时候的点范围,可以省很多算力。这个算法真的很巧妙。最后得到是一个O(n log n)的算法。
4.最后the master method,算divide and conquer算法复杂度主要就用它,这一部分我觉得这哥们也比算法导论上讲得好,听着蛮舒服的。