二维峰发现复杂度(MIT OCW 6.006)


9

43:30的MIT OCW 6.006的朗诵视频中,

给定一个具有列和行的矩阵,二维峰查找算法(其中一个峰是大于或等于其相邻邻居的任何值)被描述为:×ñ一个ñ

注意:如果在通过来描述列时出现混淆,我表示歉意,但这是背诵视频描述它的方式,我尝试与该视频保持一致。这让我非常困惑。ñ

  1. 选择中间的列 // 具有复杂性ñ/2Θ1个

  2. 求列的最大值// 具有复杂度, 因为一列中Θ ñ/2Θ

  3. 检查水平。最大值的行邻居,如果大于,则找到一个峰值,否则以递归// 具有复杂度T n / 2 m Ťñ/2Ťñ/2

然后要评估递归,背诵教练说

Ť1个=Θ因为它找到最大值

(E1)Ťñ=Θ1个+Θ+Ťñ/2

我了解下一部分,在视频中的52:09,他说要把当作常量,因为行数永不改变。但我不知道这如何导致以下产品:

(E2)T(n,m)=Θ(m)Θ(logn)

我认为,由于被视为常量,因此将其视为并在上面的中将其消除。但是我很难跳转到。这是因为我们现在考虑的是常数的的情况吗?Θ 1 Ë 1 Ë 2 ţ ñ / 2 mΘ(1)(E1Ë2Ťñ/2

我认为可以“看到”总体思想是,在最坏的情况下,对m个行执行操作。我要弄清楚的是如何描述从到到其他人的跳跃,即获得真正的理解。E 1 E 2 Θ日志ñË1个Ë2

Answers:


1

据我了解,评估给定列中的所有元素并确定其中哪些元素是全局最大值需要(m)时间。当Θ LG ñ 进来的是,在最坏的情况下,该算法必须评估LG ñ 找到一个峰值之前的矩阵列。则总功为Θ m lg n ΘΘlgñlgñΘlgñ

例如,假设您的矩阵有32列和8行。

  1. 您选择中间一列,即第16列。您对其进行了评估,并发现该列的全局峰已被右侧的元素所取代。您删除第1-16列,并专注于第17-32列
  2. 找到剩余矩阵的中间列,即第24列,然后评估一个全局峰(这是第二列评估)。您发现需要向右移动。删除第17-24列,专注于25-32。
  3. 查找中间(第28列)-您进行评估(第三列评估),然后发现需要向右移动。删除第25-28列,并专注于29-32。
  4. 评估第30列(第四次评估),发现您需要向右移动,删除第29-30列。
  5. 评估剩余的列之一(第五列评估),您就完成了。

总共,您完成了五列评估。5 = = lg n 其中n是矩阵中的列数,lg是对数为2。lg32lgñ


2

您概述的分析似乎不正确。正确的复杂度是,其中m是矩阵的较大维度(行或列)。有关更多/更好的详细信息,请参见此其他正确的分析。错误的部分不限定递推关系Ť Ñ 在以下方面Ť Ñ 只(在纸张正确处理)。该论文显示/使用了一个无穷级数:ØŤñŤñ

Ťñ=Ťñ2+CñŤñ=Ť1个+Cñ1个+1个2+1个4+1个8+=Øñ


1
这个答案实际上是不可能的!OP在背诵视频MIT OCW 6.006中讨论了该算法,而这个答案是在讨论另一种算法。特别是,OP概述的分析对于该视频中的算法是正确的。
John L.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.