12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
||||||
1 | ||||||
Самое быстрое сравнение двух (трех, четырех) столбцов06.02.2013, 18:04. Показов 2589. Ответов 21
Метки нет Все метки)
(
Доброго времени суток. Я хотел бы узнать как можно ускорить процесс сравнения двух Мемо полей на дубликаты? Сравниваю так
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
06.02.2013, 18:04 | |
Ответы с готовыми решениями:
21
Самое быстрое сравнение текстовых файлов Быстрое сравнение двух рисунков Сравнение четырех столбцов с автоматическим подставлением совпадений Одна FIFO очередь для двух, трех, четырех потоков? |
1688 / 888 / 203
Регистрация: 25.11.2009
Сообщений: 1,818
|
|
06.02.2013, 18:14 | 2 |
не могу сказать, как ускорить алгоритм, но точно тебе скажу, что если не использовать прогресбар, то сэкономишь много времени. При каждом изменении позици прогрессбара происходит перерисовка, это сильно замедляет выполнение цикла. Если уж очень нужно отображать ход выполнения, то меняй позицию, например, раз в сто проходов цикла
1
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
|
06.02.2013, 18:43 [ТС] | 3 |
0
|
Практикантроп
4735 / 2641 / 512
Регистрация: 23.09.2011
Сообщений: 5,672
|
||||||
06.02.2013, 19:15 | 4 | |||||
1
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
||||||
06.02.2013, 19:54 [ТС] | 5 | |||||
Блин только хотел отписаться своим вариантом сравнения 2 х стринг листов а тут меня уже опередили. Целый день ломал голову только дошло. Спасибо всем!!
Добавлено через 32 минуты А как теперь вывести не совпадения Мемо1 и Мемо2?
0
|
1688 / 888 / 203
Регистрация: 25.11.2009
Сообщений: 1,818
|
||||||
06.02.2013, 20:08 | 6 | |||||
1
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
||||||
06.02.2013, 20:22 [ТС] | 7 | |||||
0
|
1688 / 888 / 203
Регистрация: 25.11.2009
Сообщений: 1,818
|
|
06.02.2013, 20:24 | 8 |
ну да, неверные, в ифе надо "==" поставить вместо "!="
я ведь только скопировал код из твоего сообщения ) а, хотя стоп... тебе же надо НЕсовпадения... поторопился я
0
|
06.02.2013, 20:30 | 9 |
Если нужен самый быстрый способ сравнения, то тут: Вычисление в цикле
1
|
1688 / 888 / 203
Регистрация: 25.11.2009
Сообщений: 1,818
|
||||||
06.02.2013, 20:38 | 10 | |||||
может так
1
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
|
06.02.2013, 20:49 [ТС] | 11 |
Спасибище! В точку.
Добавлено через 3 минуты Хотел спросить по поводу "bool overlap" Это что? Поподробней можно? Спс.
0
|
Практикантроп
4735 / 2641 / 512
Регистрация: 23.09.2011
Сообщений: 5,672
|
|
06.02.2013, 20:50 | 12 |
Что значит: неверные. Мы ж не знаем, что у вас в мэмо1 и мэмо2. Вы учитываете, что загрузка текстового файла в мэмо - у которого по умолчанию перенос строк включен - переформатирует исходный текст? Так, что если потом сравнивать результаты по текстам файлов, то результат будет несколько неожиданным, в зависимости от ширины этих мэмо. Правильнее сразу загружать текстовые файлы в стринглисты. В них изначальное форматирование (разбиение на строки) сохраняется.
0
|
1688 / 888 / 203
Регистрация: 25.11.2009
Сообщений: 1,818
|
|
06.02.2013, 20:55 | 13 |
bool - булевый тип данных, может принимать значение true (истина) и false (ложь).
условие if (overlap) выполнится, если переменная overlap равна true почитай об этом хоть на википедии, это одна из основ программирования, информацию найдёшь где угодно. Не по теме: и не стоит на каждое сообщение ставить "спасибо", мне кажется это лишне ))
1
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
||||||
07.02.2013, 08:35 | 14 | |||||
Сравнивать каждую строку с каждой это очень медленно. Так на вскидку:
1. Можно отсортировать все строки по длине и сравнивать строки только со строками равной длины. Или при вашем переборе сначала проверять совпадение длин строк. 2. Можно отсортировать все строки по всему содержимому (или по первым нескольким символам) и уже искать нужную строку в сортированном массиве, это быстрее. Или при вашем переборе сначала проверять совпадение первого символа. 3. Ну естественно многопоточность. 4. Не использовать в цикле Listb->Count, а использовать переменную int LCb=Listb->Count; 5. Вынести из цикла Lista->Strings[i], заменив на переменную S=Lista->Strings[i]; Если вам нужно сравнивать не каждую строку с каждой, а сравнивать с условием, что искомая строка должна лежать ниже ранее найденных, то это еще ускорит процесс. Если в первый цикл добавить этот код (можно раз в несколько шагов), то будет понаглядней.
1
|
07.02.2013, 13:21 | 15 |
Я ему уже давал решение, которое всё сделает за 30-50 миллисекунд, но ему видимо нравится чуть ли не самый медленный способ.
Тема то называется Самое быстрое сравнение двух столбцов, значит и обсуждать нужно самый быстрый способ.
1
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
|
07.02.2013, 14:38 [ТС] | 16 |
Рябят спасибо я уже решил задачу! Все работает на УРА! Самый быстрый способ это сравнивать сразу 2 StringList а не отдельно каждую строку. А вот ка реализовать сравнение 4 - х StringList и найти совпадения которые попадают во все стриглисты? Вот это задачка!?
0
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
07.02.2013, 14:53 | 17 |
0
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
||||||
07.02.2013, 14:59 [ТС] | 18 | |||||
2-3 сек!
Добавлено через 5 минут Дабы не дублировать тему. Пытаюсь теперь сравнить 3 стринг листа (хотелось бы 4).
0
|
1688 / 888 / 203
Регистрация: 25.11.2009
Сообщений: 1,818
|
|
07.02.2013, 18:42 | 19 |
можно уточнить, в чём задача? нужно найти записи, которые есть во всех четырёх списках, или записи, которые встречаются в каких-либо двух списках?
1
|
12 / 12 / 3
Регистрация: 11.10.2010
Сообщений: 159
|
|
07.02.2013, 19:05 [ТС] | 20 |
0
|
07.02.2013, 19:05 | |
Помогаю со студенческими работами здесь
20
Получение всех чисел Армстронга для двух, трех и четырех цифр
Найти все числа Армстронга, состоящие их двух, трех и четырех цифр Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |