Среда, 18 Декабря 2024, 16:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Подскажите алгоритм.
martukДата: Воскресенье, 10 Января 2016, 12:20 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Есть очень интересная задачка:

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

На каком языке пишу - неважно. Использую библиотеку gmp, так что огромные числа не проблема. Просто нужно описание алгоритма, и довольно быстрого.
Но есть нюанс, алгоритм должен быть и обратным обратным инвертируемым, т.е. из большого числа мы получаем начальное значение.
GudleifrДата: Воскресенье, 10 Января 2016, 12:45 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Цитата martuk ()
Есть число в десятизначной системе. Нужен алгоритм, использующий это число в качестве начального значения, чтобы сгенерировать уникальное большое число (целое).
Большое число не будет "уникальнее", чем исходное - 10-значное.
Простейший алгоритм - генератор псевдослучайных чисел с циклом нужной длины.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
martukДата: Воскресенье, 10 Января 2016, 13:05 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Пока ходил на улицу, понял что прошу невозможное...

Цитата Gudleifr ()
генератор псевдослучайных чисел с циклом нужной длины.

Эта идея мне пришла ночью, но думал а как я узнаю семя при готовом наборе цифр?
Ладно, спасибо за ответ :-)

Добавлено (10 января 2016, 13:05)
---------------------------------------------

Цитата Gudleifr ()
Большое число не будет "уникальнее", чем исходное - 10-значное.

Ошибся, в десятиричной!
Вообще, даже исходное число может быть большим, но не больше конечного. Но даже при 3-значном числе должно получиться 1000 значное. Хотя ладно, наверно надо придумать что-то другое.
8Observer8Дата: Воскресенье, 10 Января 2016, 13:08 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Цитата martuk ()
1000кб

Что такое "кб"? Килобайт? Вы хотели написать 1 миллион?
martukДата: Воскресенье, 10 Января 2016, 13:10 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата 8Observer8 ()
Что такое "кб"? Килобайт? Вы хотели написать 1 миллион?

Нечего не хотел, это "по объему" такого числа. Решил отважиться так выразиться, т.к. думал так легче понять какое громадное число должно выйти.


Сообщение отредактировал martuk - Воскресенье, 10 Января 2016, 13:11
OpenGOOДата: Воскресенье, 10 Января 2016, 13:27 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Это задача про шифрование?

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
martukДата: Воскресенье, 10 Января 2016, 13:31 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Скорее нет, чем да. Просто слышал где-то про такой алгоритм. Но скорее всего, это был обман. Покапавшись в мусоре информации, нашел - что я чудак. Этот получается алгоритм сжатия файла, о чем я не подумал.
falcowareДата: Воскресенье, 10 Января 2016, 13:32 | Сообщение # 8
старожил
Сейчас нет на сайте
martuk, можно такой алгоритм:

1. Загадываем начальное число от 1 до 100 например, назовем его N.
2. Алгоритм такой:
Summa = N * 1 + N * 2 + N * 4 ... N * 2 ^^100.
Тогда искомое число N = Summa / (2^^0 + 2^^1 + ... 2 ^^100);
martukДата: Воскресенье, 10 Января 2016, 13:40 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
falcoware, классно) По твоему алгоритму число 24 превратилось в


Добавлено (10 января 2016, 13:40)
---------------------------------------------
Только что означает ^^ ?

Цитата
N * 2 + N * 4 ... N * 2
и почему 2 - 4 - 2 ?


Сообщение отредактировал martuk - Воскресенье, 10 Января 2016, 13:42
OpenGOOДата: Воскресенье, 10 Января 2016, 13:49 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
А то есть такие хэш-функции, они и создают больше уникальные числа (хотя бывают и коллизии), только они не обратимы, если только не использовать брутфорс (но это очень долго)

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
8Observer8Дата: Воскресенье, 10 Января 2016, 14:24 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Можно получить уникальное число с помощью хэш-функции, записать исходное число и полученое в словарь или таблицу базы данных, чтобы было взаимооднозначное соответсвие.
martukДата: Воскресенье, 10 Января 2016, 14:29 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
8Observer8, Так не пойдет. Словари здесь не нужны.
OpenGOOДата: Воскресенье, 10 Января 2016, 15:09 | Сообщение # 13
почти ветеран
Сейчас нет на сайте
Если задача не на шифрование, то можно воспользоваться сложением по модулю два.

Генерируем большое число, большое и маленькое число складываем по модулю два, получаем новое большое число.
Обратные процесс. Число полученное в результате сложения по модулю два и большое число складываем по модулю два, получаем маленькое.

Кстати, чтобы не таскать с собой большое число, достаточно запомнить seed.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]


Сообщение отредактировал OpenGOO - Воскресенье, 10 Января 2016, 15:22
falcowareДата: Воскресенье, 10 Января 2016, 15:24 | Сообщение # 14
старожил
Сейчас нет на сайте
martuk, ^^ это степень.
martukДата: Воскресенье, 10 Января 2016, 15:37 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Цитата falcoware ()
^^ это степень.

Значит я правильно понял. А почему не ^?
OpenGOO, а это мысль.
Всем спасибо за ответы) Вопрос решен!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг