Что такое непрофессиональное объяснение универсального поиска?

13

Я читаю книгу на тему информатики, но мне не хватает необходимых предпосылок. Обычно, когда я сталкиваюсь с терминами, я не понимаю, я просто ищу их, но для Универсального поиска я просто не смог найти объяснения, подходящего для читателя без опыта в области статистики / информатики.

Я читал эту статью об Универсальном Поиске из Академии , которая, кажется, охватывает эту тему. Я был бы признателен за объяснение того, что означает универсальный поиск (или поиск Левина ).

шест для отталкивания
источник

Ответы:

15

Думайте об этом так. У вас есть проблема с вводом и вы знаете, как проверить решение, если вы когда-либо нашли его (например, обратная матрица или все, что вы хотели бы представить).x

Теперь возьмите ваш любимый язык программирования (скажем, Python) и создайте каждую отдельную программу на Python, содержащую не более 10 символов! Затем вы запускаете все эти программы с вашим вводом по 10 секунд каждая, каждая на входе . Если ни один из них не даст вам ответа, вы пройдете весь путь до 11. Запустите каждую программу длиной не более 11 символов (включая те, которые вы уже пробовали), по 11 секунд, на входе x . Если ни один из них не даст вам правильный ответ, вы продолжаете 12 и так далее.xx

Более формально, в итерации вы запускаете все программы длиной не более i (конечное число, но, конечно, экспоненциальное в i ), каждая из которых занимает i секунд (или шагов).iiii

Существует программа, скажем , , которая дает правильный выход в ы секунд. Когда вы пришли к итерации, я = max { | P | , s } , эта программа будет запущена в течение не менее s секунд, и вы выведете как P, так и решение.Psi=max{|P|,s}sP

Пол Г.Д.
источник
3

Просто добавьте к тому, что сказал Пол Г.Д., помните, что вы запускаете все программы длиной или меньше и позволяете им работать не более i секунд. Возможно, есть программа, которая получает правильный ответ длиной 100 символов, но для ее запуска требуется 120 секунд. Вызов этой программы P . На i = 100 вы проверите эту программу, но она слишком долго запускается, поэтому вы ее отбрасываете. После проверки всех программ длины 100 вы обнаружите, что ни одна из них не дает правильного ответа, поэтому вы пробуете программы длины 101 и все программы, которые вы пробовали ранее . Таким образом, вы повторите попытку PiiPi=100101 Pпрограмма, которая (мы знаем) даст вам правильный ответ, но она все еще занимает слишком много времени, поэтому вы отказываетесь от нее. Мы продолжаем этот процесс, пока не достигнем . Затем мы пробуем все программы длиной 120 , и когда мы добираемся до P, мы даем ему поработать достаточно долго, чтобы дать правильный ответ. Затем мы останавливаемся - мы нашли алгоритм, который хотели. Итерация, на которой мы работаем, - это i = 120 , потому что, хотя длина программы P меньше (мы бы написали | P | = 100 ), нам пришлось подождать, пока количество времени, которое потребовалось, составило 120 секунд ( s = 120i=120120Pi=120P|P|=100s=120). Таким образом , просто означает максимальную длину программы P и количество времени, которое потребовалось для запуска s .i=max{|P|,s}Ps

Ps |P| si<|P|i<s

Обратите внимание, что этот метод поиска гарантированно даст вам ответ, только если он есть; не гарантируется найти самый короткий или быстрый ответ. Причина этого должна быть очевидна, если учесть, что процесс завершается, как только он находит программу, которая дает правильный ответ.

Том Поттс
источник