Рассмотрим огромное количество возможных расщеплений для данной строки.Если в строке n
символов, можно разделить n-1
возможных мест.Например, для строки cat
вы можете разделить до a
и разделить до t
.Это приводит к четырем возможным расщеплениям.
Вы можете рассматривать эту проблему как выбор места, где нужно разбить строку.Вам также нужно выбрать, сколько будет разделений.Таким образом, есть Sum(i = 0 to n - 1, n - 1 choose i)
возможных расщеплений.По теореме биномиального коэффициента , где x и y оба равны 1, это равно pow (2, n-1).
Конечно, большая часть этого вычисления опирается на общие подзадачитак что Динамическое программирование может ускорить ваш алгоритм.Вдобавок ко всему, вычисление boolean matrix M such M[i,j] is true if and only if the substring of your given string from i to j is a word
очень помогло бы.У вас все еще есть экспоненциальное число возможных сегментаций, но вы быстро сможете устранить сегментацию, если раннее разделение не сформировало слово.Тогда решением будет последовательность целых чисел (i0, j0, i1, j1, ...) с условием, что j sub k
= i sub (k + 1)
.
Если ваша цель - правильно URL верблюжьих URL, япозволит обойти проблему и перейти к чему-то более прямому: получить домашнюю страницу для URL, удалить все пробелы и заглавные буквы из исходного HTML-кода и выполнить поиск по вашей строке.Если есть совпадение, найдите этот раздел в исходном HTML и верните его.Вам понадобится массив NumSpaces, который объявляет, сколько пробелов встречается в исходной строке, например:
Needle: isashort
Haystack: This is a short phrase
Preprocessed: thisisashortphrase
NumSpaces : 000011233333444444
И ваш ответ будет получен из:
location = prepocessed.Search(Needle)
locationInOriginal = location + NumSpaces[location]
originalLength = Needle.length() + NumSpaces[location + needle.length()] - NumSpaces[location]
Haystack.substring(locationInOriginal, originalLength)
Конечно, этосломался бы, если бы на madduckets.com не было "Mad Duckets" где-то на главной странице.Увы, это цена, которую вы платите, чтобы избежать экспоненциальной проблемы.