Thuật toán để đảo ngược một chức năng phỏng đoán.


8

Có tồn tại một thuật toán tổng quát để tìm hàm nghịch đảo của hàm sinh học tùy ý không?

  • Để thuật toán này có ích, cuối cùng nó phải dừng lại một khi câu trả lời đúng được tìm thấy.
  • Ngoài yêu cầu là nó phải tìm ra giải pháp cuối cùng, không có hạn chế về thời gian cần thiết để tìm hoặc chạy hàm nghịch đảo (với ý nghĩ đó, một cái gì đó tốt hơn so với đoán và kiểm tra bruteforce, sẽ thú vị hơn).

Ví dụ, nếu tồn tại một thuật toán tổng quát như vậy, nó có thể giải một thuật toán giải nén cho thuật toán nén không mất dữ liệu.

BIÊN TẬP:

Tôi thực sự thích các giả định của Evgenij Thorstensen khi họ tóm tắt câu hỏi của tôi khá tốt.

Giả định

  • Các hàm tính toán có thể tính toán trên một bảng chữ cái cố định (giả sử {0, 1})
  • Được đại diện bởi một máy Turing xác định (DTM) tính toán nó
  • Thuật toán đề xuất sẽ có thể giải quyết một DTM sẽ đảo ngược đầu ra của chức năng phỏng đoán ban đầu.

Một cách khác để giải thích nó:

Cho: Hàm Bijective Fánh xạ X từ miền A lên Y từ miền B.

Thuật toán được đề xuất có thể giải quyết hàm Bijective Gánh xạ Y từ miền B sang X từ miền A, như vậy G(F(X))=XF * G = Iở đâu Ilà hàm nhận dạng.


hình thức nào là đầu vào của thuật toán?
Lev Reyzin

Làm thế nào hình thức của đầu vào có thể thay đổi sự tồn tại của một giải pháp?
Kendall Hopkins

1
Hoán vị một chiều được cho là tồn tại (ví dụ, RSA). Tôi cho rằng bạn đang tìm kiếm kết quả tiêu cực?
arnab

2
như một lưu ý phụ, nếu bạn định downvote, sẽ rất hữu ích để giải thích lý do
Suresh Venkat

2
Tôi chỉ đánh giá thấp vì câu hỏi này không đủ chỉ định để cung cấp một câu trả lời cụ thể. Quá mơ hồ. Để cải thiện: đầu vào chính xác của thuật toán là gì và đầu ra chính xác của thuật toán là gì? Mặt khác, chúng tôi chỉ đoán những gì bạn có thể có nghĩa.
Aaron Sterling

Câu trả lời:


7

Đã có những bài báo về việc tự động chuyển đổi thuật toán cho các hàm phỏng đoán thành thuật toán cho hàm nghịch đảo; giấy hội nghị đầu tiên của riêng tôi là một trong những như vậy. Nhưng lớp các thuật toán có thể được đảo ngược theo cách này bị hạn chế nghiêm trọng, như các câu trả lời khác đã đề xuất.


4

Trong một miền hoàn toàn không có cấu trúc, điều tốt nhất bạn có thể làm là tìm kiếm vũ lực, mất thời gian tuyến tính theo kích thước của miền. Tuy nhiên, nếu miền bạn đang nói đến là chuỗi n-bit, thì đó là số mũ theo n.

(Lưu ý rằng, nếu có một biến tần chức năng tổng quát đầy đủ hiệu quả, thì việc đảo ngược hàm nhân số nguyên sẽ cung cấp cho bạn một thuật toán bao thanh toán hiệu quả.)


Nó sẽ không phải là hiệu quả. Chỉ vì một thuật toán để đảo ngược bất kỳ chức năng phỏng đoán cụ thể nào, không nói bất cứ điều gì về nghịch đảo của chức năng đó. Ví dụ, nén / giải nén.
Kendall Hopkins

Tôi cũng nghĩ rằng bạn có thể có vấn đề với vấn đề tạm dừng nếu bạn chỉ đơn giản là tàn bạo đưa ra giải pháp. Vì mỗi lần thử sẽ phải được kiểm tra tính chính xác (chạy). Điều gì nếu một trong những lực lượng vũ phu cố gắng vô hạn lặp? Điều gì xảy ra nếu giải pháp mất thời gian vô hạn để chạy?
Kendall Hopkins

Bạn có thể sử dụng khớp nối để tránh vấn đề vòng lặp vô hạn đó. vi.wikipedia.org/wiki/Dovetailing_%28computer_science%29
Aaron Sterling

@Aaron Giải pháp rất thú vị cho vòng lặp vô hạn. Tôi tin rằng nó vẫn không giải quyết được vấn đề nếu giải pháp chính xác sẽ mất thời gian vô hạn để chạy (mặc dù tính hữu ích của giải pháp đó là đáng nghi ngờ).
Kendall Hopkins

1
Phép nhân số nguyên không phải là phép tính để ghi chú của bạn không chính thức ở đây.
Alexandru

3

Như @arnab đã chỉ ra trong các bình luận, hoán vị một chiều là một nguyên thủy mật mã. Nếu bạn muốn đảo ngược các chức năng tùy ý một cách hiệu quả, bạn sẽ có các rào cản về mật mã để vượt qua (ngoài bao thanh toán).


Tôi khá chắc chắn rằng một chức năng mã hóa "tổng quát" không phải là Bijective bởi vì sử dụng các khóa / dữ liệu khác nhau mà bạn có thể kết thúc với cùng một dữ liệu (không thể, nhưng vẫn có thể). Nếu bạn đã cung cấp một chức năng mã hóa với khóa đặt trước, thuật toán tổng quát sẽ chỉ phải giải một thuật toán có thể đánh bại khóa riêng (bao thanh toán công khai), nó sẽ không phải tự đánh bại.
Kendall Hopkins

RE "thuật toán tổng quát sẽ chỉ phải giải một thuật toán có thể đánh bại khóa riêng" - tôi không chắc là tôi hiểu bạn. Tất cả những thứ khác, làm thế nào là vũ phu buộc một chìa khóa hiệu quả?
Lev Reyzin

Câu hỏi chỉ là yêu cầu một thuật toán tìm ra một thuật toán để giải quyết vấn đề, nó không phải giải quyết nó, và giải pháp đảo ngược cũng như giải pháp tìm kiếm đảo ngược có BẤT K time thời gian nào đối với chúng.
Kendall Hopkins

3

Như nhiều người trên trang này đã chỉ ra rằng giải pháp nói chung có thể khó hiểu.

Tất cả không bị mất nếu bạn quan tâm đến lập trình khả nghịch. Một cách khác để tìm nghịch đảo cho một hàm nhất định, là xây dựng hàm của bạn từ thành phần của các hàm khả nghịch, trong trường hợp tìm nghịch đảo là không đáng kể.

Một ví dụ về phương pháp này (sử dụng Haskell) được giải thích trong bài viết này http://www.cs.ru.nl/A.vanWeelden/bi-arrows/

Vì vậy, tôi đã sử dụng Biarrow để giúp tôi chỉ viết một hướng của thuật toán nén và nhận hướng khác (giải nén) miễn phí (có thể là từ sai, họ rất khó sử dụng, vì thiếu hỗ trợ ngôn ngữ) .


2

Đây là một thuật toán handw lượn sóng theo một số giả định mạnh mẽ.

Giả định

  • Các hàm tính toán có thể tính toán trên một bảng chữ cái cố định (giả sử {0, 1})
  • Được đại diện bởi một máy Turing xác định (DTM) tính toán nó và không phải là một cái gì đó "hơn" (xem bên dưới)
  • Nếu DTM đầu vào không tính toán chức năng phỏng đoán, chúng tôi không quan tâm điều gì xảy ra

Với các giả định này, chúng ta có thể xem DTM đầu vào và đảo ngược tất cả các chuyển đổi (trạng thái tạm dừng trở thành trạng thái bắt đầu, đọc trở thành văn bản và ngược lại, chúng ta đọc từ cuối, bên trái là phải, v.v.). Vì TM là xác định và hàm được tính là tính toán, nên kết quả cũng là TM và tính toán nghịch đảo.

Lưu ý rằng điều này sẽ không hoạt động cho bao thanh toán, bởi vì phép nhân không phải là tính từ. Phép nhân các số nguyên tố , nếu chúng ta bỏ qua thứ tự, nhưng một TM nhân số không tính "chỉ" hàm tính toán mà chúng ta muốn, thì nó tính "quá nhiều", do đó, giả định thứ hai của tôi (vâng, nó khá mạnh). Điều này gắn kết độc đáo với các ý kiến ​​về đại diện.


Tôi không chắc chắn bạn chỉ "đảo ngược" DTM theo mô tả mà bạn đã đưa ra. Điều đó sẽ làm việc cho một ngữ pháp thông thường nhưng không phải là DTM.
Kendall Hopkins

Điều này cũng nên được tuyến tính trong kích thước của đầu vào. Ah, làm thế nào hữu ích những giả định mạnh mẽ. Tại sao bạn nghĩ rằng nó sẽ không hoạt động cho DTM?
Evgenij Thorstensen

Một máy tiện không thể chạy ngược lại (đó là những gì tôi nghĩ bạn yêu cầu). Khi bạn ở trạng thái, biểu tượng và vị trí, bạn không biết sự kiện nào khiến bạn đến đó (vì bạn có thể kết thúc tại cùng một vị trí / trạng thái / biểu tượng nhiều hơn một cách).
Kendall Hopkins

Một DTM tùy ý không thể, nhưng tôi đã cố gắng sử dụng giả định rằng nó tính toán (thực sự, đại diện) cho một chức năng phỏng đoán. Nếu chúng ta ở trạng thái, ký hiệu và vị trí, trong số tất cả các con đường dẫn đến đây, chỉ có một người có thể viết những gì chúng ta đang đọc (vì chúng ta đang nói về nghịch đảo), nếu không thì đó không phải là đại diện của chức năng phỏng đoán. Tôi đoán giả định của tôi về tính sinh học chính xác là có một con đường duy nhất.
Evgenij Thorstensen

Tôi khá chắc chắn rằng điều đó không chính xác, hãy nghĩ về ví dụ mã hóa (với khóa pub cài sẵn) được đưa ra ở đây. Đây là một chức năng phỏng đoán, nhưng bạn không thể "đi ngược" về thuật toán mã hóa (loại điểm). Điều này khiến tôi kết luận rằng bạn không thể làm điều tương tự cho DTM phỏng đoán.
Kendall Hopkins
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.