Прошло некоторое время с тех пор, как я изучал алгоритмы в школе, так что прости меня, если моя терминология не точна.
У меня есть ряд действий, которые при запуске выдают какое-то желаемое состояние (это в основном набор шагов для воспроизведения ошибки, но для этого вопроса это не имеет значения).
Моя цель - найти кратчайший ряд шагов, который все еще дает желаемое состояние. Любой данный шаг может быть ненужным, поэтому я пытаюсь удалить их максимально эффективно.
Я хочу сохранить порядок шагов (чтобы я мог удалять шаги, но не переставлять их).
Наивный подход, который я использую, состоит в том, чтобы взять всю серию и попытаться удалить каждое действие. Если мне удастся удалить одно действие (без изменения конечного состояния), я начну с начала серии. Это должно быть O (n ^ 2) в худшем случае.
Я начинаю искать способы сделать это более эффективным, но я почти уверен, что это решенная проблема. К сожалению, я не совсем уверен, что именно с Google - эта серия на самом деле не «путь», поэтому я не могу использовать алгоритмы сокращения пути. Любая помощь - даже просто дать мне несколько терминов для поиска - будет полезна.
Обновление: несколько человек указали, что даже мой наивный алгоритм не найдет кратчайшего решения. Это хороший момент, поэтому позвольте мне немного пересмотреть мой вопрос: есть ли идеи о приближенных алгоритмах для той же проблемы? Я предпочел бы иметь короткое решение, которое быстро приближается к самому короткому, а не очень долгое время, чтобы гарантировать абсолютную самую короткую серию. Спасибо!