| 
| 
 | Вопрос # 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" |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |