Разработка высокопроизводительного конечного автомата на Java

Я начинаю писать библиотеку Java для реализации высокопроизводительных конечных автоматов. Я знаю, что существует множество библиотек, но я хочу написать свою собственную с нуля, поскольку почти все библиотеки создают автоматы, оптимизированные для обработки только по одному за раз.

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

Соображения

  1. Сгенерированные автоматы обычно не являются массовыми. (~ 100-500 состояний).
  2. Однако реализация должна иметь возможность масштабирования .
  3. Реализация должна обеспечивать быстрых преобразований (минимизация, детерминизация и т. Д.).
  4. Планируется внедрить DFA, NFA, GNFA, PDA и, возможно, Tree Automata. Надеюсь, с единым интерфейсом, если это возможно.
  5. Должен быть хороший баланс между использованием памяти и производительностью.

Текущие вопросы относительно дизайна для меня:

  1. Следует ли определять классы для состояния , символа и перехода ? Или следует использовать «скрытую» внутреннюю структуру. Лично я считаю, что использование классов как таковых приведет к потере большого количества памяти, поскольку ту же информацию можно сохранить в гораздо более сжатой форме. Но позволяет ли это более быстрое преобразование? Есть ли другие плюсы / минусы?

  2. Как лучше всего хранить данные внутри? Использование таких структур данных, как HashMap и HashSet , позволяет осуществлять поиск с амортизированным постоянным временем, но при этом возникает элемент накладных расходов. Это лучший способ? Хранение информации о переходах в виде примитивного (или нет) массива, похоже, тратит довольно много памяти. Особенно, когда библиотеке нужно обрабатывать много автоматов одновременно. Каковы плюсы и минусы различных структур данных?

Я ценю любой ввод. Спасибо!

13
задан Nico Huysamen 29 July 2011 в 10:02
поделиться