Coursera - Algorithm (Stanford) - 课程笔记 - Week 2

Divide & Conquer Algorithms

O(n log n) Algorithm for Counting Inversions

  • 分治算法
    • 将问题分割为更小的子问题
    • 通过递归调用解决这些问题
    • 将子问题的结果合并到更大的子问题中作为其结果
  • 逆序对
    • 数组中存在的i < j但是a[i] > a[j]的情况
    • 左逆序对:二者都在左半部分
    • 右逆序对:二者都在右半部分
    • 跨逆序对:分别在两侧
  • 思路:将归并排序融合进来
    • 两个半部分一边数逆序对一边排序,对两个有序的半部分再归并同时计算逆序对
  • 归并时,对于右侧的一个数字y,若复制到目标数组时,其相关的逆序对个数即此时左侧剩下的元素个数
  • 因为整个过程基于归并排序,因此与归并排序有着相同的时间复杂度( O ( n log ⁡ n ) O(n \log n) O(nlogn)

Strassen’s Subcubic Matrix Multiplication

  • 直接计算矩阵:立方级别时间复杂度
  • 递归算法:
    • 将矩阵等分成四个部分
    • 将两个矩阵的乘积转化为八个小矩阵的乘积(八个递归项)
    • 做加和处理
    • 仍旧是立方复杂度
  • Steassen算法
    • 递归项只有7个
    • 进行必要的加和和相减处理
    • 八个小矩阵为A~H
    • 递归计算七个积:
      • P 1 = A ( F − H ) P_1=A(F-H) P1=A(FH)
      • P 2 = ( A + B ) H P_2=(A+B)H P2=(A+B)H
      • P 3 = ( C + D ) E P_3=(C+D)E P3=(C+D)E
      • P 4 = D ( G − E ) P_4=D(G-E) P4=D(GE)
      • P 5 = ( A + D ) ( E + H ) P_5=(A+D)(E+H) P5=(A+D)(E+H)
      • P 6 = ( B − D ) ( G + H ) P_6=(B-D)(G+H) P6=(BD)(G+H)
      • P 7 = ( A − C ) ( E + F ) P_7=(A-C)(E+F) P7=(AC)(E+F)
    • X + Y = ( A E + B G A F + B H C E + D G C F + D H ) = ( P 5 + P 4 − P 2 + P 6 P 1 + P 2 P 3 + P 4 P 1 + P 5 − P 3 − P 7 ) X+Y = (\begin{matrix}AE+BG & AF+BH \\ CE+DG & CF+DH\end{matrix}) = (\begin{matrix} P_5+P_4-P_2+P_6 & P_1+P_2 \\ P_3+P_4 & P_1+P_5-P_3-P_7 \end{matrix}) X+Y=(AE+BGCE+DGAF+BHCF+DH)=(P5+P4P2+P6P3+P4P1+P2P1+P5P3P7)
    • 有效地降低了复杂度(次立方级别复杂度)

Closet Pair

  • 最近点对问题:
    • 给出一组平面上的点
    • 找出其中距离最近的一对
    • 距离为点的欧氏距离
    • 假设所有点坐标不同(相同亦可)
  • 暴力搜索: θ ( n 2 ) \theta(n^2) θ(n2)的时间复杂度
  • 1-D平面上的点:归并排序后遍历相邻点的距离( O ( n log ⁡ n ) O(n \log n) O(nlogn)
  • 基本思路:类似逆序对算法,进行归并式的寻找,时间复杂度同样为( O ( n log ⁡ n ) O(n \log n) O(nlogn)
  • 关键思路:只计算尚未“解锁”的情形中距离比现有递归结果最小的部分
  • 计算过程
    • 将点按照坐标的从大到小排序,将Q和R表示为点集的左半部分和右半部分
    • 计算(p1,q1)为Q中最近对
    • 计算(p2,q2)为P中最近对
    • 计算两个对的最小者的距离δ
    • 根据δ和P,计算跨两部分的最近对(p3,q3)
    • 取三者最小向上递归结果
  • split最近对的寻找:线性时间扫描
    • 一次只看7个点(已经按照y坐标排序)

The Master Method

  • 对分治算法的数学分析:循环表示法(Recurrence)
  • 循环表示法的形式化表示(假设子问题的大小均一致):
    • 基本情形:对足够小的 n n n T ( n ) ≤ a constant T(n) \le \text{a constant} T(n)a constant
    • 对其他更大的 n n n T ( n ) ≤ a T ( n b ) + O ( n d ) T(n) \le aT(\frac nb) + O(n^d) T(n)aT(bn)+O(nd)
      • a:递归调用的个数
      • b:输入大小的缩减因子
      • d:对递归调用结果的加和操作的指数因子
    • 如果 a = b d a=b^d a=bd T ( n ) = ( n d log ⁡ n ) T(n)=(n^d \log n) T(n)=(ndlogn)
    • 如果 a < b d a < b^d a<bd T ( n ) = ( n d ) T(n)=(n^d) T(n)=(nd)
    • 如果 a > b d a > b^d a>bd T ( n ) = ( n log ⁡ b a ) T(n)=(n^{\log_b a}) T(n)=(nlogba)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Coursera-ml-andrewng-notes-master.zip是一个包含Andrew Ng的机器学习课程笔记和代码的压缩包。这门课程是由斯坦福大学提供的计算机科学和人工智能实验室(CSAIL)的教授Andrew Ng教授开设的,旨在通过深入浅出的方式介绍机器学习的基础概念,包括监督学习、无监督学习、逻辑回归、神经网络等等。 这个压缩包中的笔记和代码可以帮助机器学习初学者更好地理解和应用所学的知识。笔记中包含了课程中涉及到的各种公式、算法和概念的详细解释,同时也包括了编程作业的指导和解答。而代码部分包含了课程中使用的MATLAB代码,以及Python代码的实现。 这个压缩包对机器学习爱好者和学生来说是一个非常有用的资源,能够让他们深入了解机器学习的基础,并掌握如何运用这些知识去解决实际问题。此外,这个压缩包还可以作为教师和讲师的教学资源,帮助他们更好地传授机器学习的知识和技能。 ### 回答2: coursera-ml-andrewng-notes-master.zip 是一个 Coursera Machine Learning 课程笔记和教材的压缩包,由学生或者讲师编写。这个压缩包中包括了 Andrew Ng 教授在 Coursera 上发布的 Machine Learning 课程的全部讲义、练习题和答案等相关学习材料。 Machine Learning 课程是一个介绍机器学习的课程,它包括了许多重要的机器学习算法和理论,例如线性回归、神经网络、决策树、支持向量机等。这个课程的目标是让学生了解机器学习的方法,学习如何使用机器学习来解决实际问题,并最终构建自己的机器学习系统。 这个压缩包中包含的所有学习材料都是免费的,每个人都可以从 Coursera 的网站上免费获取。通过学习这个课程,你将学习到机器学习的基础知识和核心算法,掌握机器学习的实际应用技巧,以及学会如何处理不同种类的数据和问题。 总之,coursera-ml-andrewng-notes-master.zip 是一个非常有用的学习资源,它可以帮助人们更好地学习、理解和掌握机器学习的知识和技能。无论你是机器学习初学者还是资深的机器学习专家,它都将是一个重要的参考工具。 ### 回答3: coursera-ml-andrewng-notes-master.zip是一份具有高价值的文件,其中包含了Andrew Ng在Coursera上开授的机器学习课程笔记。这份课程笔记可以帮助学习者更好地理解掌握机器学习技术和方法,提高在机器学习领域的实践能力。通过这份文件,学习者可以学习到机器学习的算法、原理和应用,其中包括线性回归、逻辑回归、神经网络、支持向量机、聚类、降维等多个内容。同时,这份笔记还提供了很多代码实现和模板,学习者可以通过这些实例来理解、运用和进一步深入研究机器学习技术。 总的来说,coursera-ml-andrewng-notes-master.zip对于想要深入学习和掌握机器学习技术和方法的学习者来说是一份不可多得的资料,对于企业中从事机器学习相关工作的从业人员来说也是进行技能提升或者知识更新的重要资料。因此,对于机器学习领域的学习者和从业人员来说,学习并掌握coursera-ml-andrewng-notes-master.zip所提供的知识和技能是非常有价值的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值