计算机逻辑问题
Posted
技术标签:
【中文标题】计算机逻辑问题【英文标题】:Computer logic problem 【发布时间】:2011-11-14 05:31:14 【问题描述】:考虑一台多级计算机,其中所有级别都不同。每个级别的指令是其下一层的指令的 m 倍;也就是说,一条r级指令可以完成m级r-1条指令的工作,如果一个1级程序需要k秒运行,假设n级r指令,等效程序在2、3和4级需要多长时间需要解释单个 r+1 指令吗?
这是我想出的解决方案。有人可以确认或评论吗?
这是我最终想出的解决方案。任何人都可以验证或评论吗?
Level (r) Level-1 Instructions (m) Time
4 m^3 t(q) ==(m^3q+n+nm+nm^2) (k/q)
3 m^2 t(q) =(m^2q+n+nm)(k/q)
2 m t(q) = (mq+n)(k/q)
1 1 t(q) = k
为了计算包含 q 条一级指令的给定程序的运行时间 t(q),我们必须同时考虑每条 r 级指令所代表的呈指数增长的一级指令数量(显示为 m^( r-1)) 以及执行程序的每一层解释所需的额外 1 级指令数量(显示为 nm^(r-1))。对于 r>2,还必须将用于由较低级别解释的附加级别 1 指令添加到最终方程中。最后,对于每个方程,我们可以通过将使用的一级指令总数乘以一个一级循环的执行时间来确定程序运行所需的秒数,计算方式为 (k/q)。
免责声明:这是作业,作业已经交了。我根本无法理解这个问题的语义,我很想理解它。
【问题讨论】:
提示:制作一个表,其列标记如下:Level、NumInstructionsInProgram、InstructionsPerSecond、TotalTime。第一行将是 1、N、N/k、k。继续逐行填写。 我认为问题不在于是否所有指令都需要相同数量的时钟来执行。 我一直在填写表格,我只是对每个变量的确切含义以及如何将它们纳入表格值的语义有疑问。 这真的不是一个 CS 问题。更像是基础数学,上面有一些很好的味道。 在没有常数时求解 x?他们想要一个方程式来回答吗? 【参考方案1】:我认为你们都把这件事弄得太复杂了。换句话说,问题陈述说,每一层的运行速度比上一层快 m 倍。因此第 2 层在 1/m 时间内完成程序,第 3 层在 1/m * 1/m 时间内完成,依此类推。所以最后的等式就是:
t(q) = k / (m ** q)
【讨论】:
【参考方案2】:问题简单地说,如果在第 1 级需要 k 个单位时间,那么 k/m 单位将在第 2 级花费,依此类推...
【讨论】:
【参考方案3】:这只是一个递归函数:
t(q, r) = q*k if r == 1
t(q, r) = q*t(m, r-1) + t(n, r-1)
现在解释一下:
This is obvious since it was stated in the question (I parameterized k as the elementary unit, k is the time for one level 1 instruction):
t(q, r) = q*k if r == 1
The amount of time it takes to execute a function with q r-1 instructions
t(q, r) =
q times the amount of the time it takes for m level r-1 instruction
q*t(m, r-1)
plus the time it takes for n level r-1 instructions
+ t(n, r-1)
【讨论】:
【参考方案4】:我不确定任务定义是否完整,因为如果是完整的,除了简化之外,我看不到任何其他明智的解决方法。
所以这里有几件事我会假设:
-
t(q,1)=k (我们的任务是求 t(q,r)) => t(1,1) = q/k,为什么?因为如果我们不假设时间只取决于指令的数量而不是指令的类型,那么我们实际上是这个任务无法解决的。在这种情况下,q 不会被视为一个数字,并且我们不能假设另一组指令会根据指令的数量花费更少或更多的时间。总之,就我在这项任务中的阅读而言,它们仅将时间与指令数量相关联。
如果程序在一个级别“r”中是本机的,则需要 n 条另一级别的指令来解释它们(使它们成为本机)。任务定义(如此处所示)中没有任何内容迫使您仅解释 r+1 级指令。实际上,因为我们从一级开始,如果我们不能假设我在上面所说的,“需要 n 级 r 指令来解释单个 r+1 指令”将毫无用处。
还有 q 级 X 指令在被解释后应始终转换为 q 级 Y 指令,否则我们永远无法知道另一级的执行时间,因为指令的数量可能会有很大差异(就像在现实世界中一样)
所以这是有这些先决条件的答案:
q=number of level one program instructions
t(q, r)=time necessary to execute q **level 1** instructions on level r comp
t(1, r)=time necessaty to execute one instruction on level r comp
t(1, 1)=time necessary to execute one instruction on level 1 comp
t(q, 1)/m^(r-1)=time to execute q **native** instructions on level r comp
t(q, 1)=k
t(1, 1)=k/q
t(q,r)=(time to interpret q non-native instructions/convert them to native) + (time to actually execute the code)
t(q,r)=t(qn, 1)/m^(r-1) + t(q, 1)/m^(r-1)
t(q,r)=(time to execute qn native instructions) + (time to execute q native instructions)
t(q,r)=nt(q, 1)/m^(r-1) + t(q, 1)/m^(r-1)
t(q,r)=(n+1)t(q, 1)/m^(r-1)
t(q,r)=(n+1)k/m^(r-1)
如果 3 个假设中的任何一个是错误的,您需要引入新的未知函数,因此答案将成为一个未知函数的方程,这将是无用的,但比这个更无用。这个更漂亮:)
顺便说一句你需要看看你在大学里的练习,看看类似的任务是如何解决的,以确保解决问题的方法是正确的。
【讨论】:
以上是关于计算机逻辑问题的主要内容,如果未能解决你的问题,请参考以下文章