что бы выход этой программы будет Т = [а, Ь, а, б, с, а, б] и P = [A, B, A] ???
Начальный способ сделать это - взять ручку и бумагу и сделать слот для каждой переменной. Затем пройдите через каждое утверждение, точно так же, как компьютер и изменит значения письменной переменной в результате выполнения инструкции.
Например, если начать с Т и Р, как указано выше, вы должны сначала установить значения для Т, п, Р и т пройти через i := 1
записи 1
в слот для i
, то вы бы пройти через while(i <= n) {
, потому что (1 < n) и т. д.
Когда вы сделаете это несколько раз, вы сможете сделать это намного быстрее.
В настоящее время я изучаю алгоритмы из книги, которую я купил у Amazon, но это худшая книга в мире, она показывает примеры, но на самом деле не показывает, как работать с ответами.
поэтому первый вопрос у меня есть,
Prefix-Match(T[1..n], P[1..m]) {
i := 1 // point to current position in T[]
while(i <= n) {
// find a match for first character of P
while(i <= n && T[i] != P[1]) i++
if (i > n) return; // quit
len := 1
// match as much as possible
while(len < m && i+len <= n && T[i+len] == P[1+len]) len++
output i, len
i++
}
что бы выход этой программы будет Т = [а, Ь, а, б, в, а, Ь] и Р = [а , Ь, а] ???
и, во-вторых, как мне решить временную сложность алгоритма, в условиях m и n?
Я не уверен, вы будете готовы к сложности время тренировки, но думать о том, как т и п влияют на максимальное время, затрачиваемое алгоритмом (или как долго он будет считать вас делать вручную):
- От этого зависит
m
?
- От этого зависит
n
?
- Если это зависит от того, является ли это функцией на
m+n
или больше похожа на m*n
? То есть для одного и того же размера T
и удвоенного размера P
требуется ли в два раза больше?
Нет такой вещи, как java-алгоритм. Алгоритмы не зависят от языка. –
извинения Я новичок в этой теме, спасибо за разъяснение. –
На каком языке это написано? Это не Ява. –