2015-10-18 4 views
0

Нам дают таблицу_1: 6 3 2 5 2, table_2: 7 4 1 6 8, table_3: 15,14,5,4,9. Число элементов в таблице_1 равно количеству элементов в таблице_2. Как найти FAST, если в таблице_1, table_2 есть такие элементы, что для конкретного элемента из таблицы_3: table_3 [i] = table_1 [k] + table_2 [p].Алгоритм поиска совпадающих элементов

Пример: 9 = table_3 [4] = table_1 [1] + table_2 [3];

Я попытался выполнить сортировку и алгоритм binary_search, чтобы решить эту проблему:/но это дает слишком медленное решение.

+0

Что вам нужно? Индексы таблицы1 и таблицы2, индекс таблицы3, значение суммы, количество возможных совпадений, все из них ...? – deviantfan

+0

Возможный дубликат [Найти пару элементов из массива, сумма которых равна заданному числу] (http://stackoverflow.com/questions/4720271/find-a-pair-of-elements-from-an-array-whose -sum-equals-a-given-number) – redobot

+0

Это дубликат http://stackoverflow.com/questions/4720271/find-a-pair-of-elements-from-an-array-whose-sum-equals -a-данных-номер. Единственное различие заключается в том, что в этом вопросе у вас есть только одно число. В вашем случае у вас есть массив чисел (table_3) – redobot

ответ

2

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

Давайте рассмотрим это с точки зрения структуры данных и анализа алгоритмов. Если вы разрешаете table_1 и table_2 оставаться неупорядоченными, вам необходимо сделать n^2 попарных сравнений. Поэтому table_1 и table_2 должны быть отправлены в какой-то процесс упорядочения.

Нет никаких шансов, что вы сможете заказать две таблицы менее чем за линейное время просто потому, что каждый элемент должен быть подвергнут хотя бы одному доступу. Существуют некоторые методы сортировки, чья наилучшая временная сложность линейна, но я предполагаю, что вам нужно общее решение, которое означает, что у вас нет гарантий относительно состояния данных перед началом работы. Я думаю, что сортировка - ставка проигравшего, так как вы заплатите стоимость сортировки O (nlogn) только для того, чтобы найти нужную вам, в среднем, n/2 средний случай сравнивается с проверкой попарных суммирования.

Теперь вы можете создавать миниатюры в линейном времени, но table_3 - это O (n) в размере, как table_1 и table_2. Вы по-прежнему проигрываете, так как вам все равно нужно выполнить n * n/2 средних сравнений, чтобы проверить значения таблицы_3 на комбинацию пар из table_1 и table_2.

Каковы временные ограничения для этого решения? 1 мс, 1 сек? Есть ли какая-то структура или предварительные знания о данных, которые могут позволить решение, использующее данные? Если нет, я не вижу решения.

+0

Ограничения по времени составляют 0,100 с-0,155 с. –

+0

Каков диапазон чисел в таблицах? Могут ли быть дубликаты в таблицах? Для трех таблиц из 1000 целых чисел, где целые числа находятся в диапазоне 1-1000, коэффициенты t1 [i] + t2 [j] = t3 [k] для некоторых i, j, k чрезвычайно велики (99% +). –

+1

Какая аппаратная платформа предназначена для работы? Даже самый простой подход с грубой силой займет примерно 500 мс на стандартном ноутбуке/рабочем столе. Если числа в таблице, как описано выше (т. Е. В диапазоне от 1 до 1000), то парный алгоритм грубой силы, который останавливается на данном t3 [i], когда он был найден, работает менее чем за 10 мс. Интересно, есть ли больше требований, чем вы указали. –