Сейчас есть задачка, когда система на вход получается данные, которые никак не классифицированы. Есть набор декодеров, теоретически, один из них должен успешно прочитать эти данные, если ни один не справился - значит данные не правильные. Но это не не выглядит эффективным - итеративно кидать данные на каждый декодер и ждать и ответа.
Есть ли более оптимальные подходы, как выбрать правильный декодер?
В моем случае, это просто строка с таймстемпом в разных форматах, но специфика места, где это будет декодироваться таково, что таких таймстемпов может быть много даже в каждом отдельном запросе. У меня есть некоторые идеи оптимизации, но они скорее костыли, чем элегантное решение :)
Lander: это да, так и знал, что зря свой пример вписал. Мне интересно в более широком смысле, представьте, что у вас есть парсер языка программирования, на вход которого может прийти любой вид переменной, допустим это число, тогда это может еще быть целое, в разных системах исчисления, с плавающей точкой в разных форматах записи и тд
В вашей задаче нет более широкого смысла - каждый конкретный случай имеет свои собственные оптимизации, которые не подходят к другим вариантам.
Например про парсер ЯП, то числовые константы, обычно, восьмеричные начинаются на 0, шестнадцатиричные на 0x, остальные десятичные. Таким образом в простейшем случае достаточно проанализировать первые 2 цифры константы и т.д. И эта оптимизации для других примеров не подойдет.
Поэтому пока вы не дадите более полную вводную никто никаких оптимизаций вам не предложит.
Павел Дуденков: Я имел ввиду как раз что можно, какой то статистический анализ предварительный проводить или какую то дополнительную информацию анализировать типа длинны блока, если она фиксирована... Сложно придумать что то не зная что именно надо придумать.
В криптографии есть методы, основанные на поиске запрещенных комбинаций символов в потенциально дешифрованном тексте и отсеивании неверных ключей на основании этого. То есть полноценное (ресурсоемкое) дешифрование пробуют провести только если в тестовом наборе не встретится ни одной запрещенной подпоследовательности. Попробуйте модифицировать этот метод для Вашей предметной области.