Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions samples/benchmarks/examples/БенчмаркСортировок.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
> BenchmarkOneScript v0.8.0, OneScript v2.0.0, Microsoft Windows NT 10.0.26200.0 \
13th Gen Intel Core i5-13600KF, 1 CPU, 20 logical and 14 physical cores

| Method | ВерхняяГраница | РазмерМассива | Baseline | Mean | StdErr | StdDev | Ratio | RatioSD | Op/s | Allocated |
|-------------------------------------|---------------:|--------------:|----------|-----------:|-------------:|------------:|-------:|--------:|--------:|-------------:|
| ВстроеннаяСортировка | 65,000 | 1,000 | Yes | 1.709 ms | 36.33 us | 162.5 us | 1.00 | 0.00 | 585.245 | 307.2 KB |
| СортировкаПузырьком | 65,000 | 1,000 | No | 243.252 ms | 396.27 us | 1,772.2 us | 143.29 | 10.08 | 4.111 | 172,131.1 KB |
| СортировкаВставками | 65,000 | 1,000 | No | 104.060 ms | 714.25 us | 3,194.2 us | 61.30 | 4.67 | 9.610 | 63,426.5 KB |
| СортировкаВставкамиБинарная | 65,000 | 1,000 | No | 80.239 ms | 533.62 us | 2,386.4 us | 47.26 | 3.58 | 12.463 | 48,979.8 KB |
| СортировкаВыбором | 65,000 | 1,000 | No | 85.888 ms | 143.25 us | 640.6 us | 50.59 | 3.56 | 11.643 | 70,733.5 KB |
| СортировкаШелла | 65,000 | 1,000 | No | 5.926 ms | 77.61 us | 347.1 us | 3.49 | 0.32 | 168.743 | 3,553.5 KB |
| БыстраяСортировка | 65,000 | 1,000 | No | 5.629 ms | 92.57 us | 414.0 us | 3.32 | 0.33 | 177.657 | 2,514.2 KB |
| СортировкаСлиянием | 65,000 | 1,000 | No | 6.871 ms | 77.12 us | 344.9 us | 4.05 | 0.35 | 145.541 | 4,197.8 KB |
| ПирамидальнаяСортировка | 65,000 | 1,000 | No | 9.835 ms | 102.57 us | 458.7 us | 5.79 | 0.48 | 101.673 | 5,311.3 KB |
| СортировкаРасческой | 65,000 | 1,000 | No | 7.954 ms | 99.66 us | 445.7 us | 4.68 | 0.42 | 125.731 | 5,419.6 KB |
| СортировкаПодсчётом | 65,000 | 1,000 | No | 24.089 ms | 276.59 us | 1,237.0 us | 14.19 | 1.22 | 41.513 | 13,588.3 KB |
| ПоразряднаяСортировка | 65,000 | 1,000 | No | 2.547 ms | 63.16 us | 282.5 us | 1.50 | 0.19 | 392.614 | 1,766.5 KB |
| ВстроеннаяСортировка | 65,000 | 10,000 | Yes | 12.613 ms | 499.40 us | 2,233.4 us | 1.00 | 0.00 | 79.283 | 3,049.4 KB |
| СортировкаШелла | 65,000 | 10,000 | No | 88.231 ms | 440.89 us | 1,971.7 us | 7.16 | 1.00 | 11.334 | 51,800.3 KB |
| БыстраяСортировка | 65,000 | 10,000 | No | 79.262 ms | 413.29 us | 1,848.3 us | 6.44 | 0.90 | 12.616 | 31,203.7 KB |
| СортировкаСлиянием | 65,000 | 10,000 | No | 98.830 ms | 729.69 us | 3,263.3 us | 8.02 | 1.13 | 10.118 | 59,095.7 KB |
| ПирамидальнаяСортировка | 65,000 | 10,000 | No | 137.246 ms | 542.38 us | 2,425.6 us | 11.14 | 1.54 | 7.286 | 73,992.8 KB |
| СортировкаРасческой | 65,000 | 10,000 | No | 120.794 ms | 596.17 us | 2,666.2 us | 9.81 | 1.36 | 8.279 | 82,726.2 KB |
| СортировкаПодсчётом | 65,000 | 10,000 | No | 31.852 ms | 535.45 us | 2,394.6 us | 2.59 | 0.40 | 31.396 | 16,963.3 KB |
| ПоразряднаяСортировка | 65,000 | 10,000 | No | 27.049 ms | 465.41 us | 2,081.4 us | 2.20 | 0.34 | 36.969 | 16,483.3 KB |
| ВстроеннаяСортировка | 65,000 | 100,000 | Yes | 174.752 ms | 10,562.95 us | 47,239.0 us | 1.00 | 0.00 | 5.722 | 30,471.2 KB |
| СортировкаПодсчётом | 65,000 | 100,000 | No | 99.235 ms | 1,402.77 us | 6,273.4 us | 0.62 | 0.21 | 10.077 | 50,713.4 KB |
| ПоразряднаяСортировка | 65,000 | 100,000 | No | 230.053 ms | 1,692.45 us | 7,568.9 us | 1.44 | 0.48 | 4.347 | 163,873.1 KB |
| Method | ВерхняяГраница | РазмерМассива | Baseline | Mean | StdErr | StdDev | Ratio | RatioSD | Op/s | Allocated |
|--------------------------------|---------------:|--------------:|----------|-----------:|------------:|-----------:|-------:|--------:|--------:|-------------:|
| Встроенная | 65,000 | 1,000 | Yes | 1.967 ms | 94.75 us | 519.0 us | 1.00 | 0.00 | 508.320 | 307.2 KB |
| Пузырьком O(n^2) | 65,000 | 1,000 | No | 251.488 ms | 536.47 us | 2,938.4 us | 138.47 | 42.83 | 3.976 | 170,930.5 KB |
| Вставками O(n^2) | 65,000 | 1,000 | No | 104.755 ms | 332.50 us | 1,821.2 us | 57.68 | 17.86 | 9.546 | 62,466.1 KB |
| Бинарные вставки O(n^2) | 65,000 | 1,000 | No | 80.723 ms | 432.39 us | 2,368.3 us | 44.45 | 13.80 | 12.388 | 48,259.2 KB |
| Выбором (двойная) O(n^2) | 65,000 | 1,000 | No | 90.969 ms | 247.14 us | 1,353.6 us | 50.09 | 15.50 | 10.993 | 70,733.2 KB |
| Шелла (Ciura) O(n^1.25) | 65,000 | 1,000 | No | 6.086 ms | 73.44 us | 402.3 us | 3.35 | 1.06 | 164.306 | 3,485.5 KB |
| Быстрая O(n log n) | 65,000 | 1,000 | No | 5.619 ms | 62.22 us | 340.8 us | 3.09 | 0.98 | 177.966 | 2,518.0 KB |
| Слиянием O(n log n) | 65,000 | 1,000 | No | 6.713 ms | 81.59 us | 446.9 us | 3.70 | 1.17 | 148.959 | 4,126.7 KB |
| Пирамидальная O(n log n) | 65,000 | 1,000 | No | 10.461 ms | 87.70 us | 480.4 us | 5.76 | 1.80 | 95.595 | 5,321.8 KB |
| Расчёской O(n log n) | 65,000 | 1,000 | No | 8.414 ms | 91.53 us | 501.4 us | 4.63 | 1.46 | 118.853 | 5,636.5 KB |
| Подсчётом O(n + k) | 65,000 | 1,000 | No | 25.184 ms | 301.27 us | 1,650.1 us | 13.87 | 4.39 | 39.708 | 13,588.3 KB |
| Поразрядная LSD-256 O(d*(n+b)) | 65,000 | 1,000 | No | 2.642 ms | 57.52 us | 315.1 us | 1.45 | 0.48 | 378.535 | 1,765.2 KB |
| Встроенная | 65,000 | 10,000 | Yes | 11.295 ms | 602.10 us | 3,297.9 us | 1.00 | 0.00 | 88.535 | 3,049.4 KB |
| Шелла (Ciura) O(n^1.25) | 65,000 | 10,000 | No | 93.066 ms | 463.43 us | 2,538.3 us | 8.90 | 2.38 | 10.745 | 51,726.1 KB |
| Быстрая O(n log n) | 65,000 | 10,000 | No | 78.345 ms | 456.59 us | 2,500.8 us | 7.50 | 2.01 | 12.764 | 30,851.2 KB |
| Слиянием O(n log n) | 65,000 | 10,000 | No | 99.145 ms | 464.58 us | 2,544.6 us | 9.49 | 2.54 | 10.086 | 59,235.3 KB |
| Пирамидальная O(n log n) | 65,000 | 10,000 | No | 143.819 ms | 667.90 us | 3,658.2 us | 13.76 | 3.68 | 6.953 | 73,970.5 KB |
| Расчёской O(n log n) | 65,000 | 10,000 | No | 126.841 ms | 890.02 us | 4,874.9 us | 12.14 | 3.26 | 7.884 | 82,811.6 KB |
| Подсчётом O(n + k) | 65,000 | 10,000 | No | 33.581 ms | 553.81 us | 3,033.4 us | 3.21 | 0.90 | 29.779 | 16,963.3 KB |
| Поразрядная LSD-256 O(d*(n+b)) | 65,000 | 10,000 | No | 27.221 ms | 370.16 us | 2,027.4 us | 2.60 | 0.72 | 36.737 | 16,484.2 KB |
| Встроенная | 65,000 | 100,000 | Yes | 105.520 ms | 987.67 us | 5,409.7 us | 1.00 | 0.00 | 9.477 | 30,471.2 KB |
| Подсчётом O(n + k) | 65,000 | 100,000 | No | 101.292 ms | 1,168.65 us | 6,401.0 us | 0.96 | 0.08 | 9.872 | 50,713.3 KB |
| Поразрядная LSD-256 O(d*(n+b)) | 65,000 | 100,000 | No | 241.630 ms | 1,249.75 us | 6,845.2 us | 2.30 | 0.13 | 4.139 | 163,855.1 KB |

```
ВерхняяГраница : Значение параметра 'ВерхняяГраница'
Expand Down
42 changes: 21 additions & 21 deletions samples/benchmarks/examples/БенчмаркСортировок.os
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// Сравнительный бенчмарк алгоритмов сортировки.
//
// Реализованы 11 алгоритмов - от квадратичных до линейных:
// O(n²) : Пузырёк, Вставки, Вставки (бин.), Выбором
// O(n^2) : Пузырёк, Вставки, Вставки (бин.), Выбором
// O(n log n) : Шелла (Ciura), Быстрая, Слиянием, Пирамидальная, Расчёска
// O(n + k) : Подсчётом, Поразрядная (LSD Radix-256)

Expand All @@ -19,7 +19,7 @@

#Область ОбработчикиСобытий

&КоличествоИтераций(20)
&КоличествоИтераций(30)
&МониторингПамяти
Процедура ПриСозданииОбъекта()
ГСЧ = Новый ГенераторСлучайныхЧисел();
Expand Down Expand Up @@ -52,12 +52,12 @@

КонецПроцедуры

&ПослеКаждогоКейса
&ПослеИтерации
Процедура ПроверитьСортировку(Контекст) Экспорт

РазмерМассива = РазмерМассива(Контекст.Кейс);
Размер = ТестовыйМассив.Количество();

// Проверка 1: размер не изменился
Если Размер <> РазмерМассива Тогда
ВызватьИсключение "Ошибка: размер массива изменился ("
Expand Down Expand Up @@ -94,7 +94,7 @@
// Встроенная сортировка (эталон).
// Сортирует через ТаблицаЗначений.Сортировать(), затем копирует обратно в массив.
// Служит базой для Ratio - все остальные алгоритмы сравниваются с этим.
&Бенчмарк
&Бенчмарк(Наименование = "Встроенная")
&Эталон
&Параметры(1000)
&Параметры(10000)
Expand All @@ -109,10 +109,10 @@

КонецПроцедуры

// Сортировка пузырьком - O(n²).
// Сортировка пузырьком - O(n^2).
// Простейший алгоритм: соседние элементы сравниваются и меняются местами.
// Всегда выполняет n*(n-1)/2 сравнений независимо от входных данных.
&Бенчмарк
&Бенчмарк(Наименование = "Пузырьком O(n^2)")
&Параметры(1000)
Процедура СортировкаПузырьком(РазмерМассива) Экспорт

Expand All @@ -130,10 +130,10 @@

КонецПроцедуры

// Сортировка вставками - O(n²), лучший O(n).
// Сортировка вставками - O(n^2), лучший O(n).
// Каждый элемент сдвигается влево до своей позиции.
// Эффективна на малых и почти отсортированных массивах; используется как базис в гибридных алгоритмах.
&Бенчмарк
&Бенчмарк(Наименование = "Вставками O(n^2)")
&Параметры(1000)
Процедура СортировкаВставками(РазмерМассива) Экспорт

Expand All @@ -153,9 +153,9 @@

КонецПроцедуры

// Бинарная сортировка вставками - O(n²) сдвигов, O(n log n) сравнений.
// Бинарная сортировка вставками - O(n^2) сдвигов, O(n log n) сравнений.
// Позиция вставки ищется бинарным поиском, но сдвиг элементов остаётся линейным.
&Бенчмарк
&Бенчмарк(Наименование = "Бинарные вставки O(n^2)")
&Параметры(1000)
Процедура СортировкаВставкамиБинарная(РазмерМассива) Экспорт

Expand Down Expand Up @@ -190,10 +190,10 @@

КонецПроцедуры

// Двойная сортировка выбором - O(n²).
// Двойная сортировка выбором - O(n^2).
// На каждом проходе находит минимум и максимум, сужая границы с двух сторон.
// Вдвое меньше проходов, чем классическая сортировка выбором.
&Бенчмарк
&Бенчмарк(Наименование = "Выбором (двойная) O(n^2)")
&Параметры(1000)
Процедура СортировкаВыбором(РазмерМассива) Экспорт

Expand Down Expand Up @@ -244,7 +244,7 @@
// Обобщение сортировки вставками с убывающим шагом.
// Последовательность Ciura [1,4,10,23,57,132,301,701] эмпирически оптимальна;
// для массивов >701 элемента шаги продолжаются с множителем ×2.25.
&Бенчмарк
&Бенчмарк(Наименование = "Шелла (Ciura) O(n^1.25)")
&Параметры(1000)
&Параметры(10000)
Процедура СортировкаШелла(РазмерМассива) Экспорт
Expand Down Expand Up @@ -302,7 +302,7 @@
// Гибрид быстрой + пирамидальной + вставками.
// Медиана трёх для выбора опорного, лимит глубины 2·log2(n) с переходом на пирамидальную,
// участки < МинимальныйРазмерВставки досортировываются вставками.
&Бенчмарк
&Бенчмарк(Наименование = "Быстрая O(n log n)")
&Параметры(1000)
&Параметры(10000)
Процедура БыстраяСортировка(РазмерМассива) Экспорт
Expand Down Expand Up @@ -406,7 +406,7 @@
// Блоки размером МинимальныйРазмерВставки сортируются вставками,
// затем попарно сливаются с удвоением ширины. Единый буфер на все слияния.
// Оптимизация: пропуск слияния, если граница уже упорядочена.
&Бенчмарк
&Бенчмарк(Наименование = "Слиянием O(n log n)")
&Параметры(1000)
&Параметры(10000)
Процедура СортировкаСлиянием(РазмерМассива) Экспорт
Expand Down Expand Up @@ -494,7 +494,7 @@
// Пирамидальная сортировка - O(n log n).
// Построение max-heap за O(n), затем n извлечений вершины.
// Просеивание (sift-down) заинлайнено для производительности в интерпретаторе.
&Бенчмарк
&Бенчмарк(Наименование = "Пирамидальная O(n log n)")
&Параметры(1000)
&Параметры(10000)
Процедура ПирамидальнаяСортировка(РазмерМассива) Экспорт
Expand Down Expand Up @@ -645,7 +645,7 @@
// Сортировка расчёской - O(n log n) в среднем.
// Улучшение пузырька: шаг сравнения уменьшается с коэффициентом 1.3 до 1.
// Эффективно устраняет «черепах» - мелкие элементы в конце массива.
&Бенчмарк
&Бенчмарк(Наименование = "Расчёской O(n log n)")
&Параметры(1000)
&Параметры(10000)
Процедура СортировкаРасческой(РазмерМассива) Экспорт
Expand Down Expand Up @@ -679,7 +679,7 @@
// Сортировка подсчётом - O(n + k), где k = ВерхняяГраница.
// Не основана на сравнениях: считает количество вхождений каждого значения.
// Эффективна при k ≈ n; при k >> n большая часть работы - пустой пробег по счётчикам.
&Бенчмарк
&Бенчмарк(Наименование = "Подсчётом O(n + k)")
&Параметры(1000)
&Параметры(10000)
&Параметры(100000)
Expand Down Expand Up @@ -711,7 +711,7 @@
// Поразрядная сортировка (LSD Radix-256) - O(d·(n+b)), где d=2, b=256.
// Два прохода по основанию 256: сначала младшие 8 бит, затем старшие.
// Покрывает значения [0..65535]. Стабильная, не основана на сравнениях.
&Бенчмарк
&Бенчмарк(Наименование = "Поразрядная LSD-256 O(d*(n+b))")
&Параметры(1000)
&Параметры(10000)
&Параметры(100000)
Expand Down Expand Up @@ -807,4 +807,4 @@

Возврат 0;

КонецФункции
КонецФункции
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
// Указывает, что метод должен быть измерен как бенчмарк в рамках тестирования производительности.
//
// Методы с этой аннотацией автоматически включаются в процесс бенчмаркинга.
// При запуске будут замеряться время выполнения, аллокации памяти (если включен мониторинг памяти),
// Методы с этой аннотацией автоматически включаются в процесс бенчмаркинга.
// При запуске будут замеряться время выполнения, аллокации памяти (если включен мониторинг памяти),
// и другие параметры производительности.
//
// Параметры:
// Наименование - Строка - Наименование бенчмарка. Если указано, отображается в колонке Method отчета
// вместо имени метода.
//
// Примеры:
// &Бенчмарк
// Процедура МойБенчмарк() Экспорт
// // Тестируемый код
// КонецПроцедуры
//
// &Бенчмарк(Наименование = "Мое наименование")
// Процедура МойБенчмарк() Экспорт
// // Тестируемый код
// КонецПроцедуры
&Аннотация("Бенчмарк")
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура ПриСозданииОбъекта(Наименование = "")
КонецПроцедуры
Loading
Loading