Нахождение самой короткой программы, которая выводит некоторую строку (последовательность, функцию и т. Д.), Эквивалентно нахождению ее колмогоровской сложности , которая неразрешима.
Если «невозможно» не является удовлетворительным ответом, вы должны ограничить свою проблему. Во всех соответствующим образом ограниченных случаях (полиномы, рациональные функции, линейные повторения) найти оптимальный алгоритм будет легко, если вы понимаете, что делаете. Примеры:
В случае полиномиальных последовательностей часто помогает рассмотреть последовательность b n = a n + 1 -a n ; это уменьшает квадратичное отношение к линейному, а линейное - к постоянной последовательности и т. д. Но серебряной пули нет. Вы можете построить некоторую эвристику (например, Mathematica имеет FindSequenceFunction - проверьте эту страницу, чтобы получить представление о том, насколько сложной это может быть), используя генетические алгоритмы, случайные догадки, проверяя множество встроенных последовательностей и их составов и т. Д. , Несмотря ни на что, любая такая программа - в теории - бесконечно далека от совершенства из-за неразрешимости колмогоровской сложности. На практике вы можете получить удовлетворительные результаты, но это требует много человеко-лет.
См. Также еще один вопрос SO . Вы также можете внедрить некоторую оболочку для OEIS в своем приложении.
Поля:
В основном, пределы того, что можно сделать, описаны в
теория сложности - описание того, какие проблемы могут быть решены «быстро», например, поиск кратчайшего пути в графе, а что нет, например, воспроизведение обобщенных версий шашек (они завершены EXPTIME).
теория информации - описание того, сколько «информации» переносится случайной величиной. Например, возьмите монетку. Обычно для кодирования результата требуется 1 бит, а для кодирования n результатов - n битов (используется длинная последовательность 0-1). Предположим теперь, что у вас есть предвзятая монета, которая дает хвосты 90% времени. Затем можно найти другой способ описания n результатов, который в среднем дает гораздо более короткую последовательность. Количество бит на бросок, необходимое для оптимального кодирования (в этом случае меньше 1!), Называется entropy ; график в этой статье показывает, сколько информации переносится (1 бит для 1 / 2-1 / 2, меньше 1 для смещенной монеты, 0 бит, если монета приземляется всегда на одной стороне).
алгоритмическая теория информации - которая пытается объединить теорию сложности и теорию информации. Колмогоровская сложность относится сюда. Вы можете считать строку «случайной», если она имеет большую колмогоровскую сложность: aaaaaaaaaaaa не случайная строка, вероятно, f8a34olx. Таким образом, случайная строка несжимаема ( Что такое случайная последовательность Волчана - очень читаемое введение.). * * * * * * * * * * * * * * * книга алгоритмической теории информации . Цитата: «[...] мы строим уравнение, включающее только целые числа и сложение, умножение и возведение в степень со свойством, что если кто-то изменяет параметр и спрашивает, является ли число решений конечным или бесконечным, ответ на этот вопрос неотличим от результата независимых бросков честной монеты ". (другими словами, никакой алгоритм не может угадать этот результат с вероятностью> 1/2). Однако я не читал эту книгу, поэтому не могу оценить ее.
С теорией информации тесно связана теория кодирования, которая описывает коды, исправляющие ошибки. Пример результата: возможно закодировать от 4 до 7 битов, чтобы можно было обнаружить и исправить любую отдельную ошибку или обнаружить две ошибки ( Хэмминга (7,4) ).
«Положительной» стороной являются:
символьные алгоритмы для интерполяции Лагранжа и аппроксимации Паде являются частью компьютерной алгебры / символьных вычислений ; von zur Gathen, Герхард "Современная компьютерная алгебра" - хороший справочник.
сжатие данных - здесь вам лучше обратиться к кому-нибудь еще за ссылками:)