Một lời giải thích lay cho tìm kiếm phổ quát là gì?


13

Tôi đang đọc một cuốn sách về một chủ đề khoa học máy tính nhưng thiếu một số nền tảng tiên quyết. Thông thường khi tôi gặp phải các thuật ngữ tôi không hiểu tôi chỉ đơn giản là tìm kiếm chúng, nhưng đối với Tìm kiếm chung, tôi chỉ đơn giản là không thể tìm thấy lời giải thích phù hợp cho người đọc mà không có nền tảng về thống kê / khoa học máy tính.

Tôi đã đọc bài viết này về Tìm kiếm phổ quát từ Scholarpedia , dường như đề cập đến chủ đề này. Tôi đánh giá cao lời giải thích cho ý nghĩa của Tìm kiếm chung (hoặc Tìm kiếm Levin ) nghĩa là gì.

Câu trả lời:


15

Hãy nghĩ về nó như thế này. Bạn có một vấn đề, với đầu vào x và bạn biết cách xác minh giải pháp nếu bạn đã tìm thấy một giải pháp (như nghịch đảo của ma trận hoặc bất cứ điều gì bạn muốn tưởng tượng).

Bây giờ, hãy sử dụng ngôn ngữ lập trình yêu thích của bạn (giả sử Python) và tạo mọi chương trình Python duy nhất bao gồm tối đa 10 ký tự! Sau đó, bạn chạy tất cả các chương trình với đầu vào của mình trong mỗi 10 giây, mỗi chương trình trên đầu vào . Nếu không ai trong số họ đưa ra câu trả lời, bạn sẽ chuyển sang 11. Chạy mỗi chương trình có tối đa 11 ký tự (dĩ nhiên bao gồm cả những ký tự bạn đã thử) trong 11 giây, trên đầu vào x . Nếu không ai trong số họ đưa ra câu trả lời chính xác, bạn tiếp tục đến 12 và cứ thế.xx

Chính thức hơn, trong lần lặp , bạn chạy tất cả các chương trình có độ dài tối đa i (rất nhiều, nhưng tất nhiên là theo cấp số nhân trong i ), mỗi lần trong i giây (hoặc các bước).iiii

Pss Pi=max{|P|,s}sP


3

Chỉ cần thêm vào những gì Pål GD đã nói, hãy nhớ rằng bạn đang chạy tất cả các chương trình có độ dài từ trở xuống và để chúng chạy trong tối đa i giây. Vì vậy, có thể có một chương trình nhận được câu trả lời đúng dài 100 ký tự, nhưng phải mất 120 giây để chạy. Gọi đó là chương trình P . Trên i = 100, bạn sẽ kiểm tra chương trình này, nhưng mất quá nhiều thời gian để chạy nên bạn loại bỏ nó. Sau khi kiểm tra tất cả các chương trình có độ dài 100, bạn thấy không ai trong số họ đưa ra câu trả lời đúng, vì vậy bạn hãy thử các chương trình có độ dài 101 và tất cả các chương trình bạn đã thử trước đó . Vì vậy, bạn thử lại PTôiTôiPTôi= =100101 P, chương trình mà (chúng tôi biết) sẽ cung cấp cho bạn câu trả lời đúng, nhưng nó vẫn mất quá nhiều thời gian để bạn loại bỏ nó. Chúng tôi tiếp tục quá trình đó cho đến khi chúng tôi đạt . Sau đó, chúng tôi thử tất cả các chương trình có độ dài 120 và khi chúng tôi đến P, chúng tôi cho phép nó chạy đủ lâu để nó đưa ra câu trả lời đúng. Sau đó, chúng tôi dừng lại - chúng tôi đã tìm thấy thuật toán chúng tôi muốn. Số lần lặp mà chúng tôi bật là i = 120 , vì mặc dù thời lượng của chương trình P ít hơn (chúng tôi sẽ viết | P | = 100 ), chúng tôi phải đợi cho đến khi thời lượng mất là 120 giây ( s = 120Tôi= =120120PTôi= =120P|P|= =100S= =120). Vậy đơn giản có nghĩa là tối đa độ dài của chương trình P và lượng thời gian cần thiết để chạy s .Tôi= =mmộtx{|P|,S}PS

Một cách khác để nhìn vào nó là dành cho một chương trình mà có s giây để tạo ra câu trả lời đúng, chúng ta phải kiểm tra ít nhất | P | lặp đi lặp lại và ít nhất lặp lại trước khi chúng ta tìm thấy nó, bởi vì nếu tôi < | P | sau đó chúng tôi đã không kiểm tra chương trình nào, và nếu i < s sau đó chúng tôi đã không để cho chương trình chạy đủ lâu.PS |P| STôi<|P|Tôi<S

Lưu ý rằng phương pháp tìm kiếm này chỉ được đảm bảo để giúp bạn có câu trả lời nếu có; nó không được đảm bảo để tìm câu trả lời ngắn nhất hoặc nhanh nhất. Lý do cho điều đó nên rõ ràng nếu bạn cho rằng quy trình chấm dứt ngay khi nó tìm thấy một chương trình đưa ra câu trả lời đúng.

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.