3 года назад
История
README.md
SectionsTest
Задача об отрезках в какой-то точке.
Решение задачи разными способами на C++.
Константы для тестов
В программе заданы константы, что ширина листа 210 мм (А4).
Каждый отрезок длиной не более 1/10 ширины листа.
Начальная точка и длина каждого отрезка задаются случайно.
Общее число отрезков 100000.
Результаты
Протестированные способы:
- Линейный поиск по всем отрезкам и всему диапазону.
- Отрезки отсортированы по точке начала и поиск прекращается после прохода искомой точки.
- Битовые поля, соответствующие отрезкам, шириной в лист.
- Приведение битовых полей к побитовым операциям размерностей x32 и x64 для сравнения.
- Работа с массивом x64 вместо массива структур.
- Прекращение поиска после прохода искомой точки.
- Предварительное сужение полосы прохода по длине предварительного наибольшего отрезка.
Для контроля разных способов сравнивается число найденных отрезков.
По центру
Для прогонов подставлена точка в центре ширины листа: 105.
Найдено пересекающих отрезков: 5472.
Время каждого способа в таблице ниже:
Enter a test point [0..209]:
105
Test1, matches: 5472, time: 0.0049566s
Test2, matches: 5472, time: 0.0012192s
Test3, matches: 5472, time: 0.0063362s
Test4x32, matches: 5472, time: 0.0018483s
Test4x64, matches: 5472, time: 0.0013827s
Test5, matches: 5472, time: 0.0007807s
Test6, matches: 5472, time: 0.0005161s
Test7, matches: 5472, time: 0.0002669s
В начале
Enter a test point [0..209]:
0
Test1, matches: 499, time: 0.001737s
Test2, matches: 499, time: 1.21e-05s
Test3, matches: 499, time: 0.0067402s
Test4x32, matches: 499, time: 0.0016699s
Test4x64, matches: 499, time: 0.0016441s
Test5, matches: 499, time: 0.0015882s
Test6, matches: 499, time: 2.03e-05s
Test7, matches: 499, time: 2.08e-05s
В конце
Enter a test point [0..209]:
209
Test1, matches: 507, time: 0.0032643s
Test2, matches: 507, time: 0.0021897s
Test3, matches: 507, time: 0.0067324s
Test4x32, matches: 507, time: 0.0016257s
Test4x64, matches: 507, time: 0.0021194s
Test5, matches: 507, time: 0.0007385s
Test6, matches: 507, time: 0.0006449s
Test7, matches: 507, time: 0.0001129s
Програмная среда
Microsoft Visual Studio Community 2022 (64bit).
Продукт: Microsoft Visual C++ 2022
Тип шаблона проекта: Пустой проект, C++.
Конвейеры
0 успешных
0 с ошибкой