2011-gre-cs-practice-book.pdf/Q03

Материал из DISCOPAL
< 2011-gre-cs-practice-book.pdf
Версия от 20:24, 18 декабря 2024; StasFomin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.