kuvshinovdr / OGxx

Object-oriented graph algorithm library in C++ developed for educational purposes.
MIT License
1 stars 1 forks source link

Point_distance_matrix #13

Closed kuvshinovdr closed 10 months ago

kuvshinovdr commented 11 months ago

Создать файл point_distance_matrix.cpp. В нём определить класс ogxx::Point_distance_matrix: public ogxx::St_matrix\<ogxx::Float>, который будет хранить vector\<vector\<ogxx::Float>> -- вектор точек, заданных векторами координат. Данный класс предполагает только const-методы (матрица вычисляется по запросу). Матрица квадратная размера равного числу точек. Расстояния вычисляются с помощью следующих метрик (фиксированный набор вариантов):

Данному классу нужен будет интерфейс, позволяющий задавать точки и переключать выбранную метрику.

kuvshinovdr commented 11 months ago

А вы сделали push? Пока ничего нет.

Alexanders2007 commented 11 months ago

Да, сделал. В своей ветке.

пн, 23 окт. 2023 г., 22:51 Dmitry R. Kuvshinov @.***>:

А вы сделали push? Пока ничего нет.

— Reply to this email directly, view it on GitHub https://github.com/kuvshinovdr/OGxx/issues/13#issuecomment-1775716112, or unsubscribe https://github.com/notifications/unsubscribe-auth/BBI5JBBA6JTMLDX6M2PPQK3YA2VDTAVCNFSM6AAAAAA6KJLE6OVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONZVG4YTMMJRGI . You are receiving this because you were assigned.Message ID: @.***>

kuvshinovdr commented 11 months ago

Теперь вижу.

  1. Переместите файл в source.
  2. В начале файла должен быть документирующий комментарий с тегами @file, @brief, @author.
  3. Не дублируйте определение St_matrix, надо подключить ogxx/st_matrix.hpp.
  4. При вычислении метрик надо учитывать, что размерности вложенных векторов могут быть разными: если в одном векторе меньше координат, чем в другом, то следует вычислять метрику так, будто он дополнен нулями.
  5. french_railway_distance не проверяет коллинеарность.
Alexanders2007 commented 11 months ago

Пункты 1-2 исправлены под коммитом point_distance_matrix.cpp_v2

Alexanders2007 commented 11 months ago

Пункт 3 исправлен под коммитом point_distance_matrix.cpp_v3

kuvshinovdr commented 10 months ago

В v3 вы почему-то заменили то, что делали на совершенно нерелевантный код: решение задачи из предыдущего семестра.

kuvshinovdr commented 10 months ago

Кстати, можно было бы сделать более ОО-решение, если отделить метрику от Point_distance_matrix в отдельные классы (для каждой метрики -- свой), спрятанные за общим интерфейсом типа: interface Metric_compute { Float compute(Float_iterator_uptr first_vector_coords, Float_iterator_uptr second_vector_coords); };

Alexanders2007 commented 10 months ago

Замечания исправлены в версии v4, interface Metric_compute реализован в виде класса с подклассами.

kuvshinovdr commented 10 months ago

А как насчёт включения интерфейса St_matrix, а не определения своего, и реализации всех его константных методов?

Alexanders2007 commented 10 months ago

А как насчёт включения интерфейса St_matrix, а не определения своего, и реализации всех его константных методов?

Имеете ввиду подключение St_matrix.hpp? Добавлена реализация point_distance_matrix.cpp_v5

kuvshinovdr commented 10 months ago

Обновите локальный репозиторий. Я исправил некоторые технические недочёты (можете посмотреть дифф).

  1. Размеры векторов могут не совпадать, тогда вычисляем так, будто более короткий дополнен нулями.
  2. Железнодорожная метрика должна проверять коллинеарность (расстояние между коллинеарными считается как евклидово).
  3. Point_distance_matrix пока не реализует актуальный интерфейс St_matrix (требуется только const-часть).