Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
12 / 12 / 9
Регистрация: 12.04.2012
Сообщений: 259

Ускорить алгоритм

29.06.2014, 00:59. Показов 2799. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код который сохраняет строку из StringList в 2-ой StringList, если этой строки нет в 3-ий StringList ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unsigned __stdcall OST( void* Param )
{
std::auto_ptr<TStringList> SaveOst(new TStringList);
AnsiString ls=lst2->Text;
AnsiString a1="";
for (int i = 0; i < lst->Count; i++) {
count++;
 a1=lst->Strings[i];
   if(ls.Pos(a1)==0) SaveOst->Add(lst->Strings[i]);
 
}
 
SaveOst->SaveToFile("Ostatok.txt");
_endthreadex(0);
 return 0;
}
Работает не достаточно быстро, как можно эффективно изменить алгоритм для ускорения программы...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2014, 00:59
Ответы с готовыми решениями:

Ускорить алгоритм обработки текста
Здравствуйте. Есть программа для обработки ссылок на сайты - нахождение и сохранение доменов. Её работа заключается в следующем: есть...

Ускорить объединение двух стринггридов (алгоритм)
Привет всем. постараюсь объяснить суть вопроса. на сервере есть исполняемая программа типа база (список , координаты, и другие метки)...

Ускорить алгоритм удаления одного списка из другого
Здравствуйте. Есть два списка : один на 181093 строк другой на 80000. Нужно удалить один список из другого. Моя реализация: ...

29
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.07.2014, 01:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от leva Посмотреть сообщение
и я понимаю что это не самый лучший вариант...
На несколько порядков не лучший, но хозяин - барин... Заменить пять буковок кода - это, конечно же, излишние заморочки. ))
Кстати, о сортировке изначально не было сказано ни слова.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
02.07.2014, 17:00
Цитата Сообщение от BRcr Посмотреть сообщение
vector < int > v1( size ), v2( size ), v3( size ), v4( size );
Заметил ошибку.

Нужно так:
Цитата Сообщение от BRcr Посмотреть сообщение
vector < int > v1( size ), v2( size ), v3, v4;
У меня так std::inserter на 0.1-0.5 мс быстрее отрабатывает
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
03.07.2014, 01:34
Что серьёзно? Никого кроме меня не смущает
Цитата Сообщение от leva Посмотреть сообщение
SaveOst->SaveToFile("Ostatok.txt");
?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.07.2014, 15:00
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Заметил ошибку.
Все верно, моя ошибка.
Погонял на разных диапазонах - back_inserter у меня отрабатывает в среднем на 5 - 10 % быстрее.

Добавлено через 3 минуты
Retyrn0, сохранение происходит один раз по завершении выборки. Сохраняется стандартным методом класса TStringList. Так что нет - никого кроме тебя это не смущает.

Если есть желание сравнить скорости записи в файл различными способами - милости просим.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.07.2014, 15:10
Цитата Сообщение от BRcr Посмотреть сообщение
Погонял на разных диапазонах - back_inserter у меня отрабатывает в среднем на 5 - 10 % быстрее.
Ну оценивать в % не корректно, ибо разница будет тем больше чем больше элементов вставляться.
Кроме того логично было бы делать reserve() что бы исключить перераспределение памяти.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
03.07.2014, 15:11
Цитата Сообщение от BRcr Посмотреть сообщение
сохранение происходит один раз по завершении выборки
Ну я не видел весь код, а ты? Если предположить что функция вызывается внутри другого цикла...мне трудно представить такой длинный список, чтобы ТС не хватало скорости...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.07.2014, 15:23
Ну логичнее было сохранять с помощью fstream,
тогда можно было бы с экономить время на излишнем преобразование std::vector<String> -> TStringList
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.07.2014, 15:51
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Если предположить что функция вызывается внутри другого цикла...мне трудно представить такой длинный список, чтобы ТС не хватало скорости...
Зачем такое предполагать? На это нет оснований. Спроси у ТС - и всех делов.
А насчет длины списка и скорости - у ТС может быть малопроизводительная система либо очень большие объемы текста. В обоих случаях даже самый оптимизированный алгоритм может работать относительно долго.

Добавлено через 3 минуты
Avazart, провел тесты. Опять смешные результаты.
При увеличении количества элементов в векторах разница скорости уменьшается. При этом использование reserve никаких заметных изменений в картину не вносит. Парадокс какой-то...
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.07.2014, 19:37
http://microfork.com/stdvector... -analisys/

Пример для понимания разницы

Код
C++
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
#include <iostream>
#include <vector>
#include <string>
 
#include <iostream>
#include <vector>
#include <string>
 
class test
{
    public:
        test(const int n):n_(n)
        {
            std::cout<<"constructor "<<n_<<std::endl;
        };
 
        test(const test& some)
        {
           std::cout<<"copy constructor "<<some.n_<<std::endl;
           n_= some.n_;
        }
 
        test& operator=(const test& some)
        {
            std::cout<<"assign "<<n_<<"="<<some.n_<<std::endl;
            n_= some.n_;
            return *this;
        }
 
        ~test()
        {
            std::cout<<"destructor "<<n_<<std::endl;
        };
 
    private:
        int n_;
};
 
int main()
{
    std::vector<test> vtest1;
    std::vector<test> vtest2;
 
    const size_t size= 4;
    vtest1.reserve(size);
    vtest2.reserve(size);
 
    std::cout<<std::endl<<"insert():"<<std::endl;
    for(size_t i=0; i<size; ++i)
    {
        std::cout<<i<<")"<<std::endl;
        vtest1.insert(vtest1.begin(),test(i));
    }
 
    std::cout<<std::endl<<"push_back():"<<std::endl;
    for(size_t i=0; i<size; ++i)
    {
        std::cout<<i<<")"<<std::endl;
        vtest2.push_back(test(i));
    }
 
    getchar();
    return 0;
}


Вывод для МSVС2010
insert():
0)
constructor 0
copy constructor 0
destructor 0
1)
constructor 1
copy constructor 1
copy constructor 1
assign 1=0
assign 0=1
destructor 1
destructor 1
2)
constructor 2
copy constructor 2
copy constructor 0
assign 0=1
assign 1=0
destructor 0
copy constructor 0
assign 0=2
assign 2=0
destructor 0
destructor 2
3)
constructor 3
copy constructor 3
copy constructor 1
assign 1=2
assign 2=1
destructor 1
copy constructor 1
assign 1=3
assign 3=1
destructor 1
copy constructor 1
assign 1=0
assign 0=1
destructor 1
destructor 3

push_back():
0)
constructor 0
copy constructor 0
destructor 0
1)
constructor 1
copy constructor 1
destructor 1
2)
constructor 2
copy constructor 2
destructor 2
3)
constructor 3
copy constructor 3
destructor 3


Вывод для С++BuilderXE3 (x86)
insert():
0)
constructor 0
copy constructor 0
copy constructor 0
destructor 0
destructor 0
1)
constructor 1
copy constructor 1
copy constructor 0
assign 0=1
destructor 1
destructor 1
2)
constructor 2
copy constructor 2
copy constructor 0
assign 0=1
assign 1=2
destructor 2
destructor 2
3)
constructor 3
copy constructor 3
copy constructor 0
assign 0=1
assign 1=2
assign 2=3
destructor 3
destructor 3

push_back():
0)
constructor 0
copy constructor 0
destructor 0
1)
constructor 1
copy constructor 1
destructor 1
2)
constructor 2
copy constructor 2
destructor 2
3)
constructor 3
copy constructor 3
destructor 3


Онлайн компилятор http://codepad.org/qp9FP2b1

Чет с XE3 непонятки, как обычно...
1
03.07.2014, 21:09

Не по теме:

Цитата Сообщение от BRcr Посмотреть сообщение
На это нет оснований
Нет оснований утверждать обратное.
Цитата Сообщение от BRcr Посмотреть сообщение
Спроси у ТС - и всех делов
Вот тут согласен.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2014, 21:09

Ускорить алгоритм составления списка файлов данной директории
Здравствуйте. Есть папка с файлами(462166 штук), как мне быстро получить их список, а следовательно и их количество? Вот, собственно,...

Ускорить программу
моя программа очень долго заносит данные из файла в мемо1 я так думаю это из-за того что считывание идет по циклу я знаю что можно щитати...

Ускорить вывод в RichEdit
Я генерирую миллион значений Все значения вывожу в поток: osftream p(&quot;text.txt&quot;); for(i=0; i &lt; 1000000; i++) { p &lt;&lt;...

Алгоритм шифрования DES (необходимо ускорить любым доступным способом)
Есть алгоритм шифрования дес, он работает но работает медленно ну или скажем так ... недостаточно быстро для того чтобы препод его принял....

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар)
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная головоломка). Определение. Перестано́вочные...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru