Page 277 - Bkhargava_-_Grokaem_algoritmy
P. 277

276    Ответы к упражнениям


        2.2  Допустим, вы пишете приложение для приема заказов от посетителей
             ресторана. Приложение должно хранить список заказов. Официанты
             добавляют заказы в список, а повара читают заказы из списка и вы­
             полняют их. Заказы образуют очередь: официанты добавляют заказы
             в конец очереди,  а повар берет первый заказ из очереди и начинает
             готовить.


















             Какую структуру данных вы бы использовали для реализации этой оче­
             реди -  массив или связанный список? (Подсказка: связанные списки
             хорошо подходят для вставки/удаления, а массивы - для произволь­
             ного доступа к элементам. Что из этого понадобится в данном случае?)

             Ответ:  Связанный список. Вставка происходит очень часто ( офици­
             анты добавляют заказы), а связанные списки эффективно выполняют
             эту операцию. Ни поиск, ни произвольный доступ (сильные стороны
             массивов) вам не понадобятся, потому что повар всегда извлекает из
             очереди первый заказ.

        2.3  Проведем мысленный эксперимент. Допустим, Facebook хранит
             список имен пользователей. Когда кто-то пытается зайти на сайт
             Facebook, система пытается найти имя пользователя. Если имя входит
             в список имен зарегистрированных пользователей, то вход разреша­
             ется. Пользователи приходят на Facebook достаточно часто, поэтому
             поиск по списку имен пользователей будет выполняться часто. Будем
             считать, что Facebook использует бинарный поиск для поиска в спи­
             ске. Бинарному поиску необходим произвольный доступ - алгоритм
             должен мгновенно обратиться к среднему элементу текущей части
             списка. Зная это обстоятельство, как бы вы реализовали список поль­
             зователей - в виде массива или связанного списка?

                                                         www.trk.kg
   272   273   274   275   276   277   278   279   280   281   282