2012-03-01 5 views
0

Я ищу алгоритм для эффективного сравнения двух строк, не занимая много памяти и за меньшее время. Итак, что я сейчас делаю, сначала сжимаю строку символов, а затем сравниваю и сжатую строку (чтобы избежать ошибок памяти, так как строка может быть очень длинной здесь)Алгоритм сжатия кодированных строк в C/C++

Строка содержит символы из набора [0-9], x, o ,ИКС.

Теперь правило сжатия похоже на то, что нужно сжимать только определенные повторяющиеся токены. Например: «о» является концом маркера и он приходит всегда в конце последовательности одной или более цифр (0-9}, «х», чтобы показать умножение и т.д.

Примеры: 1. 8o8o80 должны сжиматься, как 3х80 2. 8oXXXX должны быть сжаты в 804xX 3. 64o8o8o16o16o должен быть 64o2x8o2x16o и т.д ..

Интересно, есть ли какие-либо существующие алгоритмы сжатия таких строк?

по достоинству оценят любую помощь чтобы отсортировать это. Спасибо!

+0

Как сжимать, а затем сравнивать быстрее, чем просто сравнивать? – Jon

+0

Что случилось с наивным сравнением? Он не использует больше памяти, чем тот, который уже используется двумя строками, и может быть быстрее (потенциально более точным) ... – Nim

+0

@Jon: не быстрее, а эффективнее с памятью, поскольку я получал ошибку в памяти для несжатой строки , – Raj

ответ

1

Вы ищете run length encoding algorithm. Вы найдете некоторые варианты реализации here

+0

Да, но у него странный символ «терминатора», поэтому ему может потребоваться изменить алгоритм. – vulkanino

+0

Спасибо штабелеукладчик. Но при реализации RLE по умолчанию, токен - это символ, но для меня его набор символов. А также нет понятия о завершении символа в этом алго. – Raj

+0

Я не могу найти подходящий алгоритм сжатия, отвечающий моим ожиданиям. Поэтому я собираюсь реализовать ту, которая работает для меня. – Raj

Смежные вопросы