Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

алгоритм удаления дубликатов из списка   Найти похожие ветки 

 
tippa ©   (2010-05-14 09:31) [0]

Добрый день. Нужно удалить из списка TStringList дубликаты. Как будет правильнее?

1. Сначала делаем сортировку, а затем в один проход удаляем дубликаты

или

2. Создаем вспомогательный список TstringList, проверяем каждый элемент первого списка на вхожесть во второй(вспомогательный), если не входит - добавляем

или

3. Берем первый элемент, со второго и до конца удаляем совпадающие с ним элементы. Потом берем второй элемент, с третьего и до конца ищем совпадения и удаляем. И так до предпоследнего оставшегося элемента.


 
Anatoly Podgoretsky ©   (2010-05-14 09:34) [1]

> tippa  (14.05.2010 09:31:00)  [0]

TStringList  и так имеет свойство Dublicates


 
tippa ©   (2010-05-14 09:45) [2]

задача - найти возможные алгоритмы, сравнить их, найти самый быстрый. Может еще какие способы имеются?


 
tippa ©   (2010-05-14 09:46) [3]

а можно в делфи посмотреть на реализацию свойства Duplicates?


 
Anatoly Podgoretsky ©   (2010-05-14 09:51) [4]

> tippa  (14.05.2010 09:46:03)  [3]

Конечно можно.


 
MBo ©   (2010-05-14 09:51) [5]

1 способ быстрее (2 и 3 имеют квадратичную сложность)


 
AK-47   (2010-05-14 10:25) [6]


> tippa ©   (14.05.10 09:45) [2]
>
> задача - найти возможные алгоритмы, сравнить их, найти самый
> быстрый. Может еще какие способы имеются?


Можно использовать хешированный список:

последовательно берем элементы из TStringList, проверяем есть ли такой элемент в хешированном списке, если есть удаляем из TStringList, если нет, то оставляем и добавляем его в хешированный список. И так для всех элементов.

Должна получится линейная сложность.


 
RWolf ©   (2010-05-14 10:39) [7]

Удаление из TStringList само по себе не О(1), так что, чтобы получить линейную сложность, надо избавляться от удалений.


 
AK-47   (2010-05-14 11:03) [8]


> RWolf ©   (14.05.10 10:39) [7]
>
> Удаление из TStringList само по себе не О(1), так что, чтобы
> получить линейную сложность, надо избавляться от удалений.
>

Да, не посмотрел как реализовано удаление. Тогда можно завести дополнительный TStringList и добавлять новые значения в него.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.048 c
2-1265380693
Loki3d
2010-02-05 17:38
2010.08.27
Возврат переменной


2-1272893024
Сава. Ж
2010-05-03 17:23
2010.08.27
Подскажите компонент для выделения любой области?


15-1265681360
brother
2010-02-09 05:09
2010.08.27
Береги клиента, бабло приносящего


2-1270715878
Дмитрий Жуков
2010-04-08 12:37
2010.08.27
"Строки"


15-1274178058
RWolf
2010-05-18 14:20
2010.08.27
Найдите ошибку в рассуждении