Мы можем использовать хеширование для нашего кредитного плеча, если вы можете абстрагировать одну пару носков как сам ключ, а другую его пару как значение.
Сделайте на полу позади себя две воображаемые секции, одну для себя, а другую для вашего супруга.
Возьмите одну из стопки носков.
Теперь положите носки на пол по очереди, следуя приведенному ниже правилу.
Определите, что это ваши носки, и посмотрите на соответствующую секцию на полу.
Если вы заметили пару на полу, возьмите ее и свяжите узлом, или закрепите, или сделайте все, что вы будете делать после того, как найдете пару и поместите ее в корзину (снимите ее с пола).
Поместите его в соответствующий раздел.
Повторяйте 3, пока все носки не снимутся со стопки.
Пояснение:
Хеширование и абстракция
Абстракция - очень мощная концепция, которая использовалась для улучшения пользовательского опыта (UX). Примеры абстракции в реальных взаимодействиях с компьютерами включают:
- Значки папок, используемые для навигации в графическом интерфейсе пользователя (GUI) для доступа к адресу, вместо ввода фактического адреса для перехода к местоположению.
- Ползунки графического интерфейса пользователя, используемые для управления различными уровнями громкости, положением прокрутки документа и т. Д.
Хеширование или другие нестандартные решения не подходят, потому что я не могу дублировать свои носки (хотя было бы неплохо, если бы я мог).
Я полагаю, что спрашивающий думал о применении хеширования так, чтобы слот, к которому идет любая пара носков, должен был быть известен перед их размещением.
Вот почему я предложил абстрагироваться от одного носка, который кладется на пол, как самого хеш-ключа (следовательно, нет необходимости дублировать носки).
Как определить наш хеш-ключ?
Приведенное ниже определение для нашего ключа также будет работать, если существует более одной пары похожих носков. То есть, допустим, есть две пары черных мужских носков PairA и PairB, и каждый носок называется PairA-L, PairA-R, PairB-L, PairB-R. Таким образом, PairA-L может быть объединена с PairB-R, но PairA-L и PairB-L не могут быть объединены в пару.
Допустим, любой носок можно однозначно идентифицировать по
Attribute[Gender] + Attribute[Colour] + Attribute[Material] + Attribute[Type1] + Attribute[Type2] + Attribute[Left_or_Right]
Это наша первая хеш-функция. Давайте использовать короткие обозначения для этого h1(G_C_M_T1_T2_LR)
. h1 (x) - это не наш ключ местоположения.
Другой хеш-функцией, исключающей атрибут Left_or_Right, будет h2(G_C_M_T1_T2)
. Вторая функция h2 (x) - это ключ нашего местоположения! (для пространства на полу позади вас).
- Чтобы найти слот, используйте h2 (G_C_M_T1_T2).
- Как только слот будет найден, используйте h1 (x), чтобы проверить их хэши. Если они не совпадают, у вас есть пара. Иначе бросьте носок в тот же слот.
ПРИМЕЧАНИЕ. Поскольку мы удаляем пару, как только находим ее, можно с уверенностью предположить, что будет только один слот с уникальным значением h2 (x) или h1 (x).
В случае, если у нас есть каждый носок с ровно одной подходящей парой, используйте h2 (x) для поиска местоположения, а если нет пары, требуется проверка, так как можно с уверенностью предположить, что это пара.
Почему так важно класть носки на пол
Рассмотрим сценарий, когда носки сложены друг на друга стопкой (худший случай). Это означает, что у нас не было бы другого выбора, кроме как выполнить линейный поиск, чтобы найти пару.
Разложив их по полу, вы улучшите видимость, что повысит вероятность обнаружения подходящего носка (совпадающего с ключом решетки). Когда на шаге 3 на пол был поставлен носок, наш разум подсознательно зарегистрировал это местоположение. - Таким образом, если это место доступно в нашей памяти, мы можем напрямую найти подходящую пару. - Если местоположение не запомнилось, не волнуйтесь, тогда мы всегда можем вернуться к линейному поиску.
Почему важно снимать пару с пола?
- Кратковременная человеческая память работает лучше всего, когда в ней меньше элементов для запоминания. Таким образом увеличивается вероятность того, что мы прибегнем к хешированию для обнаружения пары.
- Это также уменьшит количество элементов для поиска при использовании линейного поиска пары.
Анализ
- Case 1: Worst case when Derpina cannot remember or spot the socks on the floor directly using the hashing technique. Derp does a linear search through the items on the floor. This is not worse than the iterating through the pile to find the pair.
- Upper bound for comparison: O(n^2).
- Нижняя граница для сравнения: (n / 2). (когда каждый второй носок, который подбирает Дерпина, оказывается парой предыдущего).
- Case 2: Derp remembers each the location of every sock that he placed on the floor and each sock has exactly one pair.
- Upper bound for comparison: O(n/2).
- Нижняя граница для сравнения: O (n / 2).
Я говорю об операциях сравнения, выбор носков из кучи обязательно потребует n операций. Таким образом, практическая нижняя граница будет равна n итерациям с n / 2 сравнениями.
Ускорение работы
Чтобы получить высший балл, чтобы Дерп получил O (n / 2) сравнений, я бы порекомендовал Дерпину,
- потратьте больше времени на носки, чтобы ознакомиться с ними. Да, это означает, что нужно проводить больше времени с носками Дерп.
- Игры на запоминание, такие как поиск пар в сетке, могут улучшить производительность краткосрочной памяти, что может быть очень полезным.
Это эквивалентно проблеме отличимости элементов?
Предложенный мной метод является одним из методов, используемых для решения проблемы отличимости элементов, когда вы помещаете их в хеш-таблицу и проводите сравнение.
Учитывая ваш особый случай, когда существует только одна точная пара, он стал очень эквивалентным проблеме с отдельными элементами. Поскольку мы даже можем сортировать носки и проверять соседние носки на пары (еще одно решение для EDP).
Однако, если существует вероятность того, что для данного носка может существовать более одной пары, это отклоняется от EDP.
person
Community
schedule
21.01.2013
waitpid
, чтобы вы, как родитель, сами даже не сортировали носки? - person Mxyk   schedule 06.09.2013parallel.task(child).waitpid.all
выигрыш в производительности, который обещает принятый ответ, перевешивается экспоненциальным уменьшением количества подходящих образцов в стопке с течением времени. - person Cee McSharpface   schedule 23.01.2018