Очередь приоритетов в R для реализации OPTICS

Мне нужно построить приоритетную очередь в R, где я буду помещать упорядоченные начальные объекты (или индекс объектов) для алгоритма кластеризации OPTICS.

  • Одна возможность состоит в том, чтобы реализовать его с кучей с представлением массива, и передавать массив кучи при каждом вызове вставки и уменьшения ключа, а также возвращать измененный массив и переназначать его в вызывающей функции. В этом случае операция переназначения сделает производительность очень плохой, и каждый раз, когда выполняется одна операция вставки или уменьшения, весь массив необходимо копировать дважды, один раз для вызова и еще один раз для возврата и переназначения.

  • Другой возможностью является кодирование операций кучи внутри функции вместо ее вызова. Это приведет к повторению кода и громоздкому коду.

  • Есть ли такой указатель, как доступ, как мы делаем в C

  • Могу ли я объявить пользовательские функции в классах S3 или S4 в R? В случае, я думаю, что вызов этих функций все еще требует того же переназначения после возврата (не как классы C++/Java, работает с объектом (я прав?))

  • Есть ли какой-нибудь встроенный способ, которым я могу вставить и извлечь объект в очереди в O(log(n)) время в R?

  • Есть ли какой-то другой способ, которым я могу достичь цели, то есть поддерживать вставку на основе приоритетов и удаление начальных значений в зависимости от расстояния достижимости объекта в алгоритме OPTICS, кроме явной сортировки после каждой вставки.

2 ответа

Решение

Классы R5 определяют изменяемые объекты и очень похожи на классы Java: они должны позволять вам избегать копий при изменении объекта.

Обратите внимание, что вам нужна не просто приоритетная очередь.

Он также должен поддерживать эффективные обновления. Простая куча не достаточна, вам нужно синхронизировать хэш-карту, чтобы эффективно находить объекты для обновления их значений. Затем вам нужно починить кучу в изменившейся позиции.

Другие вопросы по тегам