Задать вопрос

Найти закономерность между числами?

Есть исходные числа, 5 штук, на их основании формируется шестое число. Других переменных, кроме 5 чисел — нет, но могут быть константы.


Действия между 5 числами не известны, алгоритм не доступен. Действия могут быть любого характера, не только математические, а, например, по-битный сдвиг, что-то еще хитрее и т.п.


Примеров 5 и результирующим чисел имеем больше кол-во. Т.е. алгоритм может их выдавать до бесконечности.


Можно ли без реверс-инжиниринга существующего кода определить алгоритм, зависимости?


Хотя бы в теории хочу понять, возможно ли решение этой задачи?
  • Вопрос задан
  • 50884 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 12
LeoCcoder
@LeoCcoder
невозможно решить в вашей постановки задачи.

Вы говорите, что есть 5 чисел, то есть нам известены x1, x2, x3, x4, x5. Есть незвестная произвольная функция F, которая вычисляет x6 = F(x1, x2, x3, x4, x5).

Задача: Угадайте F и значение x6.

xDDD
Ответ написан
sergeypid
@sergeypid
Это задача для генетического алгоритма. Описано и есть исходный код в книге «Программируем коллективный разум», поищите. Краткая суть алгоритма: математические операции представляются в виде дерева. Например, А + Б это дерево в корне операция сложения, два листа дерева А и Б. Операция А * 2 + Б это дерево в корне +, слева (левый операнд) — Умножение, справа Б. Узел «умножение» опять делится на две ветви — слева А справа 2. Ну в общем вы поняли. Генерируем случайным образом популяцию и запускаем генетический алгоритм. Виды мутаций — копирование и перестановка поддеревьев. Функция выживаемости — насколько полученное математическое выражение правильно находит шестой член для каждой из ваших обучающих последовательностей.

Я пробовал этот исходный код на простых примерах, типа угадать формулы такого вида «А*4 + Б*9» — довольно быстро находится решение на обучающих выборках по 100 примеров. Если у вас достаточное количество обучающих примеров, есть шанс, что найдет решение в вашем случае. Напишите пож. результаты если сделаете.
Ответ написан
Комментировать
Может быть вам поможет аппроксимация?
Правда перед перестановками цифр в результатирующем числе она бессильна))
Ответ написан
Комментировать
ixSci
@ixSci
Ну в теории всё возможно. У вас есть хорошая база: источник — результат. Поэтому вооружившись криптоаналитиком эту задачу можно решить, в теории. На практике же можно придумать очень сложный алгоритм, который врядли можно будет разрешить или можно, но с привлечением таких средств, что задача того не стоит.

К тому же, если функция для вас черный ящик с чего Вы взяли, что там не используется x7 равный фазе Юпитера в данный, конкретный, момент времени.

Такие задачи, всё же, проще решать реверсом, если, конечно там не угадывается некий шаблон сразу же.
Ответ написан
SLY_G
@SLY_G
журналист, переводчик, программист, стартапщик
Ну если бы ещё задачу сформулировать попонятнее.
«Других переменных, кроме 5 чисел — нет, но могут быть константы.» — а константы не являются числами?

«Действия могут быть любого характера, не только математические» — я не представляю себе не-математические действия над числами. Число — это математическая абстракция. Побитный сдвиг — это умножение на степень 2, к примеру,…

Разве что, как в той детской задачке, нематематические действия над числами — это когда восьмёрка соответствует двойке, потому что в восьмёрке два кружочка. Но если это такой алгоритм, тогда конечно вряд ли его можно подобрать…

Если вы из головы задачу придумали, нужно её сформулировать строже.
Ответ написан
@mr_idiot
Можно попытаться угадать. Точно определить невозможно.
Ответ написан
Комментировать
0leGG
@0leGG
Ну как минимум для любых x1..x5 можно строить для любого возможного x6 полином 5-ой степени, проходящий через все эти точки, так что предсказать что-либо без дополнительных данных тут не представляется возможным.
Ответ написан
FanKiLL
@FanKiLL
Вы можете предоставить хотябы 1 ряд чисел, а лучше ряда 3, в теории можно, если 6'ое число не рендомно, а выполнено по какому то алгоритму, то его можно в теории вычислить.

Ещё эти 5 чисел вы можете задавать сами? Или они выдаются вместе с уже 6 числом?
Ответ написан
Комментировать
nickme
@nickme
Как мне кажется, к заданным пяти числам можно добавить любое шестое — обязательно найдется закономерность (и не одна, а бесконечно много)… Например, рассмотрим числа 1, 2, 3, 4, 5:
  • x6=1, т. к. 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, ...
  • x6=2, т. к. 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, ...
  • x6=3, т. к. 1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 5, 6, 7, 8, 9, ...
  • x6=4, т. к. 1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3...
  • x6=5, т. к. 1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, ...

Ну и т.д. Другими словами, знание первых n членов числовой последовательности не определяет всех ее остальных членов.

Другое дело, если речь идет о стандратных последовательностях. Например, есть такой онлайн словарь последовательностей, где можно ввести первых несколько чисел и система выдаст какие из известных последовательностей начинаются с таких чисел.
Ответ написан
GavriKos
@GavriKos
Без известных вариантов действий между числами — нет. Но если можно ограничить их количество — можно попробовать подобрать функцию ген. алгоритмом. Т.е. задача вида «даны 5 чисел, расставте между ними арифметические операции так, чтобы получилось шестое число» ген. алгоритмом разрешима вполне легко.
Ответ написан
Комментировать
@Vampiro
Если результатом является число, и разброс этих пяти входящих достаточно мал, я бы строил для начала таблицы такого вида:
0+0-0+0-0=0
1+0-0+0-0=1
2+0-0+0-0=2
.....
0+1-0+0-0=1
.....
0+0-1+0-0=-1
.......


Понятно, что арифметические операции вам неведомы, но сама такая таблица, в которой будут итоговые результаты при вариации одного параметра, оставляя другие неизменными сможет вас натолкнуть на мысли. Без таких данных я слабо представляю что можно делать кроме аппроксимации полиномами, да и то придется набирать приличное количество точек.
Ответ написан
Комментировать
Petrify
@Petrify
При бесконечной выдаче алгоритмом наборов 5:1 можно свести задачу к 1:1, т.е. найти много наборов, где изменяется только одна переменная, остальные являются константами. По сути получаем F(x)=y, где х и у известны. обратную функцию можно получить разложением в ряд. Естественно функцию можно восстановить только с определенной точностью.
Имхо задача в теории решаемая.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы