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

Материал из DISCOPAL
Перейти к: навигация, поиск
 
(не показаны 33 промежуточные версии 2 участников)
Строка 1: Строка 1:
 
== Вопрос: Q03-08c765 ==
 
== Вопрос: Q03-08c765 ==
  
Assume that any n-bit positive integer x is stored as a linked list of bits so that the first element of the list
+
Предположим, что любое ''n''-битное положительное целое число ''x'' хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, ''x'' = 14 = 1110<sub>2</sub> хранится как связный список (0,1,1,1) размера ''n'' = 4.
is the least significant bit. For example, 2 x 14 1110 is stored as the linked list 0, 1, 1, 1 of size n 4.
+
For this data structure, the operation that replaces x by 8
+
x can be done in
+
(A) 1 steps
+
(B) log n steps
+
(C) n steps
+
(D) n n log steps
+
(E) 2
+
n steps
+
  
<i>Тут вставьте перевод вопроса.
+
Для этой структуры данных операция, которая заменяет ''x'' на <m>\left\lfloor\frac{x}{8}\right\rfloor</m> (целочисленное деление ''x'' на 8 с округлением вниз), может быть выполнена за:
Используйте [https://wiki.4intra.net/Help:%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 возможности разметки],  
+
включая формулы и т.п, если будут графы — посмотрите как задать их текстом https://wiki.4intra.net/Graphviz .
+
Если код — теги «code-pascal», «code-c» или «code-python».
+
  
Старайтесь нетривиальные понятия, особенно незнакомые вам, найти ссылку на википедию и вставить (нейросети лажают!).
+
=== Ответы ===
Это важно, чтобы найти корректный перевод (то, что в википедии, или на худой конец — точно массово гуглится).
+
  
Потом конечно сотрите инструкции, которые тут курсивом.</i>
+
* Правильный ответ: <m>\Theta(1)</m>
 +
* <m>\Theta(\log n)</m>
 +
* <m>\Theta(n)</m>
 +
* <m>\Theta(n \log n)</m>
 +
* <m>\Theta(n^2)</m>
  
=== Ответы ===
+
=== Объяснение ===
<i>Если ответы простые, однострочные, используйте простой способ задания ответов списком, типа так
+
{{cstest-source|2011-gre-cs-practice-book.pdf|15|3}}
(префикс «Правильный ответ:» — это дословно, для правильного ответа, неважно, какой он будет в списке)</i>
+
  
* Правильный ответ: <m>\Theta(1)<m> steps
+
Верный ответ <m>\Theta(1)</m> (константное время).
* O(log n) steps
+
* O(n) steps
+
+
*
+
  
<i>Если ответы длинные, многострочные, или там графы, используйте
+
Почему это верно:
[https://wiki.4intra.net/MediawikiQuizzer/ru#.D0.9E.D1.82.D0.B2.D0.B5.D1.82.D1.8B способ задания ответов разделами],  
+
* 1. Деление на 8 (в двоичной системе) эквивалентно сдвигу вправо на 3 позиции
Но такое очень редко встречается. </i>
+
* 2. Так как список начинается с наименее значимого бита, нам достаточно просто удалить первые 3 элемента списка
 +
* 3. В связном списке удаление первых элементов делается за константное время — достаточно переместить указатель начала списка
 +
* 4. Независимо от размера входных данных ''n'', операция всегда требует одинакового (константного) количества действий
  
ответ А
+
Почему остальные варианты неверны:
  
=== Объяснение ===
+
* <m>\Theta(\log n)</m> — излишне много шагов, нет необходимости в логарифмической сложности для простой операции сдвига
<i>Сначала заполните номер страницы с этим вопросом
+
 
{{cstest-source|2011-gre-cs-practice-book.pdf|15|3}}
+
* <m>\Theta(n)</m> — линейное время не требуется, так как нам не нужно проходить весь список
 +
 
 +
* <m>\Theta(n \log n)</m> — слишком большая сложность для простой операции деления на 8
 +
 
 +
* <m>\Theta(n^2)</m> — квадратичная сложность абсолютно избыточна для данной операции
  
Если все сделаете правильно, по ссылке выше будет открываться правильная страница в правильном PDFе.
+
Ключевой момент в том, что из-за способа хранения числа (''LSB first'' — наименее значимый бит первый) и того, что деление на 8 это просто сдвиг на 3 бита, операция сводится к простому перемещению указателя в связном списке, что делается за константное время.
  
Ну и наконец, вики-разметкой напишите ваше понимание, почему правильный ответ — правильный, а [[2004-gre-cs-practice-book.pdf/Q16|неправильные варианты — неправильны]].
+
{{question-ok|[[Участник:StasFomin|StasFomin]] 20:16, 18 декабря 2024 (UTC)}}
Тут тоже могут быть полезны [[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)}}
+
[[Категория:Биты]]

Текущая версия на 20:24, 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 бита, операция сводится к простому перемещению указателя в связном списке, что делается за константное время.