Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
-11 / 9 / 1
Регистрация: 20.06.2021
Сообщений: 790
Delphi 6-7

Как сделать поиск слова в списке побыстрее?

01.02.2022, 17:20. Показов 4038. Ответов 76
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, можно ли ускорить поиск слова из одного списка в другом побыстрее ?
Я бы использовал .indexof или .Find но они ищут точное совпадение строки, а строка может содержать часть чего то ещё поэтому не подходят

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Gauge;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    Gauge1: TGauge;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  S1,S2:Tstringlist;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
s1:=Tstringlist.Create;
s1.Sorted := True;
s1.Duplicates := dupIgnore;
if opendialog1.Execute then
s1.LoadFromFile(opendialog1.FileName);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
s2:=Tstringlist.Create;
s2.Sorted := True;
s2.Duplicates := dupIgnore;
if opendialog2.Execute then
s2.LoadFromFile(opendialog2.FileName);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
i,j:integer;
List:Tstringlist;
begin
Gauge1.Progress:=0;
Gauge1.Maxvalue:=s1.count*s2.Count;
List:=Tstringlist.Create;
for i:=0 to s1.Count-1 do
for j:=0 to s2.Count-1 do begin
if pos(s1[i],s2[j])>0 then
List.Add(s2[j]);
Application.ProcessMessages;
Gauge1.Progress := Gauge1.Progress +1;
end;
Showmessage('OK');
List.SaveToFile(extractfilepath(paramstr(0))+'Result.txt');
Freeandnil(List);
end;
 
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2022, 17:20
Ответы с готовыми решениями:

как сделать простейший поиск элементов списке
• При взятии каждой книги вводится номер УДК и программа уменьшает количество книг на 1 или выдает сообщение об отсутствии книги или о том,...

Как сделать чтоб показывало только те записи по которым идёт поиск в раскрывающемся списке
Как сделать чтоб показывало только те записи по которым идёт поиск в раскрывающемся списке??

Как найти в списке слова, которые есть в предыдущем списке
Добрый день. Нужна ваша помощь Как найти в списке слово, которое есть в предыдущем списке? Вот сам код def lest(lst1,lst2): ...

76
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
09.02.2022, 17:30
Студворк — интернет-сервис помощи студентам
Ну сделал 20 потоков прирост 10-15 раз есть(пока без замеров)
Гдето в логике ошибся видимо и не то число в первый поток передаю, или указатель портится

Код потом, когда будет время починить.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
09.02.2022, 18:10
Цитата Сообщение от Иван Ежик Посмотреть сообщение
Ну сделал 20 потоков прирост 10-15 раз есть(пока без замеров)
У тебя же 12 физических ядер. Зачем 20 потоков? Попробуй 10, думаю, производительность еще увеличится.
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
09.02.2022, 18:13
Цитата Сообщение от Constcat Посмотреть сообщение
У тебя же 12 физических
10 Ядер , ща проц другой.
Ну мощность (вычислительная) одного hyperThreading потока примерно 25% от настоящего ядра.
Цитата Сообщение от Constcat Посмотреть сообщение
думаю, производительность еще увеличится
Это будет зависить от того во что упор... если память не вывозит то добавление потоков не уменьшит время работы
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
09.02.2022, 18:16
Лучший ответ Сообщение было отмечено Uefi220 как решение

Решение

Вот
пока черновой но рабочий вариант
Вложения
Тип файла: zip STRING_THR20.zip (283.0 Кб, 20 просмотров)
1
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
09.02.2022, 18:18
Цитата Сообщение от Иван Ежик Посмотреть сообщение
Ну мощность (вычислительная) одного hyperThreading потока примерно 25% от настоящего ядра.
Так как ни крути - если потоков больше, чем ядер, часть потоков будут ждать своей очереди. Плюс время на сохранение/переключение контекста.

Не по теме:


Я в своей демке добавил статистику, теперь четко видно, что когда загружаю все 8 процессоров (4+4), то производительность значительно ниже, чем когда загружаю 4.

0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
09.02.2022, 18:28
Цитата Сообщение от Constcat Посмотреть сообщение
Плюс время на сохранение/переключение контекста
Там на физическом уровне гипертрейдинг реализован так что потоки (2 на одном ядре) исполняются одновременно каждый с сохранением своего контекста.
Цитата
"Haswells. Hyper-threading is having each core process 2 instructions during the same clock cycle."

Глубоко не копал, но есть нюансы связанные с занятостью исполнительных блоков.

Добавлено через 2 минуты

Не по теме:


Цитата Сообщение от Constcat Посмотреть сообщение
Я в своей демке добавил статистику
Круто, т.е. по той же ссылке можно смотреть?

0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
09.02.2022, 18:32
Цитата Сообщение от Иван Ежик Посмотреть сообщение
цитата "Haswells. Hyper-threading is having each core process 2 instructions during the same clock cycle."
Этим нужно подробнее заняться...
Может, это только Xeon'ы такие крутые.
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
09.02.2022, 18:37
Цитата Сообщение от Constcat Посмотреть сообщение
Плюс время на сохранение/переключение контекста
Да, но кстати в задаче сравнения строк пачками оно начнёт влиять только когда будут заняты вообще все потоки, все 20 в моём случае.
Допилю тесты с временем(таймингом работы) позже.
А вообще любой стресстест и бенчмарк регистрируют прирост от каждого потока.
в общем случае 20 всегда быстее если на фоне не идёт рендер видео какой-нибудь, и система вынуждена переключать контексты.
0
-11 / 9 / 1
Регистрация: 20.06.2021
Сообщений: 790
10.02.2022, 09:29  [ТС]
Цитата Сообщение от Иван Ежик Посмотреть сообщение
пока черновой но рабочий вариант
Что должно произойти нажал на единственную кнопку что то непонятное вывелось =)
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
10.02.2022, 13:23
Uefi220, вот тут раскомментируйте
Миниатюры
Как сделать поиск слова в списке побыстрее?  
0
-11 / 9 / 1
Регистрация: 20.06.2021
Сообщений: 790
11.02.2022, 20:03  [ТС]
Цитата Сообщение от Иван Ежик Посмотреть сообщение
вот тут раскомментируйте
Слушай спасибо алгоритм действительно очень быстрый
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
11.02.2022, 20:06
Цитата Сообщение от Uefi220 Посмотреть сообщение
алгоритм действительно очень быстрый
Дело в ядрах.
Ну и работает в основном код который борландовцы написали.
я просто его приготовил ))
0
-11 / 9 / 1
Регистрация: 20.06.2021
Сообщений: 790
11.02.2022, 20:50  [ТС]
Цитата Сообщение от Иван Ежик Посмотреть сообщение
Дело в ядрах.
Ну и работает в основном код который борландовцы написали.
я просто его приготовил
Код сложный не понятный в некоторых местах пытаюсь сейчас его перевести на регулярку чтобы применять регулярные выражения к текстовому файлу и сохранять результат и всё настолько выпутано запутано ужас
0
-11 / 9 / 1
Регистрация: 20.06.2021
Сообщений: 790
17.02.2022, 18:21  [ТС]
Иван Ежик, Если не сложно можешь код попроще и нагляднее переписать чтобы один .pas был ?
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
17.02.2022, 18:31
Uefi220, Я болею уже неделю, голова раскалывается.Может потом, когда нибудь.
Так то там ничего сложного,
загружаешь два списка, что искать и где искать.
делишь второй на число потоков.
а в самом потоке ищешь вхождение строки в подстроку,
намудрил я только с загрузкой списков в дополнительный поток, но это было сделано на случай больших объёмов, чтобы форма не подвисала.
А вот по поводу регулярок не подскажу, не работал с ними пока.
0
17.02.2022, 18:41

Не по теме:

Цитата Сообщение от Uefi220 Посмотреть сообщение
сейчас его перевести на регулярку
Какое-то время пришлось очень плотно сидеть на Питоне и с регулярками мне очень сильно помог regex101.com.
Я на основе регулярок тогда писал достаточно серьезный парсер математических выражений с функциями и переменными.

0
-11 / 9 / 1
Регистрация: 20.06.2021
Сообщений: 790
17.02.2022, 20:09  [ТС]
Цитата Сообщение от Иван Ежик Посмотреть сообщение
А вот по поводу регулярок не подскажу, не работал с ними пока.
Совершенно не к спеху как сделаешь так сделаешь, желаю легко перенести болезнь и скорее выздоровить ! =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2022, 20:09

Как сделать поиск слова?
Доброго времени суток. Давно ломаю уже голову, нужна помощь. Есть база данных в которой есть 2 поля, слово и значение слова (база данных...

Поиск слов в списке по началу слова
Как вывести все слова из списка с началом слова, то есть яблоко, яблоня если вводим ябл, то выводим эти два слова

Поиск слова, выбранного в списке ComboBox, на листе
Всем Привет!) Я хочу найти слово, которое указано в комбоксе2. Слово нужно найти в листе "Форма3". У меня постоянно возникает...

Как сделать поиск самого большого слова?
Вот как самого длинного слова: function findLongestWord(str) { var strSplit = str.split(' '); var longestWord = 0; ...

Как сделать поиск слова в нескольких таблицах
Здравствуйте друзья. Заранее прошу прощения у модераторов, что разместил эту тему не там где надо. Ибо не знал где правильней будет это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
77
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru