| Altair |
7.03.2004 13:39
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Быстрые циклы.
Всего тестировалось 4 конструкции:
Проведение теста: сортировка массива (array[1..20] of integer) методом пузырька. Всего было проведено 30 тестов : 10 c n= 10^4; 10 c n= 10^5; 10 c n= 10^6; и один тест с n=10^7 (один, т.к. с увеличением степени n на 1, время проведения теста увеличивается соответственно в 10 раз) Результат: Во всех случаях (каждый тест - новый массив) самой быстрой конструкцией оказалась "While ... do...", следом за ней "If ... then Goto..." Прикрепленные файлы
test.pas ( 1.76 килобайт )
Кол-во скачиваний: 754-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
| volvo |
22.01.2005 19:39
Сообщение
#2
|
|
Гость |
Обмен значений в переменных.
Для увеличения скорости работы программы при обмене значениями двух чисел a и b вместо конструкции Код {1} a := a + b; b := a - b; a := a - b; или конструкции Код {2} a := a xor b; b := a xor b; a := a xor b; желательно использовать буферную переменную: Код {3} T := a; a := b; b := T; Тестируем скорость выполнения операции обмена: Код const n = 25000; var tm, tm1: longint; i, j: longint; a, b, T: word; begin writeln('n = ', n, ' * ', n); a := 1; b := 12; {----- With plus/minus -----} tm1:= MemL[$0040:$006c]; for i := 1 to n do for j := 1 to n do begin a := a + b; b := a - b; a := a - b; end; tm:= MemL[$0040:$006c]; tm:=tm-tm1; writeln('#1: ',tm); a := 1; b := 12; {----- With xor -----} tm1:= MemL[$0040:$006c]; for i := 1 to n do for j := 1 to n do begin a := a xor b; b := a xor b; a := a xor b; end; tm:= MemL[$0040:$006c]; tm:=tm-tm1; writeln('#2: ',tm); a := 1; b := 12; {----- With T -----} tm1:= MemL[$0040:$006c]; for i := 1 to n do for j := 1 to n do begin t := a; a := b; b := t; end; tm:= MemL[$0040:$006c]; tm:=tm-tm1; writeln('#3: ',tm); end. Результаты тестирования: Цитата n = 10000 * 10000 (100,000,000 обменов) #1: 29 #2: 29 #3: 15 n = 12000 * 12000 (144,000,000 обменов) #1: 41 #2: 42 #3: 22 n = 15000 * 15000 (225,000,000 обменов) #1: 64 #2: 65 #3: 38 n = 25000 * 25000 (625,000,000 обменов) #1: 182 #2: 180 #3: 98 n = 45000 * 45000 (2,025,000,000 обменов) #1: 584 #2: 574 #3: 318 |
Altair Улучшение кода 7.03.2004 13:39
mj на процессорах P2 и ниже
FOR быстрее чем WHILE до... 13.03.2004 18:09
Atos И Да ЗдравствуетИтерация! Пример: старая добра... 16.03.2004 14:44
trminator [b]Ускорение вычислений mod
Програма считает 50 -... 15.05.2004 18:53
P@sh@ [color=blue]Деление на степень двойки
Аналогично ... 15.05.2004 20:08
P@sh@ Разворачивание циклов. -=loops unrolling=-
Один и... 17.05.2004 18:42
trminator P@sh@, сомневаюсь, что игра стОит свеч. Хотя попро... 19.05.2004 19:35
Altair Процедуры FAR
Все процедуры в модулях, пишутся в ... 25.05.2004 14:28
BlackShadow Специально для Oleg_Z:
В BP есть такая возможность... 25.05.2004 16:26
BlackShadow Описалова в книгах достаточно. Посмотрю чего - зав... 25.05.2004 22:46
trminator Как нам говорили на лекции по ОС, оверлей - аналог... 27.05.2004 18:30
trminator А про использование AssignCRT вместо Assign для за... 27.05.2004 18:37
BlackShadow Ну и зкономии ради можно (олимпиадныю трюк) воспол... 27.05.2004 21:40
Altair Просто есть файловая переменная Input и output тол... 27.05.2004 21:44
trminator Про сортировку. Понятно, что пузырек и компания ни... 27.05.2004 23:04
BlackShadow trminator, да похоже на пирамидку.
Oleg_Z, использ... 28.05.2004 11:36
trminator Так... я не закончил про сортировки :)
ИМХО, испол... 29.05.2004 15:32
BlackShadow trminator, по памяти, может, её и проще, но на реф... 31.05.2004 11:08
BlackShadow Oleg_Z, вот чего у меня в книге есть:
Функции Over... 31.05.2004 11:43
Altair
То есть ты хочешь сказать, что если описать :
va... 31.05.2004 15:44
BlackShadow
А, если ты напишешь так:
Var
a,b:Inte... 31.05.2004 16:04
Romtek Взято из ООП. Объектно-ориентированное программиро... 7.06.2004 22:25
Altair Begin и end лишние видимо я поставил, а вот объеди... 8.06.2004 13:52
BlackShadow Вспомнил один момент такой. При работе с дробями, ... 15.06.2004 12:32
Altair
Нет, ассемблер нужно применять только для шлифовк... 15.06.2004 19:27
Romtek Complete boolean evaluation (compiler option) 15.06.2004 22:08
BlackShadow Да уж, Oleg_Z, это действительно отключается дирек... 16.06.2004 13:42
Altair BlackShadow, в следующий раз оформляй логические ... 16.06.2004 15:20
Romtek В первом случае имеем 2 операции, а во втором - 3 16.06.2004 16:15
Altair Да, но во первых операция NOT ИМХО должна выполнят... 16.06.2004 20:24
Altair Вот еще:
Если в программе используется write и wri... 17.06.2004 13:34
Altair REAL почти в 2 раза медленнее [b]ВСЕХ других число... 18.06.2004 14:05
P@sh@ Oleg_Z
Real потому медленнее, что у него размер н... 26.06.2004 7:41
BlackShadow Int64 появился только в 32-битных компиляторах. По... 2.07.2004 15:23
Atos А вот это, мне кажется, интересно:
Простой пример:... 16.10.2004 8:13
BlackShadow Atos, ну это и лосю понятно. При последовательном ... 18.10.2004 21:24
Atos
В каком именно Паскале?
Ну, я же не лось...
Не... 19.10.2004 6:17
GoodWind
Borland Turbo Pascal 7.0
TMT pascal
да и во всех ... 19.10.2004 12:17
Atos Действительно... Просто никогда её не использовал.... 19.10.2004 13:51
Altair Странно, тестирую бытсрую и пирамидальную на скоро... 7.11.2004 15:14
Altair Да, все верно,
[color=blue]пирамида медленнее чем... 7.11.2004 16:24
Dark Просто память физически устроена как конденсаторы ... 9.11.2004 1:23![]() ![]() |
|
Текстовая версия | 8.12.2025 21:04 |