二维峰发现复杂度(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)⋅Θ(log⁡n)

我认为,由于被视为常量,因此将其视为并在上面的中将其消除。但是我很难跳转到。这是因为我们现在考虑的是常数的的情况吗?Θ (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。lg⁡(32)lg⁡(ñ)


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.