Najdłuższy wspólny python

Najdłuższy wspólny python
Problem polega na znalezieniu najdłuższego wspólnego podkładu w danym ciągu. Zadaniem jest wzięcie dwóch strun i znalezienie najdłuższego wspólnego podrzędnego z powtarzającymi się znakami lub bez. Innymi słowy, dopasuj najdłuższy wspólny podkład podany w tej samej kolejności i obecny w obu strunach. Na przykład „Tech” to sekwencja znaków podanych w „NextTech”, która jest również podłożem.

Proces znalezienia najdłuższej wspólnej podsekwencji:

Prostym procesem znalezienia najdłuższej wspólnej podsekwencji jest sprawdzenie każdego znaku String 1 i znalezienie tej samej sekwencji w ciągu 2, sprawdzając każdy znak ciągu 2 jeden po drugim. Na przykład powiedzmy, że mamy ciąg 1 „st1” i ciąg 2 'st2' odpowiednio z długościami A i B. Sprawdź wszystkie podłoże „ST1” i zacznij iterować przez „ST2”, aby sprawdzić, czy jakikolwiek podsumowanie „ST1” istnieje jako „ST2”. Zacznij od dopasowywania podłoża o długości 2 i zwiększeniu długości o 1 w każdej iteracji, wznosząc się do maksymalnej długości strun.

Przykład 1:

Ten przykład dotyczy znalezienia najdłuższego wspólnego podstępu z powtarzającymi się znakami. Python zapewnia proste wbudowane metody wykonywania dowolnej funkcji. W poniższym przykładzie zapewniliśmy najprostszy sposób na znalezienie najdłuższej wspólnej podsekwencji w 2 ciągach. Połączenie „for” i „podczas„ pętli jest wykorzystywane do uzyskania najdłuższego wspólnego podrzędnego w ciągu. Spójrz na przykład podany poniżej:

def LongcomSubs (ST1, ST2):
ans = 0;
dla zasięgu (Len (ST1)):
dla B w zakresie (Len (ST2)):
k = 0;
While ((a + k) < len(st1) and (b + k) < len(st2)
i ST1 [A + K] == ST2 [B + K]):
k = k + 1;
ans = max (ans, k);
powrót ans;
Jeśli __name__ == '__main__':
A = „Abbaab”
B = „Babaab”
i = len (a)
J = len (b)
Drukuj („najdłuższym wspólnym podciążeniem w ciągu jest”, LongcomSubs (A, B))

Poniższe dane wyjściowe zostaną wyprodukowane po wykonaniu powyższego kodu. Znajdzie najdłuższy wspólny podłoże i da ci jako wyjście.

Przykład 2:

Innym sposobem na znalezienie najdłuższego wspólnego podstępu jest przestrzeganie podejścia iteracyjnego. A „do„ pętli ”jest używany do iteracji, a warunek„ jeśli ”odpowiada wspólnemu podłożeniu.

def longcomsubs (a, b, m, n):
Maxlen = 0
endindex = m
Znajdź = [[0 dla x w zakresie (n + 1)] dla y w zakresie (m + 1)]
Dla i w zakresie (1, m + 1):
dla J w zakresie (1, n + 1):
Jeśli a [i - 1] == b [j - 1]:
Znajdź [i] [j] = znajdź [i - 1] [j - 1] + 1
Jeśli znajdź [i] [j]> maxlen:
maxlen = znajdź [i] [j]
endindex = i
return x [endindex - maxlen: endindex]
Jeśli __name__ == '__main__':
A = „Abbaab”
B = „Babaab”
i = len (a)
J = len (b)
Drukuj („najdłuższym wspólnym podłożem w ciągu jest”, LongcomSubs (A, B, I, J))

Wykonaj powyższy kod w dowolnym interpreterie Python, aby uzyskać pożądane wyjście. Jednak użyliśmy narzędzia Spyder do wykonania programu, aby znaleźć najdłuższy wspólny podłoże w ciągu. Oto dane wyjściowe powyższego kodu:

Przykład 3:

Oto kolejny przykład, który pomoże Ci znaleźć najdłuższy wspólny podłoże w ciągu za pomocą kodowania Pythona. Ta metoda jest najmniejszym, najprostszym i najłatwiejszym sposobem na znalezienie najdłuższej wspólnej podsekwencji. Spójrz na przykładowy kod podany poniżej:

def Common (ST1, ST2):
def _iter ():
dla A, B w Zip (ST1, ST2):
Jeśli A == B:
Wydaj a
w przeciwnym razie:
powrót
powrót ".dołącz (_iter ())
Jeśli __name__ == '__main__':
A = „Abbaab”
B = „Babaab”
Drukuj („najdłuższym wspólnym podciążeniem w ciągu jest”, LongcomSubs (A, B))

Poniżej można znaleźć wyjście kodu podanego powyżej

Za pomocą tej metody nie zwróciliśmy wspólnego podrzędu, ale długość tego wspólnego podrzędu. Aby pomóc Ci uzyskać pożądany wynik, pokazaliśmy zarówno wyniki, jak i metody uzyskania tych wyników.

Złożoność czasu i złożoność przestrzeni w znalezieniu najdłuższego wspólnego podrzędu

Wykonanie lub wykonanie dowolnej funkcji można opłacić lub wykonać; Złożoność czasu jest jednym z tych kosztów. Złożoność czasu dowolnej funkcji jest obliczana poprzez analizę tego, ile czasu może zajmie instrukcja do wykonania. Stąd, aby znaleźć wszystkie podłoże w „ST1”, potrzebujemy O (a^2), gdzie „a” jest długością „st1”, a „o” jest symbolem złożoności czasu. Jednak złożoność czasowa iteracji i ustalenie, czy podłoże istnieje w „ST2”, czy nie, jest O (M), gdzie „M” jest długością „ST2”. Tak więc całkowita złożoność czasu odkrywania najdłuższego wspólnego podrzędnego w dwóch strunach wynosi O (A^2*m). Ponadto złożoność przestrzeni to kolejny koszt wykonania programu. Złożoność przestrzeni reprezentuje przestrzeń, którą program lub funkcja będzie przechowywać w pamięci podczas wykonywania. Stąd złożoność przestrzeni znalezienia najdłuższej wspólnej podsekwencji wynosi O (1), ponieważ nie wymaga żadnej przestrzeni do wykonania.

Wniosek:

W tym artykule dowiedzieliśmy się o metodach znalezienia najdłuższego wspólnego podrzędnego w ciągu za pomocą programowania Pythona. Dostarliśmy trzy proste i łatwe przykłady, aby uzyskać najdłuższy wspólny podaj w Python. Pierwszy przykład używa kombinacji „for” i „podczas pętli. Podczas drugiego przykładu postępowaliśmy zgodnie z podejściem iteracyjnym, używając logiki „dla„ pętli ”i„ jeśli ”. Przeciwnie, w trzecim przykładzie po prostu wykorzystaliśmy wbudowaną funkcję Pythona, aby uzyskać długość wspólnego podkładu w ciągu. Natomiast złożoność czasu znalezienia najdłuższego wspólnego pod substring w ciągu używającym Python wynosi O (A^2*m), gdzie A i MA są długością dwóch ciągów; Odpowiednio ciąg 1 i ciąg 2.