2011-gre-cs-practice-book.pdf/Q03 — различия между версиями
Строка 1: | Строка 1: | ||
== Вопрос: Q03-08c765 == | == Вопрос: Q03-08c765 == | ||
− | Предположим, что любое n-битное положительное целое число x хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, <i>x</i> = 14 = 11102 хранится как связный список (0,1,1,1) размера <i>n</i> = 4. | + | Предположим, что любое <i>n</i>-битное положительное целое число x хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, <i>x</i> = 14 = 11102 хранится как связный список (0,1,1,1) размера <i>n</i> = 4. |
− | Для этой структуры данных операция, которая заменяет <i>x</i> на | + | Для этой структуры данных операция, которая заменяет <i>x</i> на \frac{<i>x</i>}{8} (целочисленное деление x на 8 с округлением вниз), может быть выполнена за: |
=== Ответы === | === Ответы === | ||
Строка 14: | Строка 14: | ||
=== Объяснение === | === Объяснение === | ||
− | В данной задаче верный ответ - | + | {{cstest-source|2011-gre-cs-practice-book.pdf|15|3}} - ссылка на задачу |
+ | |||
+ | В данной задаче верный ответ - <m>\Theta(1) шагов</m> (константное время). | ||
Почему это верно: | Почему это верно: | ||
Строка 20: | Строка 22: | ||
2. Так как список начинается с наименее значимого бита, нам достаточно просто удалить первые 3 элемента списка | 2. Так как список начинается с наименее значимого бита, нам достаточно просто удалить первые 3 элемента списка | ||
3. В связном списке удаление первых элементов делается за константное время - достаточно переместить указатель начала списка | 3. В связном списке удаление первых элементов делается за константное время - достаточно переместить указатель начала списка | ||
− | 4. Независимо от размера входных данных n, операция всегда требует одинакового (константного) количества действий | + | 4. Независимо от размера входных данных <i>n</i>, операция всегда требует одинакового (константного) количества действий |
Почему остальные варианты неверны: | Почему остальные варианты неверны: |
Версия 10:41, 18 декабря 2024
Вопрос: Q03-08c765
Предположим, что любое n-битное положительное целое число x хранится в виде связного списка битов так, что первый элемент списка является наименее значимым битом. Например, x = 14 = 11102 хранится как связный список (0,1,1,1) размера n = 4.
Для этой структуры данных операция, которая заменяет x на \frac{x}{8} (целочисленное деление 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)