Проблема компьютерной логики - PullRequest
13 голосов
/ 10 сентября 2011

Рассмотрим многоуровневый компьютер, в котором все уровни разные. У каждого уровня есть инструкции, которые в m раз более мощны, чем инструкции уровня ниже него; то есть одна команда уровня r может выполнять работу из m команд уровня r-1. Если программе уровня 1 требуется k секунд для выполнения, сколько времени эквивалентным программам потребуется на уровнях 2, 3 и 4, если принять n инструкций уровня r требуется интерпретировать одну инструкцию 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

Чтобы рассчитать время выполнения t (q) для данной программы, содержащей q инструкций уровня 1, мы должны учитывать как экспоненциально увеличивающееся количество инструкций уровня 1, которое представляет каждая инструкция уровня r (показано как m ^ ( r-1)) и дополнительное количество инструкций уровня 1, необходимых для интерпретации для каждого слоя, на котором выполняется программа (показано как nm ^ (r-1)). Дополнительные инструкции уровня 1, используемые для интерпретации нижними уровнями, также должны быть добавлены в окончательные уравнения для r> 2. Наконец, для каждого уравнения мы можем определить количество секунд, которое программа должна запустить, умножив общее количество инструкций уровня 1, использованных на время выполнения одного цикла уровня 1, как рассчитано (k / q).

Отказ от ответственности: это домашнее задание, задание уже сдано. Я просто не могу понять семантику этой проблемы, и мне бы очень хотелось ее понять.

Ответы [ 4 ]

1 голос
/ 15 сентября 2011

Я думаю, вы все усложняете. Другими словами, в постановке задачи говорится, что каждый слой работает в m раз быстрее, чем уровень выше. Следовательно, уровень 2 завершает программы за 1 / м времени, уровень 3 за 1 / м * 1 / м и так далее. Таким образом, окончательное уравнение просто:

t (q) = k / (m ** q)

0 голосов
/ 19 сентября 2011

Проблема просто гласит, что если на уровне 1 потребуется k единиц времени, тогда на втором уровне будет k / m, и так далее ...

0 голосов
/ 13 сентября 2011

Я не уверен, что определение задачи завершено, потому что если это так, я не вижу другого разумного способа его решения, кроме его упрощения.

Итак, вот несколько вещей, которые я бы предположил:

  1. t (q, 1) = k (нам нужно найти t (q, r)) => t (1,1) = q / k, почему?Поскольку, если мы не предполагаем, что время зависит только от количества инструкций, а не от типа инструкций, мы на самом деле не можем решить эту задачу.В таком случае q не будет рассматриваться как число, и мы не можем предполагать, что другой набор инструкций будет занимать меньше или больше времени в зависимости от количества инструкций.В заключение, что касается моего чтения в этой задаче, они связывают время только с количеством инструкций.
  2. если программа является нативной на одном уровне 'r', то для их интерпретации потребуется n инструкций другого уровня (сделать их родными).В определении задачи (как представлено здесь) нет ничего, что заставляло бы вас интерпретировать только инструкции уровня r + 1.На самом деле, поскольку мы начинаем с первого уровня, «инструкции n уровня r требуются для интерпретации одной инструкции r + 1», было бы довольно бесполезно, если бы мы не могли предположить то, что я говорю выше.
  3. также q инструкции уровня Xпосле интерпретации всегда следует преобразовывать в инструкции уровня q, другие тиски, мы никогда не сможем узнать время выполнения другого уровня, потому что число инструкций может сильно различаться (как в реальном мире)

Так вотответьте с этими предварительными условиями:

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 предположений неверно, вам нужно ввести новые неизвестные функции, чтобы ответ стал просто уравнением неизвестных функций, которое было бы бесполезным, но гораздо более бесполезным, чем это.один.Это просто красивее:)

Кстати вам нужно посмотреть на ваши упражнения в университете, чтобы увидеть, как были решены подобные задачи, чтобы убедиться, что подход к проблеме правильный.

0 голосов
/ 10 сентября 2011

Это просто рекурсивная функция:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...