Programming Taskbook 0
Download 1.62 Mb. Pdf ko'rish
|
Abramyan-Pascal2016-1
- Bu sahifa navigatsiya:
- Array47 ); // Вариант 4
- Таблица 5.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 2 8662 40000 672 559 2863 2 17320 80000 2666 2229 12550 5 34594 160000 10803 9074 52551 9 69111 Мы видим, что последний алгоритм является не только самым корот- ким и наглядным, но и потрясающе быстрым, оставляя далеко позади все предыдущие варианты. Вторым по производительности оказывается алго- ритм 2. Сравнивая его результаты с алгоритмом 1, мы убеждаемся, что ре- ализация стандартного метода поиска в массиве работает быстрее, чем обычный перебор в цикле. Несколько неожиданным может показаться очень большое время работы алгоритма 3. Однако это объясняется тем, что в данном алгоритме на каждой итерации цикла создается и размещается в памяти новый массив (срез исходного массива), на что тратится дополни- тельное время (а также дополнительная память). 110 5.4. Преобразование динамических массивов Для динамических массивов предусмотрен набор методов, выполня- ющих различные преобразования их элементов. Большинство этих методов (кроме ConvertAll) изменяют исходный массив. Некоторые из них (ConvertAll и Shuffle) являются функциями и возвращают преобразованный массив, другие (Replace, Sort и Transform) являются процедурами. Все методы остав- ляют неизменным размер массива; все, кроме ConvertAll, сохраняют неиз- менным тип его элементов. Download 1.62 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling