Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2017, 10:30   #1
Kirillb
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 6
По умолчанию Ускорить работу цикла/Delphi

Добрый день! Каким образом можно ускорить работу программы?
Стоит задача найти матрицу достижимости по матрице смежности. Использую алгоритм Уоршелла. Проблема в том, что матрица состоит из 800 на 800 элементов.
Цитата:
for g:=1 to stroki do
for i:=1 to stroki do
for j:=1 to stroki do begin
Mat1[i,j]:=Mat1[i,j] or (Mat1[i,g] and Mat1[g,j]);
Cells[i,j]:=inttostr(Mat1[i,j]);
end;
Kirillb вне форума Ответить с цитированием
Старый 14.11.2017, 10:31   #2
Kirillb
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 6
По умолчанию

Есть ли возможность ускорить работу самого Delfi?
Kirillb вне форума Ответить с цитированием
Старый 14.11.2017, 10:38   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Kirillb Посмотреть сообщение
Cells[i,j]:=inttostr(Mat1[i,j]);
Это самая томозная часть. Оно Вам надо, визуализировать каждый чих алгоритма?
Black Fregat вне форума Ответить с цитированием
Старый 14.11.2017, 10:40   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Kirillb Посмотреть сообщение
ускорить работу самого Delfi?
оболочки? Сильно медленно проект открывается? Или компилирует медленно?
Можно ускорить. Возьмите более мощный компьютер, с достаточным количеством ОЗУ.
а вообще я впервые слышу жалобы на то, что Delphi слишком медленная.


Цитата:
Сообщение от Kirillb Посмотреть сообщение
Каким образом можно ускорить работу программы?
оптимизировать цикл, например.


Цитата:
Сообщение от Kirillb Посмотреть сообщение
Cells[i,j]:=inttostr(Mat1[i,j]);
что такое Cells и что оно делает внутри тройного цикла?!


для начала попробуйте так:
Код:
for g:=1 to stroki do 
   for i:=1 to stroki do
     for j:=1 to stroki do 
         Mat1[i,j]:=Mat1[i,j] or (Mat1[i,g] and Mat1[g,j]);

   for i:=1 to stroki do
     for j:=1 to stroki do 
        Cells[i,j]:=inttostr(Mat1[i,j]);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.11.2017, 10:41   #5
Kirillb
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 6
По умолчанию

Необходимо результат записать в stringGrid.
Kirillb вне форума Ответить с цитированием
Старый 14.11.2017, 10:42   #6
Kirillb
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 6
По умолчанию

With StringGrid do
Celss[i,j]
Kirillb вне форума Ответить с цитированием
Старый 14.11.2017, 10:45   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Kirillb Посмотреть сообщение
Необходимо результат записать в stringGrid.
вот. сначала посчитайте.

потом - записывайте:

Код:
for g:=1 to stroki do 
   for i:=1 to stroki do
     for j:=1 to stroki do 
         Mat1[i,j]:=Mat1[i,j] or (Mat1[i,g] and Mat1[g,j]);

   for i:=1 to stroki do
     for j:=1 to stroki do 
        StringGrid.Cells[i,j]:=inttostr(Mat1[i,j]);

кстати, Вы знаете, что в Cells сначала указывается номер столбца, потом номер строки? Т.е. Mat1 переносится в грид в транспонированном виде.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.11.2017, 10:46   #8
Kirillb
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
оболочки? Сильно медленно проект открывается? Или компилирует медленно?
Можно ускорить. Возьмите более мощный компьютер, с достаточным количеством ОЗУ.
а вообще я впервые слышу жалобы на то, что Delphi слишком медленная.



оптимизировать цикл, например.



что такое Cells и что оно делает внутри тройного цикла?!


для начала попробуйте так:
Код:
for g:=1 to stroki do 
   for i:=1 to stroki do
     for j:=1 to stroki do 
         Mat1[i,j]:=Mat1[i,j] or (Mat1[i,g] and Mat1[g,j]);

   for i:=1 to stroki do
     for j:=1 to stroki do 
        Cells[i,j]:=inttostr(Mat1[i,j]);
Спасибо большое! Ваш совет помог!
Kirillb вне форума Ответить с цитированием
Старый 14.11.2017, 10:49   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Пол миллиарда с хвостом итераций за миг не выполнится. Комп более быстрый как вариант )) А Mat1 обязательно изменять? Может просто:
Код:
Cells[i,j]:=inttostr(Mat1[i,j] or (Mat1[i,g] and Mat1[g,j]));
Cells вообще что такое, в строку обязательно преобразовываь?

add о, уже напостили )) вопрос отпал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.11.2017, 10:51   #10
Kirillb
Новичок
Джуниор
 
Регистрация: 14.11.2017
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Пол миллиарда с хвостом итераций за миг не выполнится. Комп более быстрый как вариант )) А Mat1 обязательно изменять? Может просто:
Код:
Cells[i,j]:=inttostr(Mat1[i,j] or (Mat1[i,g] and Mat1[g,j]));
Cells вообще что такое, в строку обязательно преобразовываь?
Спасибо за помощь, помог способ преобразовывать в строку после циклов.
Kirillb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить работу программы akademochka Общие вопросы C/C++ 15 16.04.2013 11:24
Ускорить выполнение цикла elen_7C9 Общие вопросы C/C++ 5 21.10.2012 22:06
избавиться от цикла for или ускорить вычисление AlexVI Visual C++ 0 09.02.2012 16:06
Ускорить работу БД SERG1980 БД в Delphi 9 09.11.2010 23:30
Ускорить работу с БД Poltev86 БД в Delphi 2 25.05.2010 09:46