Здравствуйте форумчане!
Если кто-то из вас по доброй воле может мне помочь, то мой вопрос о алгоритме на VB:
есть палиндром(строка, к-я читается одинаково справа и слева, например АВВА) изл латинских букв А и В. Число N - это кол-во букв в палиндроме, 1=< N =<100. Есть запрещенная строка (S) , длинной не более 5 символов, например "ВАВ". Надо подсчитать, сколько есть палиндомов, длинной N не содержащих запрещенную строку S.
Мой первый алгоритм перебирал все допустимые комбинации А и В и выбирал из них допустимые палиндромы. Но это очень долго и комп повесился - возьмите двоичное число из ста единичек, перевидите его в двоичное, и получите биллиарды комбинаций, которые можно перебирать часами.
Сдесь я представлю модифицированный алгоритм, который делает работу в 2 раза быстрее, но и этого недостаточно - комп тормозит уже при 30 символов в строке. Алгоритм перебирает комбинации А и В в подстроке HalfStr, длинна к-й в 2 раза меньше N, потом к строке Stroka добавляется HalfStr и StrReverce(HalfStr) - перевернутый HalfStr. Таким образом генерируются заведомо палиндромные строки.
Stroka =HalfStr & StrReverce(HalfStr).
Если N - нечетное, то между HalfStr и StrReverce(HalfStr) ставится сначало А потом В.
Stroka =HalfStr & "A" & StrReverce(HalfStr)
Stroka =HalfStr & "B" & StrReverce(HalfStr)
Уже потом, если Stroka не содержит S то счетчик повышается на 1.
Но и этот алгоритм тормозит. Если у кого-нибудь есть идеи на счет того, как этот алгоритм выполнить быстрее, и если Вы захотите поделится своими идеями, то я буду очень благодарен )