К сожалению закончились комментарии, а разобраться очень хочется. Расскажу поподробнее.. Имеется строка, которая не превышает трехзначного числа ( 999 ), каждый символ который имеет числовой аналог состоящий из числа, так же не превышающего трехзначное. И того, получается... Что имеется - число, состоящее из 999 999 цифр. Что нужно - хотелось бы получить "столько-сколько нужно значный"или меньше, уникальный ключ. Я почему-то думал, что кол-вом групп можно будет ограничить кол-во знаков в ключе. Но, как видно, это не так. Просто, если учесть 999 999-значность числа, то значность ключа, может напугать. И ещё вопрос - если учесть, что нужно всегда равнозначное по кол-ву символов число и допустим, я разобью его на две группы и реального числа хватит только на одну группу, то вторую мне придется дополнять самому. И вот если я её заполню цифрой один, то есть вторая группа будет состоять только из цифры 1, то это может вызвать повторение, когда возникнет второй случай, что вторую группу придется снова заполнять цифрой 1?

@falcao: Вы правы! Длина строки 999 и каждый символ в 8 бит, что ровняется 255, что является трехзначным числом. И того меньше трех тысяч. Реальная задача - сделать из String ключей int. Так-как ключи бывают url, то их длина как раз может соответствовать 3000. И ещё я беру во внимание два фактора - первый, это строки имеют разную длину, но чтобы не было повторений, нужно приводить их числовой эквивалент, к одинаковому кол-ву цифр в числе. И второй, это то, что заранее я знаю кол-во строковых ключей, которые будут помещены, а значит, если их не будет больше 99, то и длину ключа было бы желательно не делать больше двух цифр, меньше хорошо. И итог выше сказанного - нужно из не повторяющихся чисел в которых 9999 цифр, получить уникальный ключ, число, кол-во знаков в котором можно контролировать. И как дополнение, если первичное число состоит из меньшего кол-ва знаков, чем 9999, то дополнить его наименьшей цифрой, например 1. Главная чтобы она всегда была одной и той же.

Извиняюсь за то, что не правильно понял Ваши слова о конкретике. Задавая его и помня прошлый совет, о разговорах на темы, касающихся только математики, я долго думал, как объяснить "длину строки", которую Вы так хорошо объяснили, что я забыл о том где нахожусь и перешёл немного не на ту конкретику:)

Ещё раз - дано известное кол-во целых чисел. Числа могут состоять от 1 до 3000 цифр. Нужно - сократить эти уникальные большие числа, в уникальные короткие. И было бы здорово, если кол-во цифр в конечном, маленьком ключе-числе, можно было бы ограничивать.

задан 13 Апр '14 19:15

изменен 13 Апр '14 22:36

Не сама строка не превышает 999, а её длина, то есть число символов.

Непонятно, как могло получиться число из 999999 цифр. Если всего имеется 999 символов (пусть 1000), и на каждом месте стоит число из трёх знаков, то получается не более 3000 цифр, то есть намного меньше.

Будет понятнее, если Вы опишете реальную задачу, которая перед Вами стоит. Типа, компьютер генерирует случайное многозначное число, и надо его превратить в короткий пароль. То есть лучше опустить при объяснении второстепенные вещи.

(13 Апр '14 19:45) falcao

Я вынужден ещё раз напомнить про принцип Дирихле. В том виде, как Вы ставите задачу, она неразрешима. Покажу на примере. Пусть есть числа от 1 до N, где число N очень большое. Вы фактически спрашиваете, а как их перенумеровать числами от 1 до m, где m маленькое, и чтобы не было совпадений? Именно это ведь понимается под "уникальностью". Но ясно же, что такого в принципе сделать нельзя.

(13 Апр '14 22:57) falcao

@falcao: Прошу прощения, почему-то не увидел Вашего ответа в прошлой теме. Там Вы сказали о такой элементарности, о которой прочитав, я немного посмеялся над собой. И у меня вот какой вопрос - возможно ли создать уникальные маленькие числа из, как Вы помогли выяснить раньше, числа состоящего из менее 3000 цифр, введя в условие кол-во больших чисел?

(13 Апр '14 23:04) shatal

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

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

(13 Апр '14 23:09) falcao

Да, чудес не бывает... Спасибо!

(13 Апр '14 23:46) shatal
10|600 символов нужно символов осталось
3

На счет значности ключа: алгоритм, предложенный мною до этого можно выполнять не по группам, а по цифрам (по времени потерь не будет точно), например из числа $%\overline{abcdef...}$% делаем ключ так: $%(((а$% mod $%b+b)c+d)e+f)g+...$%, где каждая буква соответствует цифре числа (из которого делается ключ) - тогда многие проблемы с группами чисел отпадают, в том числе и проблема с дополнением числа, так как для такого меньшего нормы числа просто будет меньшее количество циклов.
После первого "прохода", то есть цикла, может получиться число довольно большое, не удовлетворяющее "значностью", тогда с ним делаем по второму кругу и так далее, только следует заметить, что с каждым таким циклом вероятность на то, что числа случайно совпадут (даже при правильном алгоримте) возрастает, так что чем меньше нужна "значность" конечного ключа, тем больше будут совпадающих.

ссылка

отвечен 13 Апр '14 22:46

@kirill1771: Спасибо! Теперь остается только опытным путем проверять работоспособность.

(13 Апр '14 23:48) shatal
10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×509

задан
13 Апр '14 19:15

показан
571 раз

обновлен
13 Апр '14 23:48

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru