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

Материал из DISCOPAL
Перейти к: навигация, поиск
(не показано 29 промежуточных версий этого же участника)
Строка 1: Строка 1:
 
== Вопрос: Q03-08c765 ==
 
== Вопрос: Q03-08c765 ==
  
Предположим, что любое n-битное положительное целое число x хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, x = 14 = 11102 хранится как связный список (0,1,1,1) размера n = 4.
+
Предположим, что любое ''n''-битное положительное целое число ''x'' хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, ''x'' = 14 = 1110<sub>2</sub> хранится как связный список (0,1,1,1) размера ''n'' = 4.
  
Для этой структуры данных операция, которая заменяет x на ⌊x/8⌋ (целочисленное деление x на 8 с округлением вниз), может быть выполнена за:
+
Для этой структуры данных операция, которая заменяет ''x'' на <m>⌊\frac{x}{8}⌋</m> (целочисленное деление ''x'' на 8 с округлением вниз), может быть выполнена за:
 
+
(A) <m>\Theta(1) шагов</m>
+
(B) <m>\Theta(log n) шагов</m>
+
(C) <m>\Theta(n) шагов</m>
+
(D) <m>\Theta(n log n) шагов</m>
+
(E) <m>\Theta(n²) шагов</m>
+
  
 
=== Ответы ===
 
=== Ответы ===
<i>Если ответы простые, однострочные, используйте простой способ задания ответов списком, типа так
 
(префикс «Правильный ответ:» — это дословно, для правильного ответа, неважно, какой он будет в списке)</i>
 
  
* Правильный ответ: <m>\Theta(1)</m> steps
+
* Правильный ответ: <m>\Theta(1)</m>  
* O(log n) steps
+
* <m>\Theta(log n)</m>
* O(n) steps
+
* <m>\Theta(n)</m>
*
+
* <m>\Theta(n log n)</m>
*  
+
* <m>\Theta(n^2)</m>
  
<i>Если ответы длинные, многострочные, или там графы, используйте
+
=== Объяснение ===
[https://wiki.4intra.net/MediawikiQuizzer/ru#.D0.9E.D1.82.D0.B2.D0.B5.D1.82.D1.8B способ задания ответов разделами],
+
{{cstest-source|2011-gre-cs-practice-book.pdf|15|3}}
Но такое очень редко встречается. </i>
+
  
ответ А
+
Верный ответ <m>\Theta(1)</m> (константное время).
  
=== Объяснение ===
+
Почему это верно:
<i>Сначала заполните номер страницы с этим вопросом
+
* 1. Деление на 8 (в двоичной системе) эквивалентно сдвигу вправо на 3 позиции
{{cstest-source|2011-gre-cs-practice-book.pdf|15|3}}
+
* 2. Так как список начинается с наименее значимого бита, нам достаточно просто удалить первые 3 элемента списка
 +
* 3. В связном списке удаление первых элементов делается за константное время - достаточно переместить указатель начала списка
 +
* 4. Независимо от размера входных данных ''n'', операция всегда требует одинакового (константного) количества действий
 +
 
 +
Почему остальные варианты неверны:
 +
 
 +
* <m>\Theta(log n)</m> - излишне много шагов, нет необходимости в логарифмической сложности для простой операции сдвига
 +
 
 +
* <m>\Theta(n)</m> - линейное время не требуется, так как нам не нужно проходить весь список
 +
 
 +
* <m>\Theta(n log n)</m> - слишком большая сложность для простой операции деления на 8
  
Если все сделаете правильно, по ссылке выше будет открываться правильная страница в правильном PDFе.
+
* <m>\Theta(n^2)</m> - квадратичная сложность абсолютно избыточна для данной операции
  
Ну и наконец, вики-разметкой напишите ваше понимание, почему правильный ответ — правильный, а [[2004-gre-cs-practice-book.pdf/Q16|неправильные варианты — неправильны]].
+
Ключевой момент в том, что из-за способа хранения числа (''LSB first'' - наименее значимый бит первый) и того, что деление на 8 это просто сдвиг на 3 бита, операция сводится к простому перемещению указателя в связном списке, что делается за константное время.
Тут тоже могут быть полезны [[2004-gre-cs-practice-book.pdf/Q03|ссылки на википедию]],  
+
решение вами [[2004-gre-cs-practice-book.pdf/Q12|рекуррентных уравнений в sympy]].
+
  
</i>
 
 
{{reserve-task|[[Участник:Markvernikov|Markvernikov]] 10:19, 18 декабря 2024 (UTC)}}
 
{{reserve-task|[[Участник:Markvernikov|Markvernikov]] 10:19, 18 декабря 2024 (UTC)}}
 +
{{checkme|[[Участник:Markvernikov|Markvernikov]] 11:07, 18 декабря 2024 (UTC)}}

Версия 11:23, 18 декабря 2024

Вопрос: Q03-08c765

Предположим, что любое n-битное положительное целое число x хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, x = 14 = 11102 хранится как связный список (0,1,1,1) размера n = 4.

Для этой структуры данных операция, которая заменяет x на (целочисленное деление x на 8 с округлением вниз), может быть выполнена за:

Ответы

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

Объяснение

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

Верный ответ (константное время).

Почему это верно:

  • 1. Деление на 8 (в двоичной системе) эквивалентно сдвигу вправо на 3 позиции
  • 2. Так как список начинается с наименее значимого бита, нам достаточно просто удалить первые 3 элемента списка
  • 3. В связном списке удаление первых элементов делается за константное время - достаточно переместить указатель начала списка
  • 4. Независимо от размера входных данных n, операция всегда требует одинакового (константного) количества действий

Почему остальные варианты неверны:

  • - излишне много шагов, нет необходимости в логарифмической сложности для простой операции сдвига
  • - линейное время не требуется, так как нам не нужно проходить весь список
  • - слишком большая сложность для простой операции деления на 8
  • - квадратичная сложность абсолютно избыточна для данной операции

Ключевой момент в том, что из-за способа хранения числа (LSB first - наименее значимый бит первый) и того, что деление на 8 это просто сдвиг на 3 бита, операция сводится к простому перемещению указателя в связном списке, что делается за константное время.

Задача зарезервирована: Markvernikov 10:19, 18 декабря 2024 (UTC)

Check-me-animated.gif Решено: Markvernikov 11:07, 18 декабря 2024 (UTC)