レーベンシュタイン距離の中間/コーディング表現


8

フレーズ:

素早い茶色のキツネが怠惰な犬を飛び越えます[A]

そして

Uickブラウンフォックスが怠惰な犬をジャンプします[B]

AをBに変換するために必要な単一文字の追加、削除、または置換の最小数を計算することにより、Levenshtein Distanceアルゴリズムを使用して類似性を判断することで比較できます。

中間表現、またはおそらくレーベンシュタイン距離のコーディングスキームがあるかどうかを知りたいです。2つのフレーズ間で使用するのではなく、文字インデックスが比較に影響を与えないように、単一のフレーズに適用されるコーディングのみ。

Bでは、Aと比較して 'q'が欠落しています。通常の文字列比較は、単一の文字オフセットのために、一致'The 'して失敗し'uick brown fox...'ます。レーベンシュタイン距離を使用して、より寛容な比較のために元のフレーズAと比較できますが、私の場合、2つのフレーズはなく、1つだけです。

だから、私は情報のパケットで文を明確にコーディングするいくつかの方法を探しています、ローカルの順序などを維持する小さな真実のアトム(文字ごとに1つのパケットを考えているのですか?)間違っています。それ以降の文字には影響しません。

一意のフレーズはそれぞれ、唯一の一意のエンコード/中間表現であるSet A'とにマップする必要がありB'ます。AとBのレーベンシュタイン距離の計算は、セットの共通部分の計算と同じになりますA' = B'

あるいは、この問題に解決策がない場合(そしてこれが確かに研究の盛んな領域にマップされている場合、私は驚かないでしょう)、その解決できないことについての説得力のある議論/証拠です。


2
何か足りないのかもしれませんが、ブロックエラー修正コードが必要なようです。en.wikipedia.org/wiki/Block_code
Sハンツマン

確かにそれは球場にあるようですが、私はそれをここでどのように適用するのかわかりません。
Jason Kleban


コンテキストについては、通常は生体認証測定に適用されるファジーボールトの概念をパスフレーズに適用したいと思います。これは、一連の測定値ではなく、テキスト文字列に関する一連の不可分な真理です。
Jason Kleban

これについてもっと考える-私はこれを解決するためにエラー修正コードの原則を適用する方法を考えるのに苦労しています。その理由は、パスフレーズは任意であり、ユーザーが選択するのではなく、指示されるためです。しかし、それはいくつかのそれほど明白ではない方法で適用できますか?
Jason Kleban

回答:


14

実際、この距離には編集距離に関するいくつかの研究があり、いくつかの肯定的な結果といくつかの否定的な結果があります。(質問を正確に理解していない可能性があるので、わかっている質問に答えようと思います。)

1

  • Ω(logn)n

  • 2O(lognloglogn)

n

確かにこの流れにはもっと多くの文献がありますが、これがあなたの意図したものに近い場合は、最初にお知らせください。


あなたは生体情報の編集距離を使用している場合は、<a href=" arxiv.org/abs/cs.CR/0602007">を見てみたいことがあります言及するのを忘れ、この Dodis、オストロフスキー、Reyzinの紙を、そしてスミス</a>。
Alex Andoni、

それは実際には生体認証情報のためではありません。Fuzzy Vaultsがバイオメトリクスに機能するかもしれないが、文字列のような「より単純な」何かには使用できなかったのは不思議です。
Jason Kleban

あなたの答えは素晴らしいです、ありがとう。それについて考えさせて研究してみましょう...
Jason Kleban

はい、あなたの説明は適切です-彼らは正しいと感じています。+50!好奇心から、私の意図するアプリケーションは、元の質問とコメントを通じて明確ですか?
Jason Kleban

こんにちはアレックス、サイトにバグがあると思います。私はあなたに完全な50ポイントを与えました、しかし私は答えが自動選択されたというメッセージを受け取ります-あなたに25だけを与えます。それについて申し訳ありません。
Jason Kleban、

5

発生する可能性のある唯一の事柄が文字の消失である場合、私はあなたが最も長い共通のサブシーケンス問題を解決する必要があるだけだと思います。(サブシーケンスはサブストリングの一般化です。開始および/または終了だけでなく、より大きなシーケンスからマテリアルが削除されたサブシーケンスに複数の場所が存在する可能性があります。)

それ以上に、このメトリックのリストを見ましたか?

私はあなたの問題の文を誤解しているかもしれませんが、エラーが発生する方法(削除、転置など)を正確に定義し、サフィックスツリーを構築すると、支払い後にかなり高速なアルゴリズムを使用できるようになるはずですサフィックスツリーを構築するためのメモリと前処理のコスト


これをありがとう!あなたは私に考慮すべきいくつかの新しいことを示しました。
Jason Kleban

エラーは挿入、削除として発生する可能性があります。入れ替えとスワップはいいですが、基本的な挿入と削除の組み合わせです。
Jason Kleban

1

これは単なる考えであり、解決策ではありませんが、コメントするには長すぎます。

あなたのセット/表現は文字列のアルファベットの建物ですか?
例(Aの場合):


1. Start with the empty string (^$) 
2. Insert a between 1st ^ and 1st $ (now: ^a$)
3. Insert b between 1st ^ and 1st a (now: ^ba$) 
4. Insert c between 1st ^ and 1st b (now: ^cba$) 
5. Insert d between 1st b and 1st a (now: ^cbda$) 
6. Insert d between 1st a and 1st ^ (now: ^cbdad$) 

等々...

あなたの表現はあなたが文字列を構築するためにとったステップです(アルファベット順):

要素{a、{1、^}、{1、$}}はステップ2を表し、{d、{1、b}、{1、a}}は5番目のステップを表します。

いずれの場合もこれをアルファベット順に行うと、何か使えるものがあるかもしれません。

補足的な考え:各文字「abcdd」(最初の4つ)の十分な数のコピーから始め、次に、転置を追跡して文字列を作成します。現在、漠然と順列理論に移行しています。

[ところで、それは「ジャンプ」であり、「ジャンプ」ではありません。それ以外は「ジャンプ」はありません-はい、私はあなたがそれがパングラムであるとは言ったことがないことを理解しています]


まず、面白いアイデア。...そして「ジャンプ」修正に感謝-私はそれに応じて投稿を変更しました。
Jason Kleban

ソリューションには「5番目のステップ」はあり得ないと思います。順序は関係ありません-パケットは順序付けまたは参照で互いに強くリンクできません-1つのパケットが間違っている/欠落している場合はどうなりますか?
Jason Kleban

0

あなたの簡単なことがうまくいくように思えます。各パケットには、位置と文字が含まれています。

The = <1, T>, <2, h>, <3, e>

次に、Aの最初のペアをBの最初のペアと比較します。これにより、レーベンシュタインが表示されます。


しかし、文字列の最初の文字が欠落している場合、その後のペアリングはすべて1だけずれます。[B]で「q」を削除すると、[B]の<u、5>!= [A] 's <u、6>、[B]の<i、6>!= [A ]の<i、7>
Jason Kleban

別の言い方をすれば、私があなたの提案を正しく理解していれば、それは文字列/シーケンスの同等性と同等です。
Jason Kleban

@ uosɐſ:送信者は正しい順序を知っていますよね?彼らは<u、6>を送ります。受信者は5番目のパケットとしてそれを受け取るかもしれませんが、彼らがまったくそれを受け取った場合、彼らはそれが6番目の文字であることを知っています。
Xodarap

1
アイデアは、各文字列sのセットT(s)を考え出し、次にT(s1)とT(s2)をセットとして比較して、たとえばT(s1)-T(s2)を見つけることです。その差の要素の数は距離です。「送信者」と「受信者」はありません
バリーカーター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.