Вчера я спаривал носки с чистой прачечной и выяснил, как я это делаю, это не очень эффективно. Я делал наивный поиск - собирал один носок и "итерировал" кучу, чтобы найти свою пару. Это требует итерации в среднем n/2 * n/4 = n 2/8 носков.
Как компьютерный ученый, я думал, что я могу сделать? Сортировка (в зависимости от размера/цвета/...), конечно, приходила в голову для достижения решения O (NlogN).
Хеширование или другие решения не на месте - это не вариант, потому что я не могу дублировать свои носки (хотя было бы неплохо, если бы мог).
Итак, вопрос в основном:
Учитывая кучу пар socks нот n
, содержащих элементы 2n
(предположим, что каждый носок имеет ровно одну совпадающую пару), каков наилучший способ их эффективного соединения с помощью логарифмического дополнительного пространства? (Я считаю, что могу запомнить этот объем информации, если это необходимо.)
Я по достоинству оценю ответ, который касается следующих аспектов:
- Общее теоретическое решение для огромного количества носков.
- Фактическое количество носков не так велико, я не верю, что мой супруг и я больше 30 пар. (И довольно легко различить мои носки и ее, можно ли это также использовать?)
- Это эквивалентно проблеме отличия элемента?