Итак, я занимаюсь некоторыми проблемами с практикой для Perl & Python (выбор между двумя), и у меня возникла проблема, когда мне нужно создать собственный алгоритм дифференциации, как и у Github. Я до такой степени, что знаю, что самая длинная проблема общего подпоследовательности - большая часть решения. Я использовал wikipedia page for LCS в качестве справочной информации, но у меня все еще возникли проблемы с выяснением части diff.Печать Diff от самой длинной общей подпоследовательности
Я также понимаю, что на CPAN уже есть модули, такие как Алгоритм: Diff, но это в основном только для практики, и они чувствуют себя обманом.
Я вычислил версию алгоритма python/псевдокода, но я планирую сделать это с помощью многомерных массивов, которые, по-видимому, нет в Perl.
Теперь я добрался до места, где я могу получить самую длинную общую длину подпоследовательности в Perl.
В основном псевдокод (почти питона-как, но, как предполагается, на Perl), я думаю, что-то вроде этого:
function lengthOfLCS(string1, string2){
if length(string1) == 0 or length(string2) == 0:
return 0
else if string1[0] eq string2[0]:
return 1+ lengthOfLCS(stringA[1:], stringB[1:])
return max(lengthOfLCS(string1, string2[1:], lengthOfLCS(string1[1:], string2))
я не выполнил его, но я думаю, что это в основном как я могу рассчитать длину LCS двух строк?
Выход мудр, он должен вернуть 4 против «HUMAN» & «Шимпанзе» (LCS = HMan)
Так что я спрашиваю, как мне добраться до типографских дифференциалы с помощью Perl с этого момента? Я знаю, что вместо длины LCS вместо этого я должен вернуть список/массив, что можно сделать, возвратив многомерный список в функции LCS, а затем обработать его позже в отдельной функции diff ,
Я новичок в Perl, поэтому любые указатели/советы были бы весьма признательны. Спасибо.
Это [ответ] (http://en.wikipedia.org/wiki/Longest_common_subsequence_problem) подробно в Википедии – ikegami
Существует также 'Алгоритм :: MLCS',' Алгоритм :: Diff', 'Алгоритм :: LCS 'и' Алгоритм :: NeedlemanWunsch' на CPAN. –
Привет, спасибо за предложения. @ikegami На самом деле я ссылался на страницу вики, забыв упомянуть об этом здесь. Тем не менее, я до сих пор не понимаю бит Diff, код, объясненный в wikipedia, в основном использует многомерные массивы, которых Perl не имеет? Можете ли вы предложить мне альтернативу Perl? также о CPAN, я в основном делаю это только для практики не для фактического использования (чисто образовательного), поэтому я бы предпочел не использовать их. Спасибо в любом случае, я бы, вероятно, посмотрел исходный код, чтобы попытаться выяснить их. –