2011-gre-cs-practice-book.pdf/Q01 — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
Строка 1: Строка 1:
{{reserve-task|[[Участник:Tiniakov.ad|Tiniakov.ad]] 18:48, 16 декабря 2024 (UTC)}}
 
 
 
== Вопрос: Q01-08c765 ==
 
== Вопрос: Q01-08c765 ==
  
Рассмотрим следующий псевдокод рекурсивной функции goAgain
+
Рассмотрим следующий псевдокод рекурсивной функции <tt>goAgain</tt>
  
<source lang="pascal">
+
<code-pascal>
 
// assume N is a positive integer
 
// assume N is a positive integer
 
integer goAgain ( integer a, integer N )
 
integer goAgain ( integer a, integer N )
Строка 14: Строка 12:
 
   return a + goAgain ( a, N/2 )
 
   return a + goAgain ( a, N/2 )
 
end
 
end
</source>
+
</code-pascal>
  
 
Каков порядок роста в зависимости от N количества рекурсивных вызовов функции goAgain?
 
Каков порядок роста в зависимости от N количества рекурсивных вызовов функции goAgain?
Строка 27: Строка 25:
  
 
=== Объяснение ===
 
=== Объяснение ===
 
 
{{cstest-source|2011-gre-cs-practice-book.pdf|14|1}}
 
{{cstest-source|2011-gre-cs-practice-book.pdf|14|1}}
  
 
Не уверен что тут действительно нужно какое-либо объяснение, но все же.
 
Не уверен что тут действительно нужно какое-либо объяснение, но все же.
  
* <m>\theta(logN)</m> - верно, поскольку функция каждый раз вызывает себя же с аргументом N вдвое меньшим, чем приняла на вход. В итоге к примеру для N = 16 функция будет вызвана со следующими аргументами: 16, 8, 4, 2, 1 - всего 5 раз, что соответствует ассимптотике <m>\theta(logN)</m>.
+
* <m>\theta(logN)</m> — верно, поскольку функция каждый раз вызывает себя же с аргументом N вдвое меньшим, чем приняла на вход. В итоге к примеру для N = 16 функция будет вызвана со следующими аргументами: 16, 8, 4, 2, 1 — всего 5 раз, что соответствует ассимптотике <m>\theta(logN)</m>.
* <m>\theta(NlogN)</m> - данная ассимптотика предполагает более чем линейный рост количества вызовов функции относительно N, что очевидно не так.
+
* <m>\theta(NlogN)</m> — данная ассимптотика предполагает более чем линейный рост количества вызовов функции относительно N, что очевидно не так.
* <m>\theta(N)</m> - данная ассимптотика предполагает рост количества вызовов функции линейно зависимый от N. Однако это очевидно не так.
+
* <m>\theta(N)</m> — данная ассимптотика предполагает рост количества вызовов функции линейно зависимый от N. Однако это очевидно не так.
* <m>\theta(N^2)</m> - данная ассимптотика предполагает квадратичный рост количества вызовов функции в зависимости от N, что очевидно не верно.
+
* <m>\theta(N^2)</m> — данная ассимптотика предполагает квадратичный рост количества вызовов функции в зависимости от N, что очевидно не верно.
* <m>\theta(N^3)</m> - данная ассимптотика предполагает кубический рост количества вызовов функции в зависимости от N, что очевидно не так.
+
* <m>\theta(N^3)</m> — данная ассимптотика предполагает кубический рост количества вызовов функции в зависимости от N, что очевидно не так.
 
+
{{question-ok|}}
+
  
{{checkme|[[Участник:Tiniakov.ad|Tiniakov.ad]] 19:14, 16 декабря 2024 (UTC)}}
+
{{question-ok|[[Участник:StasFomin|StasFomin]] 19:16, 16 декабря 2024 (UTC)}}

Версия 19:16, 16 декабря 2024

Вопрос: Q01-08c765

Рассмотрим следующий псевдокод рекурсивной функции goAgain

// assume N is a positive integer
integer goAgain ( integer a, integer N )
begin
 if ( N == 1 ) then
  return a
 else
  return a + goAgain ( a, N/2 )
end

Каков порядок роста в зависимости от N количества рекурсивных вызовов функции goAgain?

Ответы

  • Правильный ответ:

Объяснение

Исходники — вопрос 1 на 14 странице книги «2011-gre-cs-practice-book.pdf»

Не уверен что тут действительно нужно какое-либо объяснение, но все же.

  •  — верно, поскольку функция каждый раз вызывает себя же с аргументом N вдвое меньшим, чем приняла на вход. В итоге к примеру для N = 16 функция будет вызвана со следующими аргументами: 16, 8, 4, 2, 1 — всего 5 раз, что соответствует ассимптотике .
  •  — данная ассимптотика предполагает более чем линейный рост количества вызовов функции относительно N, что очевидно не так.
  •  — данная ассимптотика предполагает рост количества вызовов функции линейно зависимый от N. Однако это очевидно не так.
  •  — данная ассимптотика предполагает квадратичный рост количества вызовов функции в зависимости от N, что очевидно не верно.
  •  — данная ассимптотика предполагает кубический рост количества вызовов функции в зависимости от N, что очевидно не так.