|
Вопрос # 5 692/ вопрос открыт / |
|
Здравствуйте, эксперты!
Есть 2 массива со строковыми значениями (значения уникальны в пределах каждого массива).
Подскажите алгоритм, который максимально быстро сможет выдать только те значения из одного массива, которых нет во втором?
С уважением.
 |
Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)
Вопрос отправлен: 25 октября 2011, 16:24
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Казаков Николай Константинович
Здравствуйте, Фамилия Имя Отчество!
На ум приходит только сравнение каждого элемента из одного массива с каждым элементом из другого, если совпадает, выводим этот элемент
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 25 октября 2011, 16:52; участников в обсуждении: 3.
|
Фамилия Имя Отчество (статус: Посетитель), 25 октября 2011, 16:25 [#1]:
Забыл указать, что кол-во значений в массивах - несколько десятков тысяч.
|
|
min@y™ (статус: Доктор наук), 25 октября 2011, 16:36 [#2]:
Цитата (Фамилия Имя Отчество):
Подскажите алгоритм, который максимально быстро сможет выдать только те значения из одного массива, которых нет во втором?
Не знаю, насколько быстро будет работать такой вариант, но пока не попробуешь - не узнаешь.
1) Берёшь TStringList и пихаешь в него свои строки из 2-го массива.
2) Сортируешь TStringList. Это нужно для бинарного поиска.
3) Пробегаешь в цикле по строкам 1-го массива, подставляя каждую строку в метод IndexOf() TStringList'a. Если метод вернул -1, то текущей строки 1-го массива нету во 2-м массиве.
Вот как-то так...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
DNK (статус: Студент), 25 октября 2011, 16:52 [#3]:
Полагаю Интерполирующий поиск. Ну и совсем для красноглазых, можно ещё ускорить при помощи хэш-таблиц. Правда тут нужно строго подойти к выбору алгоритма хеширования, всегда должно выполняться условие: если элемент1 < элемент2, то хеш1 <= хеш2.
"Digital Networked Knight"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|