Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet66/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   63   64   65   66   67   68   69   70   71
Bog'liq
Abramyan-Pascal2016-1


Глава 5. Дополнительные средства обработки массивов 
109 
var a := ReadArrInteger; 
var k := 1; 
for var i := 1 to a.Length - 1 do 
if not (a[i] in a[:i]) then 
k += 1; 
Write(k); 
Однако все эти способы решения проигрывают в краткости и нагляд-
ности способу, использующему запрос Distinct (см. п. 4.2), который возвра-
щает последовательность, не содержащую одинаковых элементов, после 
чего остается определить ее размер с помощью запроса Count (см. п. 4.1): 
Task('Array47'); // Вариант 4 
var a := ReadArrInteger; 
var k := a.Distinct.Count; 
Write(k); 
Вариант 4 можно оформить в виде единственного оператора: 
Task('Array47'); // Вариант 4a 
Write(ReadArrInteger.Distinct.Count); 
Интересно проанализировать скорость выполнения полученных алго-
ритмов для массивов большого размера. В таблице 5.1 приводятся резуль-
таты измерения времени (в миллисекундах) для четырех алгоритмов, обра-
батывающих один и тот же массив размера size. Для генерации массива ис-
пользовался метод ArrRandom(size, 1, size div 2). Полученный результат k 
(одинаковый для всех алгоритмов) выводится в последнем столбце. 
Таблица 5.1. Быстродействие вариантов решения задачи Array47 
Размер size Вариант 1 Вариант 2 Вариант 3 Вариант 4 Результат k 
20000 
185 
141 
482 

8662 
40000 
672 
559 
2863 

17320 
80000 
2666 
2229 
12550 

34594 
160000 
10803 
9074 
52551 

69111 
Мы видим, что последний алгоритм является не только самым корот-
ким и наглядным, но и потрясающе быстрым, оставляя далеко позади все 
предыдущие варианты. Вторым по производительности оказывается алго-
ритм 2. Сравнивая его результаты с алгоритмом 1, мы убеждаемся, что ре-
ализация стандартного метода поиска в массиве работает быстрее, чем 
обычный перебор в цикле. Несколько неожиданным может показаться 
очень большое время работы алгоритма 3. Однако это объясняется тем, что 
в данном алгоритме на каждой итерации цикла создается и размещается в 
памяти новый массив (срез исходного массива), на что тратится дополни-
тельное время (а также дополнительная память). 


110 
5.4.
Преобразование динамических массивов 
Для динамических массивов предусмотрен набор методов, выполня-
ющих различные преобразования их элементов. Большинство этих методов 
(кроме ConvertAll) изменяют исходный массив. Некоторые из них (ConvertAll 
и Shuffle) являются функциями и возвращают преобразованный массив
другие (Replace, Sort и Transform) являются процедурами. Все методы остав-
ляют неизменным размер массива; все, кроме ConvertAll, сохраняют неиз-
менным тип его элементов.

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   63   64   65   66   67   68   69   70   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling