Nano Hash - криптовалюты, майнинг, программирование

Q: Оптимизирована структура данных для разветвленных и версионных сущностей.

Учитывая объект (скажем, файл или библиотеку/пакет), который может развивать свои версии и ответвления с течением времени, я ищу оптимизированную структуру данных, которая позволяет мне перемещаться по версиям к конкретному экземпляру объекта.

Например (немного надуманный пример) заданы такие записи, как:

MySIMDIntristicsLib.v1~archMIPS.v1~fbsd.v1 
MySIMDIntristicsLib.v1~archMIPS.v2~fbsd.v1
MySIMDIntristicsLib.v1~archX86.v1~win.v1
MySIMDIntristicsLib.v1~archX86.v2~win.v1
MySIMDIntristicsLib.v1~archX86.v2~win.v2
MySIMDIntristicsLib.v2~archX86.v1~win.v1


// get latest across all branches 
get( Entity="MySIMDIntristicsLib", branch[(latest) "~"] ) 
returns: "MySIMDIntristicsLib.v2~archX86.v1~win.v1"


// get latest across  archMips/fbsd branch 
get( Entity="MySIMDIntristicsLib", branch[(latest) "archMIPS~fbsd"] ) 
returns: "MySIMDIntristicsLib.v1~archMIPS.v2~fbsd.v1"



// get earliest   for archX86 v2 branch 
get( Entity="MySIMDIntristicsLib", branch[(earliest) "archX86.v2~"] ) 
returns "MySIMDIntristicsLib.v1~archX86.v2~win.v1"

Я подозреваю, что что-то подобное уже существует (поскольку управление пакетами или управление исходным кодом использует аналогичную вышеприведенную семантику доступа).

Я искал структуры данных в памяти для вышеперечисленного с хорошим временем доступа к самому последнему / самому раннему, но также с низкой скоростью вставки / удаления.

Я думаю, что при использовании грубой силы описанное выше может быть реализовано с использованием Min Max heap для каждого ветка, которая может иметь версии.

Впрочем, возможно, уже есть что-то получше. Я также проверил свой обычный источник таких вещей, Redisson, но не видел, есть ли явная реализация структуры данных для вышеуказанного

Вышеупомянутый DSL является моей собственной конструкцией, вероятно, также имеет некоторые дыры, поэтому, если есть лучшие DSL/API для такого доступа к данным, я бы тоже хотел узнать.


Ответы:


1

Если ваш список невелик, то самым быстрым решением, вероятно, будет сканирование отсортированной коллекции ваших объектов, отфильтровывая те, которые вам не нужны, или просто захват первого, который соответствует вашим критериям (например, вы можете перебрать свои объекты выше в обратном порядке и захватить первый «archMIPS~fbsd», чтобы получить «последний»).

Если ваш список большой, вы захотите проиндексировать свои ветки/версии, и вы можете сделать это с помощью базы данных в памяти, такой как Ядро базы данных H2, HSQLDB, CQEngine и т. д.

04.04.2016
  • Спасибо за ваш ответ. Тем не менее, я ищу явно разработанную структуру данных для вышеуказанной проблемы, которая может использоваться в памяти моими навигационными процедурами. 24.04.2016
  • Правильная и реляционная таблица базы данных с соответствующими индексами является явно разработанной структурой данных для вышеуказанной задачи. Удачи. 24.04.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..