【问题标题】:Algorithm analysis in TAOCPTAOCP中的算法分析
【发布时间】:2012-03-17 14:09:11
【问题描述】:

好吧,我被难住了。 TAOCP vol1,第 3 版,第 1.3.2 节“MIX 汇编语言”提供了一个简单的汇编程序,用于查找数组的最大值。该程序在第 145 页上给出,以及每条指令应该执行的次数。在下一页它说“[...] 执行子程序的时间长度;它是 (5+5n+3A)u [...]”

但是:当您实际将列表中给出的计数相加时,您最终会得到 (4+4n+2A) 的因子。这种差异也出现在其他算法中。例如,在第 1.3.3 节对程序 A 的分析中,Knuth 写道“通过简单的加法 [..] (7+5A+...)”。当您实际执行“简单加法”时,您最终会得到 (5+3A+...)

这是怎么回事?


这里是 MIX 代码,其中并排括号中的文本计数。为了便于输入,我将标签名称缩短为两个字符

    X EQU 1000
      ORIG 3000
MA    STJ EX      [1]
IN    ENT3 0,1    [1]
      JMP CH      [1]
LO    CMPA X,3    [n-1]
      JGE *+3     [n-1]
CH    ENT2 0,3    [A+1]
      LDA X,3     [A+1]
      DEC3 1      [n]
      J3P LO      [n]
EX    JMP *       [1]

【问题讨论】:

  • 您愿意添加与您的示例对应的代码吗?
  • 好的,我已经添加了查找最大值的代码清单。程序 A 相当长(~ 80 LOC),所以我不会输入它。
  • 由于您没有提供有关“A”和“n”是什么的任何信息,我只能猜测。汇编中的某些指令根据情况需要或多或少的周期(例如条件跳转)。这可能是答案(也许这本书给出了最坏的情况)。另一种可能性是这本书(我不知道)可能有一些关于时间长度的特殊约定。
  • @Sword22 A 和 n 是什么并不重要;只是参数。你说得对,我自己也弄明白了:有些指令的执行时间比其他指令要长;括号中的因素后面的“u”告诉了我。我还将所有内容乘以每条指令所需的时间单位数,现在一切都检查出来了。而且文中没有解释,grrr。

标签: algorithm taocp


【解决方案1】:

好的,我想出了这个。括号中的因素后面的“u”告诉我:有些指令的执行时间比其他指令要长。考虑到这一点(书中有一张说明时间的表格),一切都会检查出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多