だから私はPerlとPythonの両方でいくつかの練習問題を行ってきました(2つから選択するようなものです)、Githubと同じように独自の差分アルゴリズムを作成する必要があるという問題がありました。最長共通部分列問題が解決策の大きな部分を占めていることを知るところまで来ました。LCSのウィキペディアのページを参考にしましたが、まだ差分部分がわかりません。
また、Algorithm:Diff のようなモジュールが CPAN に既に存在することも認識していますが、これはほとんど練習用であり、ごまかしのように感じます。
私はアルゴリズムの python/pseudocode バージョンを理解しましたが、Perl にはないように見える多次元配列でそれを行う予定です。
これで、Perl で Longest Common Subsequence の長さを正常に取得できるところまで来ました。
基本的に、私が考えることができる疑似コード (ほぼ Python に似ていますが、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))
まだ実装していませんが、基本的には2つの文字列のLCSの長さを計算する方法だと思いますか?
出力に関しては、"HUMAN" & "CHIMPANZEE" (LCS = HMAN) に対して 4 を返す必要があります。
だから私が求めているのは、この時点から Perl を使用して Diff を印刷するにはどうすればよいかということです。LCSの長さだけではなく、代わりにリスト/配列を返す必要があることを認識しています。これは、LCS関数で多次元リストを返し、後で別のdiff関数で処理することで実行できます.
私はPerlを初めて使用するので、ポインタ/ヒントをいただければ幸いです。ありがとう。