Хакни рутину. Как алгоритмы помогают справляться с беспорядком, не тупить в супермаркете и жить проще - [19]

Шрифт
Интервал

Итак, список покупок из простого перечня пунктов становится списком категорий, причем каждая из них, в свою очередь, представляет собой список пунктов.[43] Поскольку продукты в магазине обычно группируются по категориям, Вурзма может просто отправиться в ту часть магазина, где находятся, например, предметы личной гигиены, пробежаться по массиву под названием «личная гигиена» и взять нужные ему вещи со стеллажа. То же самое – для всех остальных покупок. Вот как занимаются шопингом по методу 2. Если бы Вурзма использовал обычный список – массив, как в методе 1, то он бы бродил примерно 13 минут от одного ряда к другому, в худшем случае – просто изучая полки.

Вурзма проходит мимо всех стеллажей для покупки одного предмета из списка. Если n – число проходов, а m – количество пунктов в списке, тогда n/2 × m=(nxm/2). Иными словами, для покупки 20 вещей Вурзма проходит через 20 рядов 20 раз. Принимая во внимание, что для прохождения каждого ряда требуется 2 секунды, то потерянное время составит до 13 минут. С методом 2 его общее время на ходьбу между рядами составляет примерно минуту, так как он не появляется в одном и том же ряду больше одного раза. Вурзма в лучшем случае проходит все ряды один раз, то есть n/2. Так что для приобретения 20 наименований покупок Вурзма, идя от одного ряда к другому, теряет меньше минуты.

Заметьте, что метод 1 не выглядит в точности как сортировка по квадратичному времени, которую мы видели в главах 5 и 11. Он следует шаблону, заставляя Вурзму в худшем случае пройти по всем рядам в магазине для каждой покупки в его списке. Вот как сравниваются два метода:

Бум-бум-бум, делай это часто и пожалеешь, как герой книги Мураками

В главе 1 мы говорили о хеш-таблицах и о том, как они полезны, когда нам нужно провести быстрый обзор и не беспокоиться о порядке. Разговор о многомерных массивах дает нам прекрасную возможность расширить наше знание о хеш-таблицах. Раньше мы принимали на веру, что хеш-функция всегда отмечает позицию элемента, назначая ему уникальное местоположение в хеш-таблице, и именно благодаря этому гарантируется его быстрое нахождение в любое время. В реальности хеш-функция может столкнуться с таким явлением, как коллизия, при которой соответствующее место в хеш-таблице уже занято другим элементом. Это происходит либо потому, что хеш-функция неидеальна, то есть не работает правильно и не обеспечивает единообразного распределения значений хеш-функции, либо у нас больше элементов для хранения, чем может вместить таблица. Степень заполнения хеш-таблицы называется коэффициентом заполнения и равна нулю, когда хеш-таблица пуста, или единице, когда она заполнена.

В таких случаях есть несколько способов разрешения коллизии. Один из них известен под названием метод цепочек. Во время создания цепочки возникает не хеш-таблица элементов, а хеш-таблица группы элементов. Таким образом, когда происходит коллизия, соответствующий пункт перемещается в конец группы и поэтому не происходит непреднамеренной перезаписи данных.

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

Думаешь, куда пойти потом? не волнуйся, я тебе покажу направление, так что поторопись

Нужно подчеркнуть еще одну вещь: многомерный массив заранее навязывает нашим элементам приоритет, а именно – расстояние от входа магазина до конкретного ряда, где находится нужная вам вещь. Возможно, пора расширить наши знания об очередях с приоритетом, о которых мы упоминали мимоходом в главе 8. Там мы говорили, что, когда вы составляете некий приоритизированный список элементов, а после нужно добавить к нему новый элемент, может понадобиться стереть некоторые части списка, чтобы освободить место. Довольно скоро дело заходит в тупик, и вы обнаруживаете, что нужно делать новый список. Как может машина составить такой список с эффективностью, которую мы ждем от нее?

Мы уже видели структуры, оптимизированные для быстрого просмотра (массивы) и вставки элементов в произвольных точках (связные списки). Теперь подробнее рассмотрим очередь с приоритетом, которая оптимизирована для добавления элемента высшего приоритета[44] к коллекции в логарифмическое время. Она называется очередью, даже если не является таковой в привычном представлении, то есть когда первый предмет, вставший в очередь, первым же из нее выходит.[45] Вместо этого вы можете представить очередь с приоритетом как некое подземное растение, которое пускает только один побег за один раз и позволяет проходящим мимо людям сорвать его.

Когда мы принимаемся за задание высшего приоритета, дерево перестраивается и выталкивает наверх задание второй приоритетности, и так далее. Этот способ описания очереди с приоритетом называется пирамидой. Мы не можем объяснить принцип пирамиды при помощи аналогии, но это замечательная структура. Нам стоит оценить, как она умеет перестроиться и вытолкнуть наверх элемент первоочередной приоритетности в логарифмическом времени, обеспечивая возникновение вставок также в логарифмическом времени.


Рекомендуем почитать
Основы системы Дизайна человека. Центры

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Жить без негативных эмоций

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Религиозный вопрос в XXI веке. Геополитика и кризис постмодерна

Жорж Корм – философ, экономист, автор многих замечательных книг, посвященных истории Западной Европы и стран Ближнего Востока.В этой книге он обращается к анализу подъёма религиозных настроений в последние десятилетия XX века и в начале века нынешнего. Именно они становятся сегодня доминирующим фактором мировой политики, одним из ключевых вопросов строительства современного общества и – самое главное – самой острой из существующих (наряду с проблемами окружающей среды) проблем человечества в целом и каждой страны, каждого общества в отдельности.


Без жалости к себе. Раздвинь границы своих возможностей

Правдивая и эмоциональная книга о том, как раздвинуть границы своих возможностей. Тренер Эрик Ларссен помогает лидерам бизнеса, элитным спортсменам и простым людям добиваться своих целей в любых условиях. Его метод доказал свою действенность многократно. Достаточно простого примера: норвежская гольфистка Сюзанн Петерсен не выигрывала турниров на протяжении 18 месяцев, пока не стала работать с Ларссеном. После того, как он стал её коучем, она заняла второе место в мировом рейтинге. Эта книга больше года была на первом месте в списке бестселлеров в Норвегии и переведена на многие языки.


Феноменальный интеллект. Искусство думать эффективно

Почему для успеха вам не нужно много работать? Как научиться мыслить более эффективно? Способен ли человек управлять своими желаниями и мыслями? Можно ли стать богаче благодаря силе мысли? Какие мысли мешают вам сделать успешную карьеру? Как выстроить систему, которая будет работать на вас?В книге рассматриваются вопросы развития и применения интеллекта на простых жизненных ситуациях.Вы узнаете, как работает интеллект, что такое сила интеллекта, можно ли стать умнее, каков универсальный алгоритм решения жизненных проблем, какие ловушки подстерегают на пути их решения, когда нужно включить интеллект, а когда выключить и о чем следует думать в первую очередь, как построить сценарий успеха.


Травма и душа. Духовно-психологический подход к человеческому развитию и его прерыванию

В основу психотерапии посттравматических расстройств личности Дональд Калшед кладет идею о том, что душа живет между двумя мирами – материальным и духовным, а культура предоставляет личности мифопоэтическую матрицу, помогающую выжить после тяжелой травмы. Анализируя сходства и различия юнгианского и психоаналитического подходов к терапии, автор раскрывает тонкости психологической работы со сновидениями и телесными симптомами людей, переживших ранние травмы. Особое внимание уделяется проработке в терапии диссоциации и саморазрушительных тенденций, специфике переноса/контрпереноса и недостаточной символизации.


Стань себе родителем: как исцелить своего внутреннего ребенка и по-настоящему полюбить себя

Если каждая встреча с родственниками заканчивается ссорами, а болезненные воспоминания из детства все никак не отпускают – оставьте попытки изменить окружающих. Лучше исцелите своего внутреннего ребенка! Книга Йена Кана Чжена поможет вам разобраться в том, что родители не смогли дать вам в прошлом. Научитесь преодолевать конфликты и жить в мире со своей семьей и другими людьми.


Рестарт. Как вырваться из «дня сурка» и начать жить

Порой наша жизнь начинает напоминать «день сурка», вновь и вновь проигрывающий все тот же сценарий «дом–работа–дом». Если вы устали каждый день проводить без смысла и радости, делать то, что вам совсем не хочется, эта книга для вас! По мнению Татьяны Ананьевой, признанного эксперта в области HR и маркетинга, консультанта ведущих компаний страны, в основе счастливой и гармоничной жизни лежит принцип осознанности и четкое понимание своих желаний. В легкой и доступной форме она рассказывает, как научиться управлять своей жизнью и обрести внутренний баланс и равновесие, стать счастливее в работе и в жизни. Из этой книги вы узнаете: [ul]Как найти свою мечту и реализовать ее; Почему нам так трудно избавиться от шаблонов и что с этим делать; Как научиться делать шаг к цели каждый день; Чем отличается подход к работе у разных поколений; Как избежать типичных ошибок в планировании.[/ul].


Синдром самозванца. Как перестать обесценивать свои успехи и постоянно доказывать себе и другим, что ты достоин

Синдром самозванца – относительно новое, но весьма распространенное явление, которому подвержены как молодые, так и пожилые мужчины и женщины, всемирно известные личности, карьеристы и обычные люди, считающие себя плохими партнерами, родителями или друзьями. К сожалению, все мы в тот или иной период времени перестаем верить в собственные силы и компетентность, что, в свою очередь, сказывается на нашей учебе, работе или отношениях. Эта книга – первый шаг в борьбе с низкой самооценкой. Представленные в ней результаты научных исследований, тесты и примеры из психологической практики помогут осознать причины неуверенности в себе, а конкретные методики и эффективные советы позволят избавиться от нее навсегда.


Предназначение. Найти дело жизни и реализовать свои мечты

У каждого есть Предназначение. Не следовать ему – самое большое преступление. Отсутствие четкого понимания своего пути делает людей несчастными и бедными. Александр Рей – практикующий психолог и просто счастливый человек. Он написал книгу-тренинг «Предназначение» для того, чтобы без пустых теорий и рассуждений помочь вам осознать свою миссию и немедленно приступить к ее осуществлению.