Đại diện trung gian / mã hóa cho khoảng cách Levenshtein


8

Các cụm từ:

Con cáo nâu nhanh nhẹn nhảy qua con chó lười [A]

Con cáo nâu uick nhảy lên con chó lười biếng [B]

có thể được so sánh bằng thuật toán Khoảng cách Levenshtein để xác định độ tương tự bằng cách tính số lượng bổ sung, xóa hoặc thay thế ký tự đơn tối thiểu là cần thiết để chuyển A thành B.

Tôi muốn biết liệu có một đại diện trung gian hay có thể là sơ đồ mã hóa cho Khoảng cách Levenshtein. Không được sử dụng giữa hai cụm từ, mà chỉ là một mã được áp dụng cho một cụm từ duy nhất sao cho chỉ số ký tự không ảnh hưởng đến sự so sánh.

Trong B, 'q' bị thiếu so với A. Một so sánh chuỗi bình thường sẽ khớp 'The 'và sau đó thất bại 'uick brown fox...'chỉ vì một ký tự đơn. Khoảng cách Levenshtein có thể được sử dụng để so sánh nó với cụm từ gốc A để so sánh dễ tha thứ hơn, nhưng trong trường hợp của tôi, tôi sẽ không có hai cụm từ, chỉ một cụm từ.

Vì vậy, tôi đang tìm cách mã hóa một cách rõ ràng một câu trong các gói thông tin, các nguyên tử nhỏ (tôi đang nghĩ một gói cho mỗi ký tự?) Duy trì trật tự cục bộ và vân vân, nhưng nếu một số gói là sai, nó không ảnh hưởng đến các nhân vật sau này.

Mỗi cụm từ duy nhất phải ánh xạ tới một và chỉ một biểu diễn mã hóa / trung gian duy nhất, Bộ A'B'. Tính toán khoảng cách Levenshtein của A và B sau đó sẽ giống như tính toán giao điểm của các tập hợp A' = B'.

Ngoài ra - nếu vấn đề này không có giải pháp (và điều này chắc chắn sẽ ánh xạ tới một khu vực nghiên cứu được thực hiện tốt, tôi sẽ không ngạc nhiên), một số lập luận / bằng chứng thuyết phục cho khả năng không thể giải quyết của nó.


2
Có thể tôi đang thiếu một cái gì đó, nhưng có vẻ như bạn muốn một mã sửa lỗi khối. vi.wikipedia.org/wiki/Block_code
S Huntsman

Chắc chắn có vẻ như đó là trong sân bóng, nhưng tôi không biết làm thế nào tôi áp dụng điều đó ở đây.
Jason Kleban


Đối với ngữ cảnh, tôi muốn áp dụng khái niệm về một vault mờ, thường được áp dụng cho các phép đo sinh trắc học, cho các cụm mật khẩu. Thay vì một tập hợp các phép đo, đây sẽ là một tập hợp các sự thật nguyên tử về một chuỗi văn bản.
Jason Kleban

Suy nghĩ thêm về điều này - Tôi gặp khó khăn khi nghĩ cách áp dụng các nguyên tắc của mã sửa lỗi để giải quyết vấn đề này. Lý do là các cụm mật khẩu là tùy ý và được lựa chọn bởi người dùng, không được ra lệnh. Nhưng có lẽ nó được áp dụng theo một cách ít rõ ràng hơn?
Jason Kleban

Câu trả lời:


14

Thực sự có một số nghiên cứu trong tĩnh mạch này cho khoảng cách chỉnh sửa với một số kết quả tích cực và tiêu cực. (Tôi có thể không hiểu chính xác câu hỏi, vì vậy tôi sẽ cố gắng trả lời những câu hỏi tôi biết để trả lời.)

1

  • Ω(logn)n

  • 2O(lognloglogn)

n

Chắc chắn có nhiều tài liệu hơn trong tĩnh mạch này, nhưng hãy cho tôi biết trước nếu đây là bất cứ nơi nào gần với những gì bạn muốn nói.


Quên đề cập đến: nếu bạn đang sử dụng khoảng cách chỉnh sửa cho thông tin sinh trắc học, bạn có thể muốn xem <a href=" arxiv.org/abs/cs.CR/0602007"> bài báo này của Dodis, Ostrovsky, Reyzin và Smith </a>.
Alex Andoni

Nó thực sự KHÔNG dành cho thông tin sinh trắc học. Tôi thấy khó hiểu rằng Fuzzy Vaults có thể hoạt động cho sinh trắc học, nhưng không thể được sử dụng cho một cái gì đó "đơn giản" hơn như một chuỗi văn bản.
Jason Kleban

Câu trả lời của bạn rất tuyệt, cảm ơn. Hãy để tôi suy nghĩ về nó và nghiên cứu ...
Jason Kleban

Vâng, mô tả của bạn là đúng - họ cảm thấy đúng. +50! Vì tò mò, ứng dụng dự định của tôi có rõ ràng này thông qua câu hỏi ban đầu và ý kiến ​​của chúng tôi không?
Jason Kleban

Xin chào Alex, tôi nghĩ rằng trang web có một lỗi. Tôi đã trao cho bạn đủ 50 điểm, nhưng tôi nhận được một thông báo rằng câu trả lời đã được tự động chọn - chỉ cho bạn 25. Xin lỗi về điều đó.
Jason Kleban

5

Nếu điều duy nhất có thể xảy ra là các ký tự biến mất, tôi nghĩ bạn chỉ cần giải quyết vấn đề tiếp theo phổ biến dài nhất . (Phần tiếp theo là sự khái quát hóa của một chuỗi con: có thể có nhiều vị trí trong phần tiếp theo nơi vật liệu được xóa khỏi chuỗi lớn hơn, không chỉ ở đầu và / hoặc kết thúc.)

Ngoài ra, bạn đã thấy danh sách các số liệu này ?

Tôi có thể hiểu sai về tuyên bố vấn đề của bạn, nhưng dường như với tôi rằng nếu bạn xác định chính xác cách xảy ra lỗi (xóa, hoán vị, v.v.) và sau đó xây dựng một cây hậu tố, thì có thể có một thuật toán khá nhanh, sau khi trả tiền bộ nhớ và chi phí tiền xử lý xây dựng cây hậu tố.


Cám ơn vì cái này! Bạn chỉ cho tôi một số điều mới để xem xét.
Jason Kleban

Lỗi có thể xảy ra như chèn, xóa. Chuyển vị và hoán đổi sẽ tốt, nhưng là các tác phẩm của các phần chèn và xóa cơ bản - trong trường hợp giúp dễ dàng thỏa mãn hơn.
Jason Kleban

1

Đây chỉ là một suy nghĩ, không phải là một giải pháp, nhưng quá dài cho một nhận xét.

Tập hợp / biểu diễn của bạn có thể là một tòa nhà chữ cái của chuỗi không?
Ví dụ (cho 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$) 

và như thế...

Đại diện của bạn sẽ là các bước bạn đã thực hiện để xây dựng chuỗi (theo thứ tự chữ cái):

Phần tử {a, {1, ^}, {1, $}} đại diện cho bước 2, trong khi {d, {1, b}, {1, a}} đại diện cho bước thứ 5.

Với điều kiện bạn làm điều này theo thứ tự abc trong từng trường hợp, bạn có thể có thứ gì đó bạn có thể sử dụng.

Một suy nghĩ bổ sung: bắt đầu với đủ bản sao của mỗi chữ cái "abcdd" (cho 4 đầu tiên) và sau đó theo dõi các chuyển vị của bạn để xây dựng chuỗi. Bây giờ chúng ta đang mơ hồ chuyển sang lý thuyết hoán vị.

[BTW, đó là "nhảy", không phải "nhảy", nếu không thì không có - vâng, tôi nhận ra bạn không bao giờ nói đó là một con tê tê]


Trước hết, ý tưởng thú vị. ... Và cảm ơn vì đã sửa lỗi 'Nhảy' - Tôi đã thay đổi bài đăng tương ứng.
Jason Kleban

Tôi nghĩ rằng một giải pháp không thể có "bước thứ 5". Thứ tự không thể quan trọng - các gói không thể được liên kết chặt chẽ với nhau trong thứ tự hoặc tham chiếu - nếu một gói bị sai / thiếu thì sao?
Jason Kleban

0

Nghe có vẻ như điều đơn giản của bạn nên làm việc. Mỗi gói chứa vị trí và ký tự, ví dụ

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

Sau đó, bạn so sánh cặp A đầu tiên với cặp B đầu tiên, v.v ... Điều này sẽ cung cấp cho bạn Levenshtein.


Nhưng điều gì sẽ xảy ra nếu một ký tự đầu tiên trong chuỗi bị thiếu, thì tất cả các cặp sau này sẽ bị tắt đi 1, phải không? Nếu chúng tôi lấy ra 'q' trong [B], thì <u, 5>! = [A] '<u, 6>, [B]' <i, 6>! = [A] ] <i, 7>
Jason Kleban

Nói cách khác, nếu tôi hiểu chính xác đề xuất của bạn thì nó tương đương với đẳng thức chuỗi / chuỗi.
Jason Kleban

@ uosɐſ: người gửi sẽ biết thứ tự đúng, phải không? Họ sẽ gửi <u, 6>; người nhận có thể lấy nó làm gói thứ năm, nhưng nếu họ nhận được thì họ sẽ biết đó là lá thư thứ sáu.
Xodarap

1
Ý tưởng là bạn đưa ra một tập hợp T (s) cho mỗi chuỗi s, và sau đó chỉ so sánh T (s1) và T (s2) là các tập hợp để tìm T (s1) -T (s2), và số phần tử trong sự khác biệt đó là khoảng cách. Không có "người gửi" và "người nhận"
barrycarter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.