#p82896,Шарпер написал(а):но я то применил более простую структуру
Да тоже самое ориентированное дерево. Повторюсь. Начиная от корня (ему соответствуют ячейки 0 и 1) для каждой последовательности проводим следующую операцию:
- если текущий бит 0 и нечётная ячейка, соответствующая данной вершине, пуста - прописываем текущее значение счётчика в нечётную ячейку, соответствующую данной вершине, счётчик увеличиваем на 1; если нечётная ячейка, соответствующая данной вершине, не пуста - оставляем ячейку без изменения и не изменяем счётчик; переходим по адресу нечётной ячейки;
- если текущий бит 1 и чётная ячейка, соответствующая данной вершине, пуста - прописываем текущее значение счётчика в чётную ячейку, соответствующую данной вершине, счётчик увеличиваем на 1; если чётная ячейка, соответствующая данной вершине, не пуста - оставляем ячейку без изменения и не изменяем счётчик; переходим по адресу чётной ячейки;
- если последовательность закончилась - возвращаемся к корню, в противном случае переходим к следующему биту последовательности.
Соответствующее такой операции дерево строится графически следующим образом: если в текущей вершине бит последовательности 0 ведём дугу к следующей вершине влево, 1 - вправо.