README.md

SectionsTest

Задача об отрезках в какой-то точке.
Решение задачи разными способами на C++.

Константы для тестов

В программе заданы константы, что ширина листа 210 мм (А4).
Каждый отрезок длиной не более 1/10 ширины листа.
Начальная точка и длина каждого отрезка задаются случайно.
Общее число отрезков 100000.

Результаты

Протестированные способы:

  1. Линейный поиск по всем отрезкам и всему диапазону.
  2. Отрезки отсортированы по точке начала и поиск прекращается после прохода искомой точки.
  3. Битовые поля, соответствующие отрезкам, шириной в лист.
  4. Приведение битовых полей к побитовым операциям размерностей x32 и x64 для сравнения.
  5. Работа с массивом x64 вместо массива структур.
  6. Прекращение поиска после прохода искомой точки.
  7. Предварительное сужение полосы прохода по длине предварительного наибольшего отрезка.

Для контроля разных способов сравнивается число найденных отрезков.

По центру

Для прогонов подставлена точка в центре ширины листа: 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 с ошибкой