Поиск шаблонов в этих числах - PullRequest
2 голосов
/ 22 октября 2009

Я сейчас работаю над проектом. В этом проекте у меня есть набор данных, который следует определенному алгоритму. Я должен найти образец.

 1    355138022809833    RUPQ730562P    247001    20578330    70175500    
 2    355138022809841    RUPQ730563D    247001    72754950    71957850    
 3    355138023475287    RVSQ831978E    247001    39374170    25101090    
 4    355138023475295    RVSQ831979F    247001    06260280    87190670    
 5    355138023475303    RVSQ831980L    247001    05025410    26440510    
 6    355138023475352    RVSQ831985Y    247001    96637700    48209200    
 7    355138023475360    RVSQ831986A    247001    27362620    70790740    
 8    355138023475378    RVSQ831987P    247001    16576600    30002180    
 9    355138023475386    RVSQ831988D    247001    74778020    98010580      
10    355138023475402    RVSQ831990M    247001    25716170    97946520    

Первый столбец - серийный номер. Следующие 3 столбца являются входными данными, которые будут предоставлены. Следующие 2 являются выводом алгоритма.

Так в основном

У меня есть 3 переменные x, y, z (2-й, 3-й, 4-й столбец вышеуказанных данных)

А

y1 = f1(x, y, z)

y2 = f2(x, y, z)

y1 - 5-й столбец вышеуказанных данных

y2 - шестой столбец вышеуказанных данных

У меня есть данные выше. Теперь мне нужно найти функции f1 и f2.

Какой процедуре мне следует следовать? Какие шаги необходимо предпринять?

РЕДАКТИРОВАТЬ 1 Кришна Кант Шарма

Я разместил этот вопрос, чтобы не запрашивать алгоритм ответа. Я просто спросил, какие шаги необходимо предпринять, чтобы решить подобные проблемы, когда у нас тоже есть алфавиты в переменных. По моему опыту, это первый случай, когда некоторая небольшая часть сообщества stackoverflow ведет себя как закрытые люди. Каков весь смысл стека overoverflow? Мы здесь, чтобы помочь друг другу понять и решить проблемы. Протянуть руку помощи, когда некоторым из нас это нужно. Так почему бы нам не перестать биться над какой-то технической чистотой (например, алфавиты не являются алфавитными символами) и решить главную проблему.

Дополнительные данные

11   355138023475436  RVSQ831993L   247001   07481830   49057990 
12   355138023475444  RVSQ831994T   247001   65090950   87729430 
13   355138023475451  RVSQ831995B   247001   06689330   60021180 
14   355138023475469  RVSQ831996K   247001   05784310   69836640 
15   355138023475477  RVSQ831997Z   247001   13157740   35850670 
16   355138023475485  RVSQ831998Y   247001   68658020   77311320 
17   355138023475501  RVSQ832000N   247001   01567780   26994970 
18   355138023475519  RVSQ832001E   247001   43775370   58120770 
19   355138023475527  RVSQ832002F   247001   42463550   55145190 
20   355138023475535  RVSQ832003R   247001   85766840   15491950    

Ответы [ 9 ]

5 голосов
/ 22 октября 2009

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

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

Если вы не добьетесь успеха в предыдущих моментах, у вас не будет другого выбора, кроме проб и ошибок. Вы все еще можете отсортировать некоторые функции или алгоритмы, посмотрев на входные данные (например, буквы сделают типичные математические функции бесполезными, поэтому, возможно, это некоторые хэш-функции.)

Чтобы пролить свет на ваши входные данные:

  • последний символ x (а также y) выглядит как символ контрольной суммы, поэтому, если вы ищете шаблоны, проверьте число / текст без последнего символа
  • буквы у могут быть каким-то распространенным сокращением валют, бизнес-процессов или чем-то еще
  • последние 0 в столбцах результата также могут быть символами контрольной суммы или в зависимости от столбца z (недостаточно данных, чтобы сообщить)

Я бы попробовал некоторые (общие) хеш-функции для некоторых комбинаций входных данных, которые дают результаты из 8 цифр, и искал результаты.

4 голосов
/ 22 октября 2009

Извините, но я думаю, что вы спрашиваете невозможно (с вычислительной точки зрения).

Система, из которой поступают эти данные, может, скажем,

SELECT Y1, Y2 FROM my_secret_data WHERE Col1 = x AND Col2 = Y and Col3 = Z;

Где my_secret_data содержит значения, которые не являются производными от вычислений.

Таким образом, если у вас нет базовой таблицы, вы никогда не сможете найти алгоритм, который ее решает (если у вас не было всех возможных комбинаций входов и выходов - что тогда означало бы восстановление всей таблицы)

Вне вычислений, я думаю, все, что вы можете сделать, это искать шаблоны и пытаться выяснить, что представляют собой значения ввода / вывода, и посмотреть, куда вас это приведет.

Изменить:

Не все потеряно в определенных ситуациях; все было бы иначе, если бы входы, выходы и любые функции, используемые алгоритмом, были непрерывными (учитывая, что входы являются буквенно-цифровыми, это не выглядит так)

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

3 голосов
/ 22 октября 2009

Посмотрите на строки 5 и 6. Все 3 входных параметра одинаковы, но выходные данные различны. Я не думаю, что это можно решить, имея только те данные, которые вы нам предоставили.

2 голосов
/ 22 октября 2009

Где вы получаете их и как они используются?

Если сущность, которая использует реальные f1 и f2, использует их для аутентификации, и они вообще интеллектуальны, f1 и f2 будут криптографически безопасными функциями, и у вас по существу нет шансов сломать их. Если это просто контрольные суммы, вы можете попробовать общие алгоритмы контрольных сумм. Я бы начал с Википедии.

Сколько данных вы можете получить? Можете ли вы получить значения f1 и f2 для произвольных входов или вы ограничены тем, что можете наблюдать? Если вы можете наблюдать значения для входных данных, различающихся одним символом, вы можете видеть, насколько сильно это изменение вносит. Если результаты в основном совпадают, это не криптографический хеш, и у вас больше шансов.

Насколько это важно для вас и вашей компании? Я бы сказал, что у вас очень мало шансов на успех, если только сейчас я не вижу больше, чем вижу. Весьма вероятно, что любое решение будет связано с большим количеством переборов.

Между прочим, в процессе решения не используйте все данные. Вы можете придумать какую-то функцию, чтобы соответствовать любым точкам данных. Сохраните немного данных для тестов, чтобы увидеть, работает ли ваша производная функция с внешними данными.

Наконец, это даже этично? Вы не сказали нам, откуда взялись эти цифры, и кажется правдоподобным, что это что-то, что генерирует другая компания в целях безопасности, и их намерения могут быть хорошими или плохими. Об этом стоит подумать хотя бы потому, что компания, которая ведет себя неэтично по отношению к другим, вполне может вести себя неэтично по отношению к своим сотрудникам.

0 голосов
/ 24 октября 2009

Посмотрите на данные с разных точек зрения:

  • Какие значения встречаются, какие цифры.

  • Посмотрите на различия. Это показывает, что x и y являются последовательными и что при удалении последней цифры / буквы существует тесная связь.

  • Посмотрите на шаблоны. y1 начинается с 06, а затем 05 в строках 4, 5 и 13, 14. Разница серийных номеров за вычетом контрольной цифры равна 16. Это может быть совпадением или не совпадать.

  • Запускать статистические тесты (здесь не так много данных).

  • Просмотр данных в различных системах счисления (шестнадцатеричные, двоичные).

  • Посмотрите на простую факторизацию чисел.

  • Посмотрите на влияние небольших различий в данных.

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

Постарайтесь найти как можно больше информации о вычислениях.

Некоторое знание криптоанализа также не будет плохим.

Затем составьте рабочую гипотезу о том, как вычисляются значения y1 и y2, и протестируйте ее. Например, первая проверка, которую я бы проверил, была бы немного смещена со сдвигом и xor (может быть, CRC) или какой-либо линейной функцией серийного номера по модулю 10000000, не учитывая конечные нули.

Сполосните и повторите. Если у вас достаточно терпения, и это не так сложно, вы можете найти его.

0 голосов
/ 22 октября 2009

Если вы уверены, что есть шаблон, вы можете попробовать машинное обучение техники. Но ваш набор данных для настройки и обучения «машины» довольно мал (всего по 10 на каждого). Более того, вам нужен прогноз, поэтому некоторые алгоритмы не будут работать для вас, такие как кластеризация, классификация, анализ ассоциаций. Нейронные сети были бы такой техникой. Это вариант, который вы действительно можете попробовать. К сожалению, я не специалист по машинному обучению / интеллектуальному анализу данных и не могу сказать вам путь. Для Java взгляните на WEKA .

0 голосов
/ 22 октября 2009

Это похоже на проблему, которая лучше всего решается нейронной сетью. Надеюсь, вы сможете получить больший набор данных для обучения!

0 голосов
/ 22 октября 2009

Учитывая, что значение z не изменяется в данных образца, его можно удалить. Там действительно нет общего подхода для решения этой проблемы, если у вас есть только данные. С другой стороны, если у вас есть возможность протестировать функцию с произвольными входами вашего собственного устройства, вы можете использовать методы, подобные дифференциальному криптоанализу.

0 голосов
/ 22 октября 2009

Вы всегда можете определить кусочную функцию:

f1 (355138022809833, RUPQ730562P, 247001) = 20578330 f1 (355138022809841, RUPQ730563D, 247001) = 72754950

и т.д.. поскольку вам не требуется преемственность.

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