Насколько я понимаю, вы хотите закодировать график, где узлы - это состояния, а ребра - это переходы, а каждое ребро помечено символом. Это правильно?
Скучный, но практичный ответ - иметь объект для каждого состояния и кодировать переходы в какой-то небольшой структуре в этом объекте.
Самый простой из них - это массив, индексированный по символьному коду: это так же быстро, как и получается, но, естественно, не занимает мало места. Вы можете сделать его более эффективным с точки зрения использования пространства, используя своего рода усеченный, усеченный массив: храните только ту часть массива, которая содержит переходы, а также начальный и конечный индексы этой части. При поиске символа в нем убедитесь, что его код находится в пределах границ; если это не так, обрабатывайте его как нулевое ребро (или ребро обратно в начальное состояние или что-то в этом роде), а если это так, извлекайте элемент по индексу (код символа - начало). Имеет ли это смысл?
Более сложный вариант будет немного хеш-таблицей, который будет более компактным, но немного медленнее. Я бы предложил закрытое хеширование, потому что списки столкновений будут использовать слишком много памяти; линейного зондирования должно быть достаточно. Вы можете изучить использование идеального хеширования (поиск по нему), который занимает много времени для генерации таблицы, но затем дает поиск без столкновений. Процесс генерации довольно сложен.
Умный подход состоит в том, чтобы использовать как массивы, так и хеш-таблицы, и выбирать одну или другую в зависимости от количества ребер: если сжатый массив будет больше, чем, скажем, третий полный, используйте его, но если нет, используйте хеш-таблицу.
Теперь, что-то более радикальное, что вы могли бы сделать, это использовать массивы, но перекрывать их - если они разреженные, у них будет много дыр, и если вы умны, вы можете расположить их так что записи в каждом массиве совпадают с отверстиями в других. Это даст вам быстрый поиск, а также отличную эффективность памяти. Вам понадобится какая-то схема для различения, когда поиск нашел что-то от того, когда был найден пустой слот с переходом какого-то другого состояния, но я уверен, что вы можете что-то придумать.