Что такое эффективный способ сопоставления n элементов с соответствующими n элементами

Рассмотрим множество A из n бутылок и установите B из n колпачков, так что каждая бутылка в имеет уникальную шапку в B. Но бутылка в и колпачки в B все выглядит одинаково. Единственное сравнение, которое можно сделать, это пара (a, b) бутылки в и колпачок в B и проверить, являются ли нити a меньшими, большими или совершенными с нитями b.

Дайте эффективный алгоритм для сопоставления всех бутылок с их колпачками.

PS: Кажется, я ничего не сделал, чтобы получить решение, верьте мне, я сделал. Пожалуйста, просто дайте мне ответ.

+1
02 окт. '13 в 20:15
источник поделиться
1 ответ

Хорошая проблема, но, как было указано, прежде чем это станет домашней работой, почему вы не пробуйте что-то вроде этого:

вы должны зацикливаться на каждую бутылку (без логического порядка), вы должны иметь колпачки в виде структуры, которая представляет собой динамически отсортированный массив наборов шапок, этот массив инициализируется только одним элементом (то есть множеством B).

и для каждой бутылки вы должны путешествовать в своем массиве с помощью двоичного поиска, когда вы получаете "потенциальный" набор колпачков, вы проверяете колпачок на колпачок

  • если колпачок меньше, вы позволяете ему в одном и том же наборе (отмечая его, чтобы не брать снова для этой бутылки
  • для первой большей крышки вам необходимо вставить набор между текущим набором и следующим и поставить колпачок там
  • для следующих больших шапок вы помещаете их в ранее созданный набор
  • если вы найдете правильный колпачок, который у вас есть, и продолжайте разделять с той же бутылкой оставшиеся колпачки набора, после этого вы продолжите следующую бутылку
  • если в текущем наборе вы не найдете никакой крышки, но все колпачки, которые вы проверили, больше, вы можете путешествовать с помощью бинарного поиска для нижних шапок
  • если в текущем наборе вы не найдете какой-либо кепки, но все колпачки, которые вы проверили, меньше, чем вы можете путешествовать, используя бинарный поиск для больших колпачков

Изменение: я видел выложенный коммант и действительно дублирован из двух наборов предметов. Каждый элемент множества A является уникальным совпадением в множестве B. Сопоставьте каждый элемент множества A с элементом в множестве B в O (nlogn), и это решение объясняется здесь: http://www.wisdom.weizmann.ac.il/~ Наор/ПАЗЛЫ /nuts_solution.html

очень похожа на мою, но бутылки также можно разделить.

+1
02 окт. '13 в 21:28
источник

Посмотрите другие вопросы по меткам или Задайте вопрос