https://github.com/diev/sectionstest
Задача об отрезках в какой-то точке
https://github.com/diev/sectionstest
Last synced: about 2 months ago
JSON representation
Задача об отрезках в какой-то точке
- Host: GitHub
- URL: https://github.com/diev/sectionstest
- Owner: diev
- License: apache-2.0
- Created: 2021-12-05T18:41:45.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-12-05T21:31:52.000Z (over 4 years ago)
- Last Synced: 2025-01-03T01:28:56.686Z (over 1 year ago)
- Language: C++
- Size: 12.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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++.